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)
507 bool copyData =
false)
608 #endif // __HardwareBufferManager__ HardwareCounterBufferSharedPtr createCounterBuffer(size_t sizeBytes, HardwareBuffer::Usage usage, bool useShadowBuffer, const String &name="")
Create counter buffer.
void _notifyConterBufferDestroyed(HardwareCounterBuffer *buf)
void _notifyCounterBufferDestroyed(HardwareCounterBuffer *buf)
Notification that at hardware counter buffer has been destroyed.
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.
virtual HardwareIndexBufferSharedPtr createIndexBuffer(HardwareIndexBuffer::IndexType itype, size_t numIndexes, HardwareBuffer::Usage usage, bool useShadowBuffer=false)=0
Create a hardware index buffer.
virtual void touchVertexBufferCopy(const HardwareVertexBufferSharedPtr &bufferCopy)
Tell engine that the vertex buffer copy intent to reuse.
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 destroyVertexDeclaration(VertexDeclaration *decl)
Destroys a vertex declaration.
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...
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.
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.
virtual HardwareVertexBufferSharedPtr allocateVertexBufferCopy(const HardwareVertexBufferSharedPtr &sourceBuffer, BufferLicenseType licenseType, HardwareBufferLicensee *licensee, bool copyData=false)
Allocates a copy of a given vertex buffer.
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.
virtual VertexDeclaration * createVertexDeclaration(void)
Creates a new vertex declaration.
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.
virtual void _freeUnusedBufferCopies(void)
Free all unused vertex buffer copies.
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
virtual void _releaseBufferCopies(bool forceFreeUnused=false)
Internal method for releasing all temporary buffers which have been allocated using BLT_AUTOMATIC_REL...
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.
CounterBufferList mCounterBuffers
Reference-counted shared pointer, used for objects where implicit destruction is required.
virtual VertexBufferBinding * createVertexBufferBinding(void)
Creates a new VertexBufferBinding.
static const size_t EXPIRED_DELAY_FRAME_THRESHOLD
Frame delay for BLT_AUTOMATIC_RELEASE temporary buffers.
IndexBufferList mIndexBuffers
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.
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
void _notifyVertexBufferDestroyed(HardwareVertexBuffer *buf)
Notification that a hardware vertex buffer has been destroyed.
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.
virtual void destroyVertexBufferBinding(VertexBufferBinding *binding)
Destroys a VertexBufferBinding.
void _notifyIndexBufferDestroyed(HardwareIndexBuffer *buf)
Notification that a hardware index buffer has been destroyed.
VertexBufferLicense(HardwareVertexBuffer *orig, BufferLicenseType ltype, size_t delay, HardwareVertexBufferSharedPtr buf, HardwareBufferLicensee *lic)
virtual void registerVertexBufferSourceAndCopy(const HardwareVertexBufferSharedPtr &sourceBuffer, const HardwareVertexBufferSharedPtr ©)
Registers a vertex buffer as a copy of another.
virtual void _forceReleaseBufferCopies(const HardwareVertexBufferSharedPtr &sourceBuffer)
Internal method that forces the release of copies of a given buffer.
bool posNormalShareBuffer
Both positions and normals are contained in the same buffer.
VertexDeclarationList mVertexDeclarations
virtual void destroyVertexBufferBinding(VertexBufferBinding *binding)
Destroys a VertexBufferBinding.
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.
HardwareVertexBufferSharedPtr buffer