28 #ifndef __HardwareBufferManager__
29 #define __HardwareBufferManager__
90 void extractFrom(
const VertexData* sourceData);
92 void checkoutTempCopies(
bool positions =
true,
bool normals =
true);
94 void bindTempCopies(
VertexData* targetData,
bool suppressHardwareUpload);
98 bool buffersCheckedOut(
bool positions =
true,
bool normals =
true)
const;
147 virtual void destroyAllDeclarations(
void);
149 virtual void destroyAllBindings(
void);
168 BLT_AUTOMATIC_RELEASE
187 : originalBufferPtr(orig)
189 , expiredDelay(delay)
256 bool useShadowBuffer =
false) = 0;
294 bool useShadowBuffer =
false,
const String& name =
"") = 0;
302 bool useShadowBuffer =
false,
const String& name =
"") = 0;
319 virtual void registerVertexBufferSourceAndCopy(
347 bool copyData =
false);
358 virtual void releaseVertexBufferCopy(
383 virtual void _freeUnusedBufferCopies(
void);
392 virtual void _releaseBufferCopies(
bool forceFreeUnused =
false);
442 bool useShadowBuffer =
false)
444 return mImpl->createVertexBuffer(vertexSize, numVerts, usage, useShadowBuffer);
451 return mImpl->createIndexBuffer(itype, numIndexes, usage, useShadowBuffer);
457 return mImpl->createRenderToVertexBuffer();
464 return mImpl->createUniformBuffer(sizeBytes, usage, useShadowBuffer, name);
471 return mImpl->createCounterBuffer(sizeBytes, usage, useShadowBuffer, name);
477 return mImpl->createVertexDeclaration();
482 mImpl->destroyVertexDeclaration(decl);
488 return mImpl->createVertexBufferBinding();
493 mImpl->destroyVertexBufferBinding(binding);
500 mImpl->registerVertexBufferSourceAndCopy(sourceBuffer, copy);
507 bool copyData =
false)
509 return mImpl->allocateVertexBufferCopy(sourceBuffer, licenseType, licensee, copyData);
515 mImpl->releaseVertexBufferCopy(bufferCopy);
522 mImpl->touchVertexBufferCopy(bufferCopy);
528 mImpl->_freeUnusedBufferCopies();
533 mImpl->_releaseBufferCopies(forceFreeUnused);
539 mImpl->_forceReleaseBufferCopies(sourceBuffer);
544 mImpl->_forceReleaseBufferCopies(sourceBuffer);
549 mImpl->_notifyVertexBufferDestroyed(buf);
554 mImpl->_notifyIndexBufferDestroyed(buf);
559 mImpl->_notifyUniformBufferDestroyed(buf);
564 mImpl->_notifyCounterBufferDestroyed(buf);
608 #endif // __HardwareBufferManager__
HardwareVertexBufferSharedPtr createVertexBuffer(size_t vertexSize, size_t numVerts, HardwareBuffer::Usage usage, bool useShadowBuffer=false)
Create a hardware vertex buffer.
virtual void destroyVertexBufferBinding(VertexBufferBinding *binding)
Destroys a VertexBufferBinding.
HardwareVertexBufferSharedPtr srcNormalBuffer
size_t mUnderUsedFrameCount
Number of frames elapsed since temporary buffers utilization was above half the available.
CounterBufferList mCounterBuffers
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 ©)
Registers a vertex buffer as a copy of another.
Structure for recording the use of temporary blend buffers.
Template class for creating single-instance global classes.
virtual void _forceReleaseBufferCopies(const HardwareVertexBufferSharedPtr &sourceBuffer)
Internal method that forces the release of copies of a given buffer.
HardwareBufferManagerBase * mImpl
VertexBufferLicense(HardwareVertexBuffer *orig, BufferLicenseType ltype, size_t delay, HardwareVertexBufferSharedPtr buf, HardwareBufferLicensee *lic)
virtual void destroyVertexDeclaration(VertexDeclaration *decl)
Destroys a vertex declaration.
HardwareVertexBuffer * originalBufferPtr
virtual ~HardwareBufferLicensee()
void _notifyUniformBufferDestroyed(HardwareUniformBuffer *buf)
Specialisation of HardwareBuffer for vertex index buffers, still abstract.
virtual void releaseVertexBufferCopy(const HardwareVertexBufferSharedPtr &bufferCopy)
Manually release a vertex buffer copy for others to subsequently use.
Specialisation of HardwareBuffer for a counter buffer.
virtual HardwareVertexBufferSharedPtr allocateVertexBufferCopy(const HardwareVertexBufferSharedPtr &sourceBuffer, BufferLicenseType licenseType, HardwareBufferLicensee *licensee, bool copyData=false)
Allocates a copy of a given vertex buffer.
Shared pointer implementation used to share vertex buffers.
HardwareBufferLicensee * licensee
void _notifyIndexBufferDestroyed(HardwareIndexBuffer *buf)
Notification that a hardware index buffer has been destroyed.
Combination of HBU_DYNAMIC, HBU_WRITE_ONLY and HBU_DISCARDABLE.
void _notifyConterBufferDestroyed(HardwareCounterBuffer *buf)
BufferLicenseType licenseType
VertexDeclarationList mVertexDeclarations
Shared pointer implementation used to share index buffers.
VertexBufferList mVertexBuffers
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)
Notification that a hardware vertex buffer has been destroyed.
HardwareUniformBufferSharedPtr createUniformBuffer(size_t sizeBytes, HardwareBuffer::Usage usage, bool useShadowBuffer, const String &name="")
Create uniform buffer.
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
HardwareIndexBufferSharedPtr createIndexBuffer(HardwareIndexBuffer::IndexType itype, size_t numIndexes, HardwareBuffer::Usage usage, bool useShadowBuffer=false)
Create a hardware index buffer.
RenderToVertexBufferSharedPtr createRenderToVertexBuffer()
Create a render to vertex buffer.
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
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)
Internal method for releasing all temporary buffers which have been allocated using BLT_AUTOMATIC_REL...
multimap< HardwareVertexBuffer *, HardwareVertexBufferSharedPtr >::type FreeTemporaryVertexBufferMap
Map from original buffer to temporary buffers.
set< HardwareUniformBuffer * >::type UniformBufferList
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...
virtual VertexBufferBinding * createVertexBufferBinding(void)
Creates a new VertexBufferBinding.
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
HardwareCounterBufferSharedPtr createCounterBuffer(size_t sizeBytes, HardwareBuffer::Usage usage, bool useShadowBuffer, const String &name="")
Create counter buffer.
UniformBufferList mUniformBuffers
Shared pointer implementation used to share counter buffers.
Specialisation of HardwareBuffer for a vertex buffer.
set< HardwareCounterBuffer * >::type CounterBufferList
Reference-counted shared pointer, used for objects where implicit destruction is required.
virtual VertexDeclaration * createVertexDeclaration(void)
virtual void _forceReleaseBufferCopies(HardwareVertexBuffer *sourceBuffer)
Internal method that forces the release of copies of a given buffer.
static const size_t EXPIRED_DELAY_FRAME_THRESHOLD
Frame delay for BLT_AUTOMATIC_RELEASE temporary buffers.
set< HardwareIndexBuffer * >::type IndexBufferList
virtual void touchVertexBufferCopy(const HardwareVertexBufferSharedPtr &bufferCopy)
Tell engine that the vertex buffer copy intent to reuse.
virtual void _freeUnusedBufferCopies(void)
Free all unused vertex buffer copies.
VertexBufferBindingList mVertexBufferBindings