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. D3D11GpuParamBlockBufferCore::D3D11GpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage)
  9. :GpuParamBlockBufferCore(size, usage), mBuffer(nullptr)
  10. {
  11. }
  12. void D3D11GpuParamBlockBufferCore::initialize()
  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. GpuParamBlockBufferCore::initialize();
  24. }
  25. void D3D11GpuParamBlockBufferCore::destroy()
  26. {
  27. if(mBuffer != nullptr)
  28. bs_delete<PoolAlloc>(mBuffer);
  29. BS_INC_RENDER_STAT_CAT(ResDestroyed, RenderStatObject_GpuParamBuffer);
  30. GpuParamBlockBufferCore::destroy();
  31. }
  32. ID3D11Buffer* D3D11GpuParamBlockBufferCore::getD3D11Buffer() const
  33. {
  34. return mBuffer->getD3DBuffer();
  35. }
  36. void D3D11GpuParamBlockBufferCore::writeToGPU(const UINT8* data)
  37. {
  38. mBuffer->writeData(0, mSize, data, BufferWriteType::Discard);
  39. BS_INC_RENDER_STAT_CAT(ResWrite, RenderStatObject_GpuParamBuffer);
  40. }
  41. void D3D11GpuParamBlockBufferCore::readFromGPU(UINT8* data) const
  42. {
  43. mBuffer->readData(0, mSize, data);
  44. BS_INC_RENDER_STAT_CAT(ResRead, RenderStatObject_GpuParamBuffer);
  45. }
  46. }