OGRE
14.3
Object-Oriented Graphics Rendering Engine
|
Abstract class defining common features of hardware buffers. More...
#include <OgreHardwareBuffer.h>
Public Types | |
enum | LockOptions : uint8 { HBL_NORMAL , HBL_DISCARD , HBL_READ_ONLY , HBL_NO_OVERWRITE , HBL_WRITE_ONLY } |
Locking options. More... | |
typedef uint8 | Usage |
enum | UsageEnum { HBU_STATIC = HBU_GPU_TO_CPU , HBU_DYNAMIC = HBU_CPU_ONLY , HBU_WRITE_ONLY = HBU_DETAIL_WRITE_ONLY , HBU_DISCARDABLE = 8 , HBU_STATIC_WRITE_ONLY = HBU_GPU_ONLY , HBU_DYNAMIC_WRITE_ONLY = HBU_CPU_TO_GPU , HBU_DYNAMIC_WRITE_ONLY_DISCARDABLE = HBU_CPU_TO_GPU } |
Rather use HardwareBufferUsage. More... | |
Public Member Functions | |
HardwareBuffer (Usage usage, bool useShadowBuffer) | |
Constructor, to be called by HardwareBufferManager only. More... | |
virtual | ~HardwareBuffer () |
template<typename T > | |
T * | _getImpl () |
virtual void | _updateFromShadow (void) |
Updates the real buffer from the shadow buffer, if required. More... | |
void | copyData (HardwareBuffer &srcBuffer) |
Copy all data from another buffer into this one. More... | |
virtual void | copyData (HardwareBuffer &srcBuffer, size_t srcOffset, size_t dstOffset, size_t length, bool discardWholeBuffer=false) |
Copy data from another buffer into this one. More... | |
size_t | getSizeInBytes (void) const |
Returns the size of this buffer in bytes. More... | |
Usage | getUsage (void) const |
Returns the Usage flags with which this buffer was created. More... | |
bool | hasShadowBuffer (void) const |
Returns whether this buffer has a system memory shadow for quicker reading. More... | |
bool | isLocked (void) const |
Returns whether or not this buffer is currently locked. More... | |
virtual bool | isSystemMemory (void) const |
Returns whether this buffer is held in system memory. More... | |
void * | lock (LockOptions options) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More... | |
virtual void * | lock (size_t offset, size_t length, LockOptions options) |
Lock the buffer for (potentially) reading / writing. More... | |
virtual void | readData (size_t offset, size_t length, void *pDest) |
Reads data from the buffer and places it in the memory pointed to by pDest. More... | |
void | suppressHardwareUpdate (bool suppress) |
Pass true to suppress hardware upload of shadow buffer changes. More... | |
void | unlock (void) |
Releases the lock on this buffer. More... | |
virtual void | writeData (size_t offset, size_t length, const void *pSource, bool discardWholeBuffer=false) |
Writes data to the buffer from an area of system memory; note that you must ensure that your buffer is big enough. More... | |
Abstract class defining common features of hardware buffers.
A 'hardware buffer' is any area of memory held outside of core system ram, and in our case refers mostly to video ram, although in theory this class could be used with other memory areas such as sound card memory, custom coprocessor memory etc.
typedef uint8 Ogre::HardwareBuffer::Usage |
Rather use HardwareBufferUsage.
Enumerator | |
---|---|
HBU_STATIC | same as HBU_GPU_TO_CPU |
HBU_DYNAMIC | same as HBU_CPU_ONLY |
HBU_WRITE_ONLY | |
HBU_DISCARDABLE |
|
HBU_STATIC_WRITE_ONLY | same as HBU_GPU_ONLY |
HBU_DYNAMIC_WRITE_ONLY | same as HBU_CPU_TO_GPU |
HBU_DYNAMIC_WRITE_ONLY_DISCARDABLE |
|
Locking options.
|
inline |
Constructor, to be called by HardwareBufferManager only.
References Ogre::HBU_CPU_ONLY, Ogre::HBU_CPU_TO_GPU, Ogre::HBU_GPU_ONLY, and Ogre::HBU_GPU_TO_CPU.
|
inlinevirtual |
|
inlinevirtual |
Lock the buffer for (potentially) reading / writing.
offset | The byte offset from the start of the buffer to lock |
length | The size of the area to lock, in bytes |
options | Locking options |
Reimplemented in Ogre::HardwarePixelBuffer.
References OgreAssert.
Referenced by copyData(), and Ogre::HardwareBufferLockGuard::lock().
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
|
inline |
Releases the lock on this buffer.
Locking and unlocking a buffer can, in some rare circumstances such as switching video modes whilst the buffer is locked, corrupt the contents of a buffer. This is pretty rare, but if it occurs, this method will throw an exception, meaning you must re-upload the data.
References OgreAssert.
Referenced by copyData(), and Ogre::HardwareBufferLockGuard::unlock().
|
inlinevirtual |
Reads data from the buffer and places it in the memory pointed to by pDest.
offset | The byte offset from the start of the buffer to read |
length | The size of the area to read, in bytes |
pDest | The area of memory in which to place the data, must be large enough to accommodate the data! |
Reimplemented in Ogre::HardwarePixelBuffer, and Ogre::DefaultHardwareBuffer.
|
inlinevirtual |
Writes data to the buffer from an area of system memory; note that you must ensure that your buffer is big enough.
offset | The byte offset from the start of the buffer to start writing |
length | The size of the data to write to, in bytes |
pSource | The source of the data to be written |
discardWholeBuffer | If true, this allows the driver to discard the entire buffer when writing, such that DMA stalls can be avoided; use if you can. |
Reimplemented in Ogre::HardwarePixelBuffer, and Ogre::DefaultHardwareBuffer.
|
inlinevirtual |
Copy data from another buffer into this one.
Note that the source buffer must not be created with the usage HBU_WRITE_ONLY otherwise this will fail.
srcBuffer | The buffer from which to read the copied data |
srcOffset | Offset in the source buffer at which to start reading |
dstOffset | Offset in the destination buffer to start writing |
length | Length of the data to copy, in bytes. |
discardWholeBuffer | If true, will discard the entire contents of this buffer before copying |
References isSystemMemory(), lock(), and unlock().
|
inline |
Copy all data from another buffer into this one.
Normally these buffers should be of identical size, but if they're not, the routine will use the smallest of the two sizes.
References getSizeInBytes().
|
inlinevirtual |
Updates the real buffer from the shadow buffer, if required.
|
inline |
Returns the size of this buffer in bytes.
Referenced by copyData().
|
inline |
Returns the Usage flags with which this buffer was created.
|
inlinevirtual |
Returns whether this buffer is held in system memory.
Reimplemented in Ogre::DefaultHardwareBuffer.
Referenced by copyData().
|
inline |
Returns whether this buffer has a system memory shadow for quicker reading.
|
inline |
Returns whether or not this buffer is currently locked.
|
inline |
Pass true to suppress hardware upload of shadow buffer changes.
|
inline |