OgreVertexIndexData.h
Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004     (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org/
00006 
00007 Copyright (c) 2000-2013 Torus Knot Software Ltd
00008 
00009 Permission is hereby granted, free of charge, to any person obtaining a copy
00010 of this software and associated documentation files (the "Software"), to deal
00011 in the Software without restriction, including without limitation the rights
00012 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00013 copies of the Software, and to permit persons to whom the Software is
00014 furnished to do so, subject to the following conditions:
00015 
00016 The above copyright notice and this permission notice shall be included in
00017 all copies or substantial portions of the Software.
00018 
00019 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00020 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00021 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00022 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00023 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00024 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00025 THE SOFTWARE.
00026 -----------------------------------------------------------------------------
00027 */
00028 #ifndef __VertexIndexData_H__
00029 #define __VertexIndexData_H__
00030 
00031 #include "OgrePrerequisites.h"
00032 #include "OgreHardwareVertexBuffer.h"
00033 #include "OgreHardwareIndexBuffer.h"
00034 #include "OgreHeaderPrefix.h"
00035 
00036 namespace Ogre {
00044 
00045     typedef vector<HardwareBuffer::Usage>::type BufferUsageList;
00046 
00047 
00049     class _OgreExport VertexData : public VertexDataAlloc
00050     {
00051     private:
00053         VertexData(const VertexData& rhs); /* do nothing, should not use */
00055         VertexData& operator=(const VertexData& rhs); /* do not use */
00056 
00057         HardwareBufferManagerBase* mMgr;
00058     public:
00065         VertexData(HardwareBufferManagerBase* mgr = 0);
00074         VertexData(VertexDeclaration* dcl, VertexBufferBinding* bind);
00075         ~VertexData();
00076 
00080         VertexDeclaration* vertexDeclaration;
00084         VertexBufferBinding* vertexBufferBinding;
00086         bool mDeleteDclBinding;
00088         size_t vertexStart;
00090         size_t vertexCount;
00091 
00092 
00094         struct HardwareAnimationData
00095         {
00096             unsigned short targetBufferIndex;
00097             Real parametric;
00098         };
00099         typedef vector<HardwareAnimationData>::type HardwareAnimationDataList;
00101         HardwareAnimationDataList hwAnimationDataList;
00103         size_t hwAnimDataItemsUsed;
00104         
00110         VertexData* clone(bool copyData = true, HardwareBufferManagerBase* mgr = 0) const;
00111 
00131         void prepareForShadowVolume(void);
00132 
00146         HardwareVertexBufferSharedPtr hardwareShadowVolWBuffer;
00147 
00148 
00167         void reorganiseBuffers(VertexDeclaration* newDeclaration, const BufferUsageList& bufferUsage, 
00168             HardwareBufferManagerBase* mgr = 0);
00169 
00187         void reorganiseBuffers(VertexDeclaration* newDeclaration, HardwareBufferManagerBase* mgr = 0);
00188 
00198         void closeGapsInBindings(void);
00199 
00208         void removeUnusedBuffers(void);
00209 
00217         void convertPackedColour(VertexElementType srcType, VertexElementType destType);
00218 
00219 
00235         ushort allocateHardwareAnimationElements(ushort count, bool animateNormals);
00236 
00237 
00238 
00239     };
00240 
00242     class _OgreExport IndexData : public IndexDataAlloc
00243     {
00244     protected:
00246         IndexData(const IndexData& rhs); /* do nothing, should not use */
00248         IndexData& operator=(const IndexData& rhs); /* do not use */
00249     public:
00250         IndexData();
00251         ~IndexData();
00253         HardwareIndexBufferSharedPtr indexBuffer;
00254 
00256         size_t indexStart;
00257 
00259         size_t indexCount;
00260 
00266         IndexData* clone(bool copyData = true, HardwareBufferManagerBase* mgr = 0) const;
00267 
00276         void optimiseVertexCacheTriList(void);
00277     
00278     };
00279 
00285     class _OgreExport VertexCacheProfiler : public BufferAlloc
00286     {
00287         public:
00288             enum CacheType {
00289                 FIFO, LRU
00290             };
00291 
00292             VertexCacheProfiler(unsigned int cachesize = 16, CacheType cachetype = FIFO )
00293                 : size ( cachesize ), tail (0), buffersize (0), hit (0), miss (0)
00294             {
00295                 cache = OGRE_ALLOC_T(uint32, size, MEMCATEGORY_GEOMETRY);
00296             }
00297 
00298             ~VertexCacheProfiler()
00299             {
00300                 OGRE_FREE(cache, MEMCATEGORY_GEOMETRY);
00301             }
00302 
00303             void profile(const HardwareIndexBufferSharedPtr& indexBuffer);
00304             void reset() { hit = 0; miss = 0; tail = 0; buffersize = 0; }
00305             void flush() { tail = 0; buffersize = 0; }
00306 
00307             unsigned int getHits() { return hit; }
00308             unsigned int getMisses() { return miss; }
00309             unsigned int getSize() { return size; }
00310         private:
00311             unsigned int size;
00312             uint32 *cache;
00313 
00314             unsigned int tail, buffersize;
00315             unsigned int hit, miss;
00316 
00317             bool inCache(unsigned int index);
00318     };
00321 }
00322 
00323 #include "OgreHeaderSuffix.h"
00324 
00325 #endif
00326 

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Mon Jul 27 2020 13:40:48