28#ifndef __HardwareBufferManager__
29#define __HardwareBufferManager__
256 bool useShadowBuffer =
false) = 0;
294 bool useShadowBuffer =
false,
const String& name =
"") = 0;
302 bool useShadowBuffer =
false,
const String& name =
"") = 0;
347 bool copyData =
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);
Abstract interface representing a 'licensee' of a hardware buffer copy.
virtual ~HardwareBufferLicensee()
virtual void licenseExpired(HardwareBuffer *buffer)=0
This method is called when the buffer license is expired and is about to be returned to the shared po...
HardwareVertexBufferSharedPtr buffer
VertexBufferLicense(HardwareVertexBuffer *orig, BufferLicenseType ltype, size_t delay, HardwareVertexBufferSharedPtr buf, HardwareBufferLicensee *lic)
HardwareVertexBuffer * originalBufferPtr
HardwareBufferLicensee * licensee
BufferLicenseType licenseType
multimap< HardwareVertexBuffer *, HardwareVertexBufferSharedPtr >::type FreeTemporaryVertexBufferMap
Map from original buffer to temporary buffers.
virtual VertexBufferBinding * createVertexBufferBindingImpl(void)
Internal method for creates a new VertexBufferBinding, may be overridden by certain rendering APIs.
UniformBufferList mUniformBuffers
virtual void _forceReleaseBufferCopies(const HardwareVertexBufferSharedPtr &sourceBuffer)
Internal method that forces the release of copies of a given buffer.
set< HardwareUniformBuffer * >::type UniformBufferList
virtual void registerVertexBufferSourceAndCopy(const HardwareVertexBufferSharedPtr &sourceBuffer, const HardwareVertexBufferSharedPtr ©)
Registers a vertex buffer as a copy of another.
void _notifyVertexBufferDestroyed(HardwareVertexBuffer *buf)
Notification that a hardware vertex buffer has been destroyed.
set< HardwareIndexBuffer * >::type IndexBufferList
VertexBufferBindingList mVertexBufferBindings
OGRE_MUTEX(mIndexBuffersMutex)
virtual void _freeUnusedBufferCopies(void)
Free all unused vertex buffer copies.
set< HardwareCounterBuffer * >::type CounterBufferList
OGRE_MUTEX(mUniformBuffersMutex)
virtual void destroyVertexBufferBindingImpl(VertexBufferBinding *binding)
Internal method for destroys a VertexBufferBinding, may be overridden by certain rendering APIs.
OGRE_MUTEX(mVertexBuffersMutex)
set< VertexBufferBinding * >::type VertexBufferBindingList
IndexBufferList mIndexBuffers
void _notifyCounterBufferDestroyed(HardwareCounterBuffer *buf)
Notification that at hardware counter buffer has been destroyed.
virtual void destroyAllDeclarations(void)
Internal method for destroys all vertex declarations.
virtual void _releaseBufferCopies(bool forceFreeUnused=false)
Internal method for releasing all temporary buffers which have been allocated using BLT_AUTOMATIC_REL...
virtual VertexDeclaration * createVertexDeclarationImpl(void)
Internal method for creates a new vertex declaration, may be overridden by certain rendering APIs.
virtual HardwareVertexBufferSharedPtr createVertexBuffer(size_t vertexSize, size_t numVerts, HardwareBuffer::Usage usage, bool useShadowBuffer=false)=0
Create a hardware vertex buffer.
virtual void touchVertexBufferCopy(const HardwareVertexBufferSharedPtr &bufferCopy)
Tell engine that the vertex buffer copy intent to reuse.
static const size_t EXPIRED_DELAY_FRAME_THRESHOLD
Frame delay for BLT_AUTOMATIC_RELEASE temporary buffers.
VertexBufferList mVertexBuffers
TemporaryVertexBufferLicenseMap mTempVertexBufferLicenses
Map of currently licensed temporary buffers.
virtual RenderToVertexBufferSharedPtr createRenderToVertexBuffer()=0
Create a render to vertex buffer.
@ BLT_MANUAL_RELEASE
Licensee will only release buffer when it says so.
@ BLT_AUTOMATIC_RELEASE
Licensee can have license revoked.
virtual void destroyVertexBufferBinding(VertexBufferBinding *binding)
Destroys a VertexBufferBinding.
virtual void destroyVertexDeclaration(VertexDeclaration *decl)
Destroys a vertex declaration.
size_t mUnderUsedFrameCount
Number of frames elapsed since temporary buffers utilization was above half the available.
virtual void destroyAllBindings(void)
Internal method for destroys all vertex buffer bindings.
virtual void _forceReleaseBufferCopies(HardwareVertexBuffer *sourceBuffer)
Internal method that forces the release of copies of a given buffer.
void _notifyIndexBufferDestroyed(HardwareIndexBuffer *buf)
Notification that a hardware index buffer has been destroyed.
HardwareBufferManagerBase()
virtual HardwareVertexBufferSharedPtr allocateVertexBufferCopy(const HardwareVertexBufferSharedPtr &sourceBuffer, BufferLicenseType licenseType, HardwareBufferLicensee *licensee, bool copyData=false)
Allocates a copy of a given vertex buffer.
set< VertexDeclaration * >::type VertexDeclarationList
virtual VertexBufferBinding * createVertexBufferBinding(void)
Creates a new VertexBufferBinding.
VertexDeclarationList mVertexDeclarations
virtual ~HardwareBufferManagerBase()
friend class HardwareVertexBufferSharedPtr
friend class HardwareIndexBufferSharedPtr
virtual HardwareVertexBufferSharedPtr makeBufferCopy(const HardwareVertexBufferSharedPtr &source, HardwareBuffer::Usage usage, bool useShadowBuffer)
Creates a new buffer as a copy of the source, does not copy data.
set< HardwareVertexBuffer * >::type VertexBufferList
WARNING: The following two members should place before all other members.
OGRE_MUTEX(mVertexDeclarationsMutex)
FreeTemporaryVertexBufferMap mFreeTempVertexBufferMap
Map of current available temp buffers.
OGRE_MUTEX(mCounterBuffersMutex)
OGRE_MUTEX(mTempBuffersMutex)
virtual void releaseVertexBufferCopy(const HardwareVertexBufferSharedPtr &bufferCopy)
Manually release a vertex buffer copy for others to subsequently use.
void _notifyUniformBufferDestroyed(HardwareUniformBuffer *buf)
Notification that at hardware uniform buffer has been destroyed.
virtual HardwareUniformBufferSharedPtr createUniformBuffer(size_t sizeBytes, HardwareBuffer::Usage usage=HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY_DISCARDABLE, bool useShadowBuffer=false, const String &name="")=0
Create uniform buffer.
virtual VertexDeclaration * createVertexDeclaration(void)
Creates a new vertex declaration.
virtual HardwareIndexBufferSharedPtr createIndexBuffer(HardwareIndexBuffer::IndexType itype, size_t numIndexes, HardwareBuffer::Usage usage, bool useShadowBuffer=false)=0
Create a hardware index buffer.
map< HardwareVertexBuffer *, VertexBufferLicense >::type TemporaryVertexBufferLicenseMap
Map from temporary buffer to details of a license.
virtual HardwareCounterBufferSharedPtr createCounterBuffer(size_t sizeBytes, HardwareBuffer::Usage usage=HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY_DISCARDABLE, bool useShadowBuffer=false, const String &name="")=0
Create counter buffer.
virtual void destroyVertexDeclarationImpl(VertexDeclaration *decl)
Internal method for destroys a vertex declaration, may be overridden by certain rendering APIs.
CounterBufferList mCounterBuffers
OGRE_MUTEX(mVertexBufferBindingsMutex)
static const size_t UNDER_USED_FRAME_THRESHOLD
Number of frames to wait before free unused temporary buffers.
HardwareBufferManager(HardwareBufferManagerBase *imp)
virtual void _forceReleaseBufferCopies(HardwareVertexBuffer *sourceBuffer)
Internal method that forces the release of copies of a given buffer.
HardwareBufferManagerBase * mImpl
void _notifyVertexBufferDestroyed(HardwareVertexBuffer *buf)
Notification that a hardware vertex buffer has been destroyed.
virtual void releaseVertexBufferCopy(const HardwareVertexBufferSharedPtr &bufferCopy)
Manually release a vertex buffer copy for others to subsequently use.
void _notifyUniformBufferDestroyed(HardwareUniformBuffer *buf)
void _notifyConterBufferDestroyed(HardwareCounterBuffer *buf)
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...
RenderToVertexBufferSharedPtr createRenderToVertexBuffer()
Create a render to vertex buffer.
virtual void destroyVertexDeclaration(VertexDeclaration *decl)
Destroys a vertex declaration.
virtual HardwareVertexBufferSharedPtr allocateVertexBufferCopy(const HardwareVertexBufferSharedPtr &sourceBuffer, BufferLicenseType licenseType, HardwareBufferLicensee *licensee, bool copyData=false)
Allocates a copy of a given vertex buffer.
HardwareIndexBufferSharedPtr createIndexBuffer(HardwareIndexBuffer::IndexType itype, size_t numIndexes, HardwareBuffer::Usage usage, bool useShadowBuffer=false)
Create a hardware index buffer.
static HardwareBufferManager & getSingleton(void)
Override standard Singleton retrieval.
virtual void _freeUnusedBufferCopies(void)
Free all unused vertex buffer copies.
HardwareUniformBufferSharedPtr createUniformBuffer(size_t sizeBytes, HardwareBuffer::Usage usage, bool useShadowBuffer, const String &name="")
Create uniform buffer.
HardwareCounterBufferSharedPtr createCounterBuffer(size_t sizeBytes, HardwareBuffer::Usage usage, bool useShadowBuffer, const String &name="")
Create counter buffer.
virtual VertexBufferBinding * createVertexBufferBinding(void)
Creates a new VertexBufferBinding.
virtual void _forceReleaseBufferCopies(const HardwareVertexBufferSharedPtr &sourceBuffer)
Internal method that forces the release of copies of a given buffer.
friend class HardwareVertexBufferSharedPtr
friend class HardwareIndexBufferSharedPtr
virtual VertexDeclaration * createVertexDeclaration(void)
static HardwareBufferManager * getSingletonPtr(void)
Override standard Singleton retrieval.
HardwareVertexBufferSharedPtr createVertexBuffer(size_t vertexSize, size_t numVerts, HardwareBuffer::Usage usage, bool useShadowBuffer=false)
Create a hardware vertex buffer.
void _notifyIndexBufferDestroyed(HardwareIndexBuffer *buf)
Notification that a hardware index buffer has been destroyed.
virtual void destroyVertexBufferBinding(VertexBufferBinding *binding)
Destroys a VertexBufferBinding.
virtual void touchVertexBufferCopy(const HardwareVertexBufferSharedPtr &bufferCopy)
Tell engine that the vertex buffer copy intent to reuse.
Abstract class defining common features of hardware buffers.
Usage
Enums describing buffer usage; not mutually exclusive.
@ HBU_DYNAMIC_WRITE_ONLY_DISCARDABLE
Combination of HBU_DYNAMIC, HBU_WRITE_ONLY and HBU_DISCARDABLE.
Shared pointer implementation used to share counter buffers.
Specialisation of HardwareBuffer for a counter buffer.
Shared pointer implementation used to share index buffers.
Specialisation of HardwareBuffer for vertex index buffers, still abstract.
Shared pointer implementation used to share vertex buffers.
Specialisation of HardwareBuffer for a vertex buffer.
Singleton(const Singleton< HardwareBufferManager > &)
Structure for recording the use of temporary blend buffers.
HardwareVertexBufferSharedPtr srcNormalBuffer
HardwareVertexBufferSharedPtr destNormalBuffer
unsigned short normBindIndex
void licenseExpired(HardwareBuffer *buffer)
Overridden member from HardwareBufferLicensee.
unsigned short posBindIndex
void checkoutTempCopies(bool positions=true, bool normals=true)
Utility method, checks out temporary copies of src into dest.
bool posNormalShareBuffer
Both positions and normals are contained in the same buffer.
HardwareVertexBufferSharedPtr destPositionBuffer
~TempBlendedBufferInfo(void)
bool buffersCheckedOut(bool positions=true, bool normals=true) const
Detect currently have buffer copies checked out and touch it.
void bindTempCopies(VertexData *targetData, bool suppressHardwareUpload)
Utility method, binds dest copies into a given VertexData struct.
void extractFrom(const VertexData *sourceData)
Utility method, extract info from the given VertexData.
HardwareVertexBufferSharedPtr srcPositionBuffer
Records the state of all the vertex buffer bindings required to provide a vertex declaration with the...
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...
SharedPtr< RenderToVertexBuffer > RenderToVertexBufferSharedPtr
RenderSysAllocatedObject BufferAlloc
std::map< K, V, P, A > type
std::multimap< K, V, P, A > type