BsD3D11GpuParamBlockBuffer.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "BsD3D11GpuParamBlockBuffer.h"
  2. #include "BsD3D11HardwareBuffer.h"
  3. #include "BsD3D11RenderSystem.h"
  4. #include "BsD3D11Device.h"
  5. #include "BsRenderStats.h"
  6. namespace BansheeEngine
  7. {
  8. D3D11GpuParamBlockBuffer::D3D11GpuParamBlockBuffer()
  9. :mBuffer(nullptr)
  10. {
  11. }
  12. void D3D11GpuParamBlockBuffer::initialize_internal()
  13. {
  14. D3D11RenderSystem* d3d11rs = static_cast<D3D11RenderSystem*>(RenderSystem::instancePtr());
  15. D3D11Device& device = d3d11rs->getPrimaryDevice();
  16. if(mUsage == GPBU_STATIC)
  17. mBuffer = bs_new<D3D11HardwareBuffer, PoolAlloc>(D3D11HardwareBuffer::BT_CONSTANT, GBU_STATIC, 1, mSize, std::ref(device));
  18. else if(mUsage == GPBU_DYNAMIC)
  19. mBuffer = bs_new<D3D11HardwareBuffer, PoolAlloc>(D3D11HardwareBuffer::BT_CONSTANT, GBU_DYNAMIC, 1, mSize, std::ref(device));
  20. else
  21. BS_EXCEPT(InternalErrorException, "Invalid gpu param block usage.");
  22. BS_INC_RENDER_STAT_CAT(ResCreated, RenderStatObject_GpuParamBuffer);
  23. GpuParamBlockBuffer::initialize_internal();
  24. }
  25. void D3D11GpuParamBlockBuffer::destroy_internal()
  26. {
  27. if(mBuffer != nullptr)
  28. bs_delete<PoolAlloc>(mBuffer);
  29. BS_INC_RENDER_STAT_CAT(ResDestroyed, RenderStatObject_GpuParamBuffer);
  30. GpuParamBlockBuffer::destroy_internal();
  31. }
  32. ID3D11Buffer* D3D11GpuParamBlockBuffer::getD3D11Buffer() const
  33. {
  34. return mBuffer->getD3DBuffer();
  35. }
  36. void D3D11GpuParamBlockBuffer::writeData(const UINT8* data)
  37. {
  38. mBuffer->writeData(0, mSize, data, BufferWriteType::Discard);
  39. BS_INC_RENDER_STAT_CAT(ResWrite, RenderStatObject_GpuParamBuffer);
  40. }
  41. void D3D11GpuParamBlockBuffer::readData(UINT8* data) const
  42. {
  43. mBuffer->readData(0, mSize, data);
  44. BS_INC_RENDER_STAT_CAT(ResRead, RenderStatObject_GpuParamBuffer);
  45. }
  46. }