28 #ifndef __HardwareBufferManager__
29 #define __HardwareBufferManager__
86 void extractFrom(
const VertexData* sourceData);
88 void checkoutTempCopies(
bool positions =
true,
bool normals =
true);
90 void bindTempCopies(
VertexData* targetData,
bool suppressHardwareUpload);
94 bool buffersCheckedOut(
bool positions =
true,
bool normals =
true)
const;
137 virtual
void destroyAllDeclarations(
void);
139 virtual
void destroyAllBindings(
void);
158 BLT_AUTOMATIC_RELEASE
177 : originalBufferPtr(orig)
179 , expiredDelay(delay)
211 virtual ~HardwareBufferManagerBase();
241 createVertexBuffer(
size_t vertexSize,
size_t numVerts,
HardwareBuffer::Usage usage,
242 bool useShadowBuffer = false) = 0;
284 virtual
void registerVertexBufferSourceAndCopy(
308 bool copyData = false);
318 virtual
void releaseVertexBufferCopy(
331 virtual
void touchVertexBufferCopy(
343 virtual
void _freeUnusedBufferCopies(
void);
351 virtual
void _releaseBufferCopies(
bool forceFreeUnused = false);
362 virtual
void _forceReleaseBufferCopies(
391 HardwareBufferManager(HardwareBufferManagerBase* imp);
392 ~HardwareBufferManager();
397 bool useShadowBuffer =
false)
448 bool copyData =
false)
514 static HardwareBufferManager& getSingleton(
void);
530 static HardwareBufferManager* getSingletonPtr(
void);
HardwareVertexBufferSharedPtr createVertexBuffer(size_t vertexSize, size_t numVerts, HardwareBuffer::Usage usage, bool useShadowBuffer=false)
virtual void destroyVertexBufferBinding(VertexBufferBinding *binding)
HardwareVertexBufferSharedPtr srcNormalBuffer
void _notifyIndexBufferDestroyed(HardwareIndexBuffer *buf)
Notification that a hardware index buffer has been destroyed.
size_t mUnderUsedFrameCount
Number of frames elapsed since temporary buffers utilization was above half the available.
virtual void _freeUnusedBufferCopies(void)
Free all unused vertex buffer copies.
Singleton wrapper for hardware buffer manager.
Records the state of all the vertex buffer bindings required to provide a vertex declaration with the...
virtual void registerVertexBufferSourceAndCopy(const HardwareVertexBufferSharedPtr &sourceBuffer, const HardwareVertexBufferSharedPtr ©)
virtual void _forceReleaseBufferCopies(const HardwareVertexBufferSharedPtr &sourceBuffer)
Internal method that forces the release of copies of a given buffer.
Structure for recording the use of temporary blend buffers.
Template class for creating single-instance global classes.
virtual void _forceReleaseBufferCopies(const HardwareVertexBufferSharedPtr &sourceBuffer)
HardwareBufferManagerBase * mImpl
VertexBufferLicense(HardwareVertexBuffer *orig, BufferLicenseType ltype, size_t delay, HardwareVertexBufferSharedPtr buf, HardwareBufferLicensee *lic)
virtual void destroyVertexDeclaration(VertexDeclaration *decl)
HardwareVertexBuffer * originalBufferPtr
virtual ~HardwareBufferLicensee()
Specialisation of HardwareBuffer for vertex index buffers, still abstract.
virtual void releaseVertexBufferCopy(const HardwareVertexBufferSharedPtr &bufferCopy)
virtual HardwareVertexBufferSharedPtr allocateVertexBufferCopy(const HardwareVertexBufferSharedPtr &sourceBuffer, BufferLicenseType licenseType, HardwareBufferLicensee *licensee, bool copyData=false)
Allocates a copy of a given vertex buffer.
virtual HardwareVertexBufferSharedPtr allocateVertexBufferCopy(const HardwareVertexBufferSharedPtr &sourceBuffer, BufferLicenseType licenseType, HardwareBufferLicensee *licensee, bool copyData=false)
Shared pointer implementation used to share index buffers.
HardwareBufferLicensee * licensee
void _notifyIndexBufferDestroyed(HardwareIndexBuffer *buf)
virtual void registerVertexBufferSourceAndCopy(const HardwareVertexBufferSharedPtr &sourceBuffer, const HardwareVertexBufferSharedPtr ©)
Registers a vertex buffer as a copy of another.
BufferLicenseType licenseType
VertexDeclarationList mVertexDeclarations
Shared pointer implementation used to share index buffers.
VertexBufferList mVertexBuffers
virtual void touchVertexBufferCopy(const HardwareVertexBufferSharedPtr &bufferCopy)
Tell engine that the vertex buffer copy intent to reuse.
IndexBufferList mIndexBuffers
bool posNormalShareBuffer
Both positions and normals are contained in the same buffer.
static const size_t UNDER_USED_FRAME_THRESHOLD
Number of frames to wait before free unused temporary buffers.
void _notifyVertexBufferDestroyed(HardwareVertexBuffer *buf)
virtual void _releaseBufferCopies(bool forceFreeUnused=false)
Internal method for releasing all temporary buffers which have been allocated using BLT_AUTOMATIC_REL...
HardwareVertexBufferSharedPtr destNormalBuffer
Licensee will only release buffer when it says so.
Abstract interface representing a 'licensee' of a hardware buffer copy.
TemporaryVertexBufferLicenseMap mTempVertexBufferLicenses
Map of currently licensed temporary buffers.
HardwareVertexBufferSharedPtr destPositionBuffer
virtual VertexBufferBinding * createVertexBufferBinding(void)
Creates a new VertexBufferBinding.
HardwareIndexBufferSharedPtr createIndexBuffer(HardwareIndexBuffer::IndexType itype, size_t numIndexes, HardwareBuffer::Usage usage, bool useShadowBuffer=false)
RenderToVertexBufferSharedPtr createRenderToVertexBuffer()
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
virtual RenderToVertexBufferSharedPtr createRenderToVertexBuffer()=0
Create a render to vertex buffer.
Base definition of a hardware buffer manager.
map< HardwareVertexBuffer *, VertexBufferLicense >::type TemporaryVertexBufferLicenseMap
Map from temporary buffer to details of a license.
set< VertexDeclaration * >::type VertexDeclarationList
Usage
Enums describing buffer usage; not mutually exclusive.
virtual void _releaseBufferCopies(bool forceFreeUnused=false)
multimap< HardwareVertexBuffer *, HardwareVertexBufferSharedPtr >::type FreeTemporaryVertexBufferMap
Map from original buffer to temporary buffers.
virtual void releaseVertexBufferCopy(const HardwareVertexBufferSharedPtr &bufferCopy)
Manually release a vertex buffer copy for others to subsequently use.
HardwareVertexBufferSharedPtr buffer
set< HardwareVertexBuffer * >::type VertexBufferList
WARNING: The following two members should place before all other members.
unsigned short normBindIndex
HardwareVertexBufferSharedPtr srcPositionBuffer
Summary class collecting together vertex source information.
This class declares the format of a set of vertex inputs, which can be issued to the rendering API th...
void _notifyVertexBufferDestroyed(HardwareVertexBuffer *buf)
Notification that a hardware vertex buffer has been destroyed.
virtual VertexBufferBinding * createVertexBufferBinding(void)
FreeTemporaryVertexBufferMap mFreeTempVertexBufferMap
Map of current available temp buffers.
Struct holding details of a license to use a temporary shared buffer.
Abstract class defining common features of hardware buffers.
unsigned short posBindIndex
set< VertexBufferBinding * >::type VertexBufferBindingList
Specialisation of HardwareBuffer for a vertex buffer.
virtual void destroyVertexBufferBinding(VertexBufferBinding *binding)
Destroys a VertexBufferBinding.
Reference-counted shared pointer, used for objects where implicit destruction is required.
virtual HardwareIndexBufferSharedPtr createIndexBuffer(HardwareIndexBuffer::IndexType itype, size_t numIndexes, HardwareBuffer::Usage usage, bool useShadowBuffer=false)=0
Create a hardware index buffer.
virtual VertexDeclaration * createVertexDeclaration(void)
virtual void _forceReleaseBufferCopies(HardwareVertexBuffer *sourceBuffer)
static const size_t EXPIRED_DELAY_FRAME_THRESHOLD
Frame delay for BLT_AUTOMATIC_RELEASE temporary buffers.
virtual void destroyVertexDeclaration(VertexDeclaration *decl)
Destroys a vertex declaration.
virtual HardwareVertexBufferSharedPtr createVertexBuffer(size_t vertexSize, size_t numVerts, HardwareBuffer::Usage usage, bool useShadowBuffer=false)=0
Create a hardware vertex buffer.
set< HardwareIndexBuffer * >::type IndexBufferList
virtual void touchVertexBufferCopy(const HardwareVertexBufferSharedPtr &bufferCopy)
virtual VertexDeclaration * createVertexDeclaration(void)
Creates a new vertex declaration.
virtual void _freeUnusedBufferCopies(void)
VertexBufferBindingList mVertexBufferBindings