CmD3D11GpuParamBlockBuffer.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "CmD3D11GpuParamBlockBuffer.h"
  2. #include "CmD3D11HardwareBuffer.h"
  3. #include "CmD3D11RenderSystem.h"
  4. #include "CmD3D11Device.h"
  5. namespace CamelotFramework
  6. {
  7. D3D11GpuParamBlockBuffer::D3D11GpuParamBlockBuffer()
  8. :mBuffer(nullptr)
  9. {
  10. }
  11. void D3D11GpuParamBlockBuffer::initialize_internal()
  12. {
  13. D3D11RenderSystem* d3d11rs = static_cast<D3D11RenderSystem*>(RenderSystem::instancePtr());
  14. D3D11Device& device = d3d11rs->getPrimaryDevice();
  15. if(mUsage == GPBU_STATIC)
  16. mBuffer = cm_new<D3D11HardwareBuffer, PoolAlloc>(D3D11HardwareBuffer::BT_CONSTANT, GBU_STATIC, 1, mSize, std::ref(device));
  17. else if(mUsage == GPBU_DYNAMIC)
  18. mBuffer = cm_new<D3D11HardwareBuffer, PoolAlloc>(D3D11HardwareBuffer::BT_CONSTANT, GBU_DYNAMIC, 1, mSize, std::ref(device));
  19. else
  20. CM_EXCEPT(InternalErrorException, "Invalid gpu param block usage.");
  21. GpuParamBlockBuffer::initialize_internal();
  22. }
  23. void D3D11GpuParamBlockBuffer::destroy_internal()
  24. {
  25. if(mBuffer != nullptr)
  26. cm_delete<PoolAlloc>(mBuffer);
  27. GpuParamBlockBuffer::destroy_internal();
  28. }
  29. ID3D11Buffer* D3D11GpuParamBlockBuffer::getD3D11Buffer() const
  30. {
  31. return mBuffer->getD3DBuffer();
  32. }
  33. void D3D11GpuParamBlockBuffer::writeData(const UINT8* data)
  34. {
  35. mBuffer->writeData(0, mSize, data, BufferWriteType::Discard);
  36. }
  37. void D3D11GpuParamBlockBuffer::readData(UINT8* data) const
  38. {
  39. mBuffer->readData(0, mSize, data);
  40. }
  41. }