BsRenderTarget.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include "BsRenderTarget.h"
  2. #include "BsViewport.h"
  3. #include "BsException.h"
  4. #include "BsRenderSystem.h"
  5. #include "BsCoreThread.h"
  6. #include "BsFrameAlloc.h"
  7. namespace BansheeEngine
  8. {
  9. void RenderTargetProperties::copyToBuffer(UINT8* buffer) const
  10. {
  11. *(RenderTargetProperties*)buffer = *this;
  12. }
  13. void RenderTargetProperties::copyFromBuffer(UINT8* buffer)
  14. {
  15. *this = *(RenderTargetProperties*)buffer;
  16. }
  17. UINT32 RenderTargetProperties::getSize() const
  18. {
  19. return sizeof(RenderTargetProperties);
  20. }
  21. RenderTargetCore::RenderTargetCore(RenderTarget* parent, RenderTargetProperties* properties)
  22. :mProperties(properties), mParent(parent)
  23. {
  24. }
  25. RenderTargetCore::~RenderTargetCore()
  26. {
  27. bs_delete(mProperties);
  28. }
  29. CoreSyncData RenderTargetCore::syncFromCore(FrameAlloc* allocator)
  30. {
  31. UINT8* buffer = allocator->alloc(mProperties->getSize());
  32. mProperties->copyToBuffer(buffer);
  33. return CoreSyncData(buffer, mProperties->getSize());
  34. }
  35. void RenderTargetCore::syncToCore(const CoreSyncData& data)
  36. {
  37. assert(data.getBufferSize() == mProperties->getSize());
  38. mProperties->copyFromBuffer(data.getBuffer());
  39. }
  40. void RenderTargetCore::getCustomAttribute(const String& name, void* pData) const
  41. {
  42. BS_EXCEPT(InvalidParametersException, "Attribute not found.");
  43. }
  44. const RenderTargetProperties& RenderTargetCore::getProperties() const
  45. {
  46. THROW_IF_NOT_CORE_THREAD;
  47. return *mProperties;
  48. }
  49. SPtr<RenderTargetCore> RenderTarget::getCore() const
  50. {
  51. return std::static_pointer_cast<RenderTargetCore>(mCoreSpecific);
  52. }
  53. RenderTarget::RenderTarget()
  54. :mProperties(nullptr)
  55. {
  56. }
  57. RenderTarget::~RenderTarget()
  58. {
  59. bs_delete(mProperties);
  60. }
  61. const RenderTargetProperties& RenderTarget::getProperties() const
  62. {
  63. THROW_IF_CORE_THREAD;
  64. return *mProperties;
  65. }
  66. CoreSyncData RenderTarget::syncToCore(FrameAlloc* allocator)
  67. {
  68. UINT8* buffer = allocator->alloc(mProperties->getSize());
  69. mProperties->copyToBuffer(buffer);
  70. return CoreSyncData(buffer, mProperties->getSize());
  71. }
  72. void RenderTarget::syncFromCore(const CoreSyncData& data)
  73. {
  74. assert(data.getBufferSize() == mProperties->getSize());
  75. mProperties->copyFromBuffer(data.getBuffer());
  76. }
  77. void RenderTarget::getCustomAttribute(const String& name, void* pData) const
  78. {
  79. BS_EXCEPT(InvalidParametersException, "Attribute not found.");
  80. }
  81. }