CmD3D11GenericBuffer.cpp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "CmD3D11GenericBuffer.h"
  2. #include "CmD3D11GenericBufferView.h"
  3. #include "CmD3D11RenderSystem.h"
  4. #include "CmD3D11HardwareBuffer.h"
  5. #include "CmD3D11Device.h"
  6. #include "CmException.h"
  7. namespace CamelotEngine
  8. {
  9. D3D11GenericBuffer::D3D11GenericBuffer(UINT32 elementCount, UINT32 elementSize, GenericBufferType type, GpuBufferUsage usage, bool randomGpuWrite, bool useCounter)
  10. : GenericBuffer(elementCount, elementSize, type, usage, randomGpuWrite, useCounter), mBuffer(nullptr)
  11. {
  12. D3D11HardwareBuffer::BufferType bufferType;
  13. D3D11RenderSystem* d3d11rs = static_cast<D3D11RenderSystem*>(D3D11RenderSystem::instancePtr());
  14. switch(type)
  15. {
  16. case GBT_STRUCTURED:
  17. bufferType = D3D11HardwareBuffer::BT_STRUCTURED;
  18. break;
  19. case GBT_RAW:
  20. bufferType = D3D11HardwareBuffer::BT_RAW;
  21. break;
  22. case GBT_INDIRECTARGUMENT:
  23. bufferType = D3D11HardwareBuffer::BT_INDIRECTARGUMENT;
  24. break;
  25. case GBT_APPENDCONSUME:
  26. bufferType = D3D11HardwareBuffer::BT_APPENDCONSUME;
  27. break;
  28. }
  29. mBuffer = new D3D11HardwareBuffer(bufferType, usage, elementCount, elementSize,
  30. d3d11rs->getPrimaryDevice(), false, false, randomGpuWrite, useCounter);
  31. }
  32. D3D11GenericBuffer::~D3D11GenericBuffer()
  33. {
  34. delete mBuffer;
  35. clearBufferViews();
  36. }
  37. void* D3D11GenericBuffer::lock(UINT32 offset, UINT32 length, GpuLockOptions options)
  38. {
  39. return mBuffer->lock(offset, length, options);
  40. }
  41. void D3D11GenericBuffer::unlock()
  42. {
  43. mBuffer->unlock();
  44. }
  45. void D3D11GenericBuffer::readData(UINT32 offset, UINT32 length, void* pDest)
  46. {
  47. mBuffer->readData(offset, length, pDest);
  48. }
  49. void D3D11GenericBuffer::writeData(UINT32 offset, UINT32 length, const void* pSource, bool discardWholeBuffer)
  50. {
  51. mBuffer->writeData(offset, length, pSource, discardWholeBuffer);
  52. }
  53. void D3D11GenericBuffer::copyData(GenericBuffer& srcBuffer, UINT32 srcOffset,
  54. UINT32 dstOffset, UINT32 length, bool discardWholeBuffer)
  55. {
  56. D3D11GenericBuffer* d3d11SrcBuffer = static_cast<D3D11GenericBuffer*>(&srcBuffer);
  57. mBuffer->copyData(*d3d11SrcBuffer->mBuffer, srcOffset, dstOffset, length, discardWholeBuffer);
  58. }
  59. GenericBufferView* D3D11GenericBuffer::createView(UINT32 firstElement, UINT32 elementWidth, UINT32 numElements, bool randomGpuWrite)
  60. {
  61. return new D3D11GenericBufferView(mBuffer->getD3DBuffer(), mType, firstElement, elementWidth, numElements, randomGpuWrite, mUseCounter);
  62. }
  63. void D3D11GenericBuffer::destroyView(GenericBufferView* view)
  64. {
  65. delete view;
  66. }
  67. }