BsD3D11GpuParamBlockBuffer.cpp 2.0 KB

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