CmD3D11GpuBuffer.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. void* D3D11GpuBuffer::lock(UINT32 offset, UINT32 length, GpuLockOptions options)
  35. {
  36. return mBuffer->lock(offset, length, options);
  37. }
  38. void D3D11GpuBuffer::unlock()
  39. {
  40. mBuffer->unlock();
  41. }
  42. void D3D11GpuBuffer::readData(UINT32 offset, UINT32 length, void* pDest)
  43. {
  44. mBuffer->readData(offset, length, pDest);
  45. }
  46. void D3D11GpuBuffer::writeData(UINT32 offset, UINT32 length, const void* pSource, bool discardWholeBuffer)
  47. {
  48. mBuffer->writeData(offset, length, pSource, discardWholeBuffer);
  49. }
  50. void D3D11GpuBuffer::copyData(GpuBuffer& srcBuffer, UINT32 srcOffset,
  51. UINT32 dstOffset, UINT32 length, bool discardWholeBuffer)
  52. {
  53. D3D11GpuBuffer* d3d11SrcBuffer = static_cast<D3D11GpuBuffer*>(&srcBuffer);
  54. mBuffer->copyData(*d3d11SrcBuffer->mBuffer, srcOffset, dstOffset, length, discardWholeBuffer);
  55. }
  56. ID3D11Buffer* D3D11GpuBuffer::getDX11Buffer() const
  57. {
  58. return mBuffer->getD3DBuffer();
  59. }
  60. GpuBufferView* D3D11GpuBuffer::createView()
  61. {
  62. return new D3D11GpuBufferView();
  63. }
  64. void D3D11GpuBuffer::destroyView(GpuBufferView* view)
  65. {
  66. if(view != nullptr)
  67. delete view;
  68. }
  69. void D3D11GpuBuffer::destroy_internal()
  70. {
  71. delete mBuffer;
  72. GpuBuffer::destroy_internal();
  73. }
  74. }