| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
- //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
- #pragma once
- #include "BsD3D11Prerequisites.h"
- #include "BsHardwareBuffer.h"
- namespace BansheeEngine
- {
- /** @addtogroup D3D11
- * @{
- */
- /** Class containing common functionality for all DirectX 11 hardware buffers. */
- class BS_D3D11_EXPORT D3D11HardwareBuffer : public HardwareBuffer
- {
- public:
- /** Available types of DX11 buffers. */
- enum BufferType
- {
- /** Contains geometry vertices and their properties. */
- BT_VERTEX = 0x1,
- /** Contains triangle to vertex mapping. */
- BT_INDEX = 0x2,
- /** Contains GPU program parameters. */
- BT_CONSTANT = 0x4,
- /** Special value signifying a buffer is of generic type. Not an actual buffer. */
- BT_GROUP_GENERIC = 0x8,
- /** Generic buffer that holds one or more user-defined structures laid out sequentially. */
- BT_STRUCTURED = BT_GROUP_GENERIC | 0x10,
- /** Generic buffer that holds raw block of bytes with no defined structure. */
- BT_RAW = BT_GROUP_GENERIC | 0x20,
- /** Generic buffer that is used for holding parameters used for indirect rendering. */
- BT_INDIRECTARGUMENT = BT_GROUP_GENERIC | 0x40,
- /** Generic buffer that allows the GPU program to use append/consume functionality. */
- BT_APPENDCONSUME = BT_GROUP_GENERIC | 0x80
- };
- D3D11HardwareBuffer(BufferType btype, GpuBufferUsage usage, UINT32 elementCount, UINT32 elementSize,
- D3D11Device& device, bool systemMemory = false, bool streamOut = false, bool randomGpuWrite = false,
- bool useCounter = false);
- ~D3D11HardwareBuffer();
- /** @copydoc HardwareBuffer::readData */
- void readData(UINT32 offset, UINT32 length, void* dest) override;
- /** @copydoc HardwareBuffer::writeData */
- void writeData(UINT32 offset, UINT32 length, const void* source,
- BufferWriteType writeFlags = BufferWriteType::Normal) override;
- /** @copydoc HardwareBuffer::copyData */
- void copyData(HardwareBuffer& srcBuffer, UINT32 srcOffset, UINT32 dstOffset,
- UINT32 length, bool discardWholeBuffer = false) override;
- /** Returns the internal DX11 buffer object. */
- ID3D11Buffer* getD3DBuffer() const { return mD3DBuffer; }
- protected:
- /** @copydoc HardwareBuffer::lockImpl */
- void* lockImpl(UINT32 offset, UINT32 length, GpuLockOptions options) override;
- /** @copydoc HardwareBuffer::unlockImpl */
- void unlockImpl() override;
- BufferType mBufferType;
- bool mRandomGpuWrite;
- bool mUseCounter;
- UINT32 mElementCount;
- UINT32 mElementSize;
- ID3D11Buffer* mD3DBuffer;
- bool mUseTempStagingBuffer;
- D3D11HardwareBuffer* mpTempStagingBuffer;
- bool mStagingUploadNeeded;
-
- D3D11Device& mDevice;
- D3D11_BUFFER_DESC mDesc;
- };
- /** @} */
- }
|