|  | 
|  | ReadOnlyBufferPacked (size_t internalBufferStartBytes, size_t numElements, uint32 bytesPerElement, uint32 numElementsPadding, BufferType bufferType, void *initialData, bool keepAsShadow, VaoManager *vaoManager, BufferInterface *bufferInterface, PixelFormatGpu pf) | 
|  | 
| BufferPackedTypes | getBufferPackedType () const override | 
|  | Useful to query which one is the derived class. 
 | 
|  | 
|  | TexBufferPacked (size_t internalBufferStartBytes, size_t numElements, uint32 bytesPerElement, uint32 numElementsPadding, BufferType bufferType, void *initialData, bool keepAsShadow, VaoManager *vaoManager, BufferInterface *bufferInterface, PixelFormatGpu pf) | 
|  | 
| virtual void | _bindBufferDirectly (uint16 slot, size_t offset, size_t sizeBytes) | 
|  | To be overriden only by GL3+. 
 | 
|  | 
| virtual void | bindBufferCS (uint16 slot, size_t offset=0, size_t sizeBytes=0)=0 | 
|  | 
| virtual void | bindBufferDS (uint16 slot, size_t offset=0, size_t sizeBytes=0)=0 | 
|  | 
| virtual void | bindBufferGS (uint16 slot, size_t offset=0, size_t sizeBytes=0)=0 | 
|  | 
| virtual void | bindBufferHS (uint16 slot, size_t offset=0, size_t sizeBytes=0)=0 | 
|  | 
| virtual void | bindBufferPS (uint16 slot, size_t offset=0, size_t sizeBytes=0)=0 | 
|  | 
| virtual void | bindBufferVS (uint16 slot, size_t offset=0, size_t sizeBytes=0)=0 | 
|  | Binds the texture buffer to the given slot in the Vertex/Pixel/Geometry/Hull/Domain/Compute Shader. 
 | 
|  | 
| BufferPackedTypes | getBufferPackedType () const override | 
|  | Useful to query which one is the derived class. 
 | 
|  | 
| PixelFormatGpu | getPixelFormat () const | 
|  | 
|  | BufferPacked (size_t internalBufferStartBytes, size_t numElements, uint32 bytesPerElement, uint32 numElementsPadding, BufferType bufferType, void *initialData, bool keepAsShadow, VaoManager *vaoManager, BufferInterface *bufferInterface) | 
|  | Generic constructor. 
 | 
|  | 
| virtual | ~BufferPacked () | 
|  | 
| size_t | _getFinalBufferStart () const | 
|  | 
| size_t | _getInternalBufferStart () const | 
|  | 
| size_t | _getInternalNumElements () const | 
|  | 
| size_t | _getInternalTotalSizeBytes () const | 
|  | 
| void | _setBufferInterface (BufferInterface *bufferInterface) | 
|  | For internal use. 
 | 
|  | 
| void | _setShadowCopy (void *copy) | 
|  | This will not delete the existing shadow copy so it can be used for other purposes if it is not needed call OGRE_FREE_SIMD( m->getShadowCopy(), MEMCATEGORY_GEOMETRY ) before calling this function. 
 | 
|  | 
| void | advanceFrame () | 
|  | 
| void | copyTo (BufferPacked *dstBuffer, size_t dstElemStart=0, size_t srcElemStart=0, size_t srcNumElems=std::numeric_limits< size_t >::max()) | 
|  | Copies the contents of this buffer to another, using GPU -> GPU transfers. 
 | 
|  | 
| BufferInterface * | getBufferInterface () const | 
|  | 
| BufferType | getBufferType () const | 
|  | 
| uint32 | getBytesPerElement () const | 
|  | 
| MappingState | getMappingState () const | 
|  | Returns the mapping state. 
 | 
|  | 
| size_t | getNumElements () const | 
|  | 
| virtual BufferPacked * | getOriginalBufferType () | 
|  | If this buffer has been reinterpreted from an UavBufferPacked, returns the original version, otherwise returns 'this'. 
 | 
|  | 
| const void * | getShadowCopy () const | 
|  | 
| size_t | getTotalSizeBytes () const | 
|  | 
| bool | isCurrentlyMapped () const | 
|  | Returns whether the buffer is currently mapped. 
 | 
|  | 
| void *RESTRICT_ALIAS_RETURN | map (size_t elementStart, size_t elementCount, bool bAdvanceFrame=true) | 
|  | Maps the specified region to a pointer the CPU can access. 
 | 
|  | 
| AsyncTicketPtr | readRequest (size_t elementStart, size_t elementCount) | 
|  | Async data read request. 
 | 
|  | 
| void | regressFrame () | 
|  | Performs the opposite of. 
 | 
|  | 
| void | unmap (UnmapOptions unmapOption, size_t flushStartElem=0, size_t flushSizeElem=0) | 
|  | Unmaps or flushes the region mapped with. 
 | 
|  | 
| virtual void | upload (const void *data, size_t elementStart, size_t elementCount) | 
|  | Sends the provided data to the GPU. 
 | 
|  | 
| virtual | ~GpuTrackedResource () | 
|  | 
| virtual bool | isTextureGpu () const | 
|  | 
Represents the best way to access read-only data. 
But how it is implemented depends largely on which HW/API it is running on:
- Buffer<> aka texture buffer in D3D11 on D3D10+ HW
- samplerBuffer aka texture buffer in GL3 on GL3/D3D10 HW
- SSBO aka UAV buffer in GL4 on GL4/D3D11 HW
- SSBO aka UAV buffer in Vulkan
- Metal doesn't matter, there are no differences between TexBuffer & UavBuffer, however we consume the slots reserved for tex buffers.
In short, it either behaves as a TexBufferPacked or as an UavBufferPacked (but read only) depending on HW and API being used.