CmD3D11GpuBuffer.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "CmD3D11GpuBuffer.h"
  2. #include "CmD3D11GpuBufferView.h"
  3. #include "CmD3D11RenderSystem.h"
  4. #include "CmD3D11HardwareBuffer.h"
  5. #include "CmD3D11Device.h"
  6. #include "CmException.h"
  7. namespace CamelotEngine
  8. {
  9. D3D11GpuBuffer::D3D11GpuBuffer(UINT32 elementCount, UINT32 elementSize, GpuBufferType type, GpuBufferUsage usage, bool randomGpuWrite, bool useCounter)
  10. : GpuBuffer(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. D3D11GpuBuffer::~D3D11GpuBuffer()
  33. {
  34. delete mBuffer;
  35. clearBufferViews();
  36. }
  37. void* D3D11GpuBuffer::lock(UINT32 offset, UINT32 length, GpuLockOptions options)
  38. {
  39. return mBuffer->lock(offset, length, options);
  40. }
  41. void D3D11GpuBuffer::unlock()
  42. {
  43. mBuffer->unlock();
  44. }
  45. void D3D11GpuBuffer::readData(UINT32 offset, UINT32 length, void* pDest)
  46. {
  47. mBuffer->readData(offset, length, pDest);
  48. }
  49. void D3D11GpuBuffer::writeData(UINT32 offset, UINT32 length, const void* pSource, bool discardWholeBuffer)
  50. {
  51. mBuffer->writeData(offset, length, pSource, discardWholeBuffer);
  52. }
  53. void D3D11GpuBuffer::copyData(GpuBuffer& srcBuffer, UINT32 srcOffset,
  54. UINT32 dstOffset, UINT32 length, bool discardWholeBuffer)
  55. {
  56. D3D11GpuBuffer* d3d11SrcBuffer = static_cast<D3D11GpuBuffer*>(&srcBuffer);
  57. mBuffer->copyData(*d3d11SrcBuffer->mBuffer, srcOffset, dstOffset, length, discardWholeBuffer);
  58. }
  59. ID3D11Buffer* D3D11GpuBuffer::getDX11Buffer() const
  60. {
  61. return mBuffer->getD3DBuffer();
  62. }
  63. GpuBufferView* D3D11GpuBuffer::createView()
  64. {
  65. return new D3D11GpuBufferView();
  66. }
  67. void D3D11GpuBuffer::destroyView(GpuBufferView* view)
  68. {
  69. if(view != nullptr)
  70. delete view;
  71. }
  72. }