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__
HardwareCounterBufferSharedPtr createCounterBuffer(size_t sizeBytes, HardwareBuffer::Usage usage, bool useShadowBuffer, const String &name="")
Create counter buffer.
void _notifyConterBufferDestroyed(HardwareCounterBuffer *buf)
HardwareVertexBuffer * originalBufferPtr
virtual VertexBufferBinding * createVertexBufferBinding(void)
Creates a new VertexBufferBinding.
virtual ~HardwareBufferLicensee()
void _notifyVertexBufferDestroyed(HardwareVertexBuffer *buf)
Notification that a hardware vertex buffer has been destroyed.
Shared pointer implementation used to share index buffers.
Summary class collecting together vertex source information.
void _notifyIndexBufferDestroyed(HardwareIndexBuffer *buf)
Notification that a hardware index buffer has been destroyed.
HardwareUniformBufferSharedPtr createUniformBuffer(size_t sizeBytes, HardwareBuffer::Usage usage, bool useShadowBuffer, const String &name="")
Create uniform buffer.
HardwareIndexBufferSharedPtr createIndexBuffer(HardwareIndexBuffer::IndexType itype, size_t numIndexes, HardwareBuffer::Usage usage, bool useShadowBuffer=false)
Create a hardware index buffer.
set< VertexBufferBinding * >::type VertexBufferBindingList
Specialisation of HardwareBuffer for a vertex buffer.
Structure for recording the use of temporary blend buffers.
virtual void releaseVertexBufferCopy(const HardwareVertexBufferSharedPtr &bufferCopy)
Manually release a vertex buffer copy for others to subsequently use.
virtual HardwareVertexBufferSharedPtr allocateVertexBufferCopy(const HardwareVertexBufferSharedPtr &sourceBuffer, BufferLicenseType licenseType, HardwareBufferLicensee *licensee, bool copyData=false)
Allocates a copy of a given vertex buffer.
VertexBufferBindingList mVertexBufferBindings
static const size_t UNDER_USED_FRAME_THRESHOLD
Number of frames to wait before free unused temporary buffers.
Singleton wrapper for hardware buffer manager.
Struct holding details of a license to use a temporary shared buffer.
virtual void _freeUnusedBufferCopies(void)
Free all unused vertex buffer copies.
TemporaryVertexBufferLicenseMap mTempVertexBufferLicenses
Map of currently licensed temporary buffers.
Specialisation of HardwareBuffer for vertex index buffers, still abstract.
BufferLicenseType licenseType
virtual void registerVertexBufferSourceAndCopy(const HardwareVertexBufferSharedPtr &sourceBuffer, const HardwareVertexBufferSharedPtr ©)
Registers a vertex buffer as a copy of another.
virtual void _releaseBufferCopies(bool forceFreeUnused=false)
Internal method for releasing all temporary buffers which have been allocated using BLT_AUTOMATIC_REL...
Licensee will only release buffer when it says so.
HardwareVertexBufferSharedPtr srcNormalBuffer
Shared pointer implementation used to share counter buffers.
Combination of HBU_DYNAMIC, HBU_WRITE_ONLY and HBU_DISCARDABLE.
Specialisation of HardwareBuffer for a counter buffer.
void _notifyUniformBufferDestroyed(HardwareUniformBuffer *buf)
This class declares the format of a set of vertex inputs, which can be issued to the rendering API th...
Shared pointer implementation used to share vertex buffers.
set< VertexDeclaration * >::type VertexDeclarationList
unsigned short normBindIndex
HardwareBufferManagerBase * mImpl
virtual VertexDeclaration * createVertexDeclaration(void)
Base definition of a hardware buffer manager.
UniformBufferList mUniformBuffers
multimap< HardwareVertexBuffer *, HardwareVertexBufferSharedPtr >::type FreeTemporaryVertexBufferMap
Map from original buffer to temporary buffers.
set< HardwareVertexBuffer * >::type VertexBufferList
WARNING: The following two members should place before all other members.
virtual void touchVertexBufferCopy(const HardwareVertexBufferSharedPtr &bufferCopy)
Tell engine that the vertex buffer copy intent to reuse.
set< HardwareCounterBuffer * >::type CounterBufferList
Usage
Enums describing buffer usage; not mutually exclusive.
virtual void _forceReleaseBufferCopies(const HardwareVertexBufferSharedPtr &sourceBuffer)
Internal method that forces the release of copies of a given buffer.
HardwareBufferLicensee * licensee
Abstract class defining common features of hardware buffers.
virtual void _forceReleaseBufferCopies(HardwareVertexBuffer *sourceBuffer)
Internal method that forces the release of copies of a given buffer.
HardwareVertexBufferSharedPtr srcPositionBuffer
Abstract interface representing a 'licensee' of a hardware buffer copy.
HardwareVertexBufferSharedPtr createVertexBuffer(size_t vertexSize, size_t numVerts, HardwareBuffer::Usage usage, bool useShadowBuffer=false)
Create a hardware vertex buffer.
Records the state of all the vertex buffer bindings required to provide a vertex declaration with the...
HardwareVertexBufferSharedPtr destNormalBuffer
HardwareVertexBufferSharedPtr destPositionBuffer
RenderToVertexBufferSharedPtr createRenderToVertexBuffer()
Create a render to vertex buffer.
unsigned short posBindIndex
size_t mUnderUsedFrameCount
Number of frames elapsed since temporary buffers utilization was above half the available.
set< HardwareUniformBuffer * >::type UniformBufferList
VertexBufferList mVertexBuffers
CounterBufferList mCounterBuffers
Reference-counted shared pointer, used for objects where implicit destruction is required.
static const size_t EXPIRED_DELAY_FRAME_THRESHOLD
Frame delay for BLT_AUTOMATIC_RELEASE temporary buffers.
IndexBufferList mIndexBuffers
FreeTemporaryVertexBufferMap mFreeTempVertexBufferMap
Map of current available temp buffers.
Template class for creating single-instance global classes.
map< HardwareVertexBuffer *, VertexBufferLicense >::type TemporaryVertexBufferLicenseMap
Map from temporary buffer to details of a license.
set< HardwareIndexBuffer * >::type IndexBufferList
virtual void destroyVertexDeclaration(VertexDeclaration *decl)
Destroys a vertex declaration.
virtual void destroyVertexBufferBinding(VertexBufferBinding *binding)
Destroys a VertexBufferBinding.
VertexBufferLicense(HardwareVertexBuffer *orig, BufferLicenseType ltype, size_t delay, HardwareVertexBufferSharedPtr buf, HardwareBufferLicensee *lic)
bool posNormalShareBuffer
Both positions and normals are contained in the same buffer.
VertexDeclarationList mVertexDeclarations
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
HardwareVertexBufferSharedPtr buffer