CmD3D11GpuParamBlock.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include "CmD3D11GpuParamBlock.h"
  2. #include "CmD3D11HardwareBuffer.h"
  3. #include "CmD3D11RenderSystem.h"
  4. #include "CmD3D11Device.h"
  5. namespace CamelotEngine
  6. {
  7. D3D11GpuParamBlockBuffer::D3D11GpuParamBlockBuffer(UINT32 size, GpuParamBlockUsage usage)
  8. :GpuParamBlockBuffer(size, usage), mBuffer(nullptr)
  9. {
  10. D3D11RenderSystem* d3d11rs = static_cast<D3D11RenderSystem*>(RenderSystem::instancePtr());
  11. D3D11Device& device = d3d11rs->getPrimaryDevice();
  12. if(mUsage == GPBU_STATIC)
  13. mBuffer = new D3D11HardwareBuffer(D3D11HardwareBuffer::BT_CONSTANT, GBU_STATIC, 1, mSize, device);
  14. else if(mUsage == GPBU_DYNAMIC)
  15. mBuffer = new D3D11HardwareBuffer(D3D11HardwareBuffer::BT_CONSTANT, GBU_DYNAMIC, 1, mSize, device);
  16. else
  17. CM_EXCEPT(InternalErrorException, "Invalid gpu param block usage.");
  18. }
  19. D3D11GpuParamBlockBuffer::~D3D11GpuParamBlockBuffer()
  20. {
  21. if(mBuffer != nullptr)
  22. delete mBuffer;
  23. }
  24. ID3D11Buffer* D3D11GpuParamBlockBuffer::getD3D11Buffer() const
  25. {
  26. return mBuffer->getD3DBuffer();
  27. }
  28. void D3D11GpuParamBlockBuffer::writeAll(const void* data)
  29. {
  30. mBuffer->writeData(0, mSize, data, true);
  31. GpuParamBlockBuffer::writeAll(data);
  32. }
  33. GpuParamBlockBuffer* D3D11GpuParamBlock::createBuffer() const
  34. {
  35. return new D3D11GpuParamBlockBuffer(mSize, mUsage);
  36. }
  37. }