2
0

CmDeferredRenderContext.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #include "CmDeferredRenderContext.h"
  2. #include "CmCommandQueue.h"
  3. #include "CmRenderSystem.h"
  4. #include "CmBlendState.h"
  5. #include "CmRasterizerState.h"
  6. #include "CmDepthStencilState.h"
  7. #include "CmGpuParams.h"
  8. namespace CamelotEngine
  9. {
  10. DeferredRenderContext::DeferredRenderContext(RenderSystem* rs, CM_THREAD_ID_TYPE threadId)
  11. :mCommandQueue(CM_NEW(CommandQueue, GenAlloc) CommandQueue(threadId))
  12. , mRenderSystem(rs)
  13. {
  14. assert(mRenderSystem != nullptr);
  15. }
  16. DeferredRenderContext::~DeferredRenderContext()
  17. {
  18. CM_DELETE(mCommandQueue, CommandQueue, GenAlloc);
  19. }
  20. void DeferredRenderContext::setViewport(ViewportPtr& vp)
  21. {
  22. mCommandQueue->queue(boost::bind(&RenderSystem::setViewport, mRenderSystem, vp));
  23. }
  24. void DeferredRenderContext::setVertexBuffer(UINT32 index, const VertexBufferPtr& buffer)
  25. {
  26. mCommandQueue->queue(boost::bind(&RenderSystem::setVertexBuffer, mRenderSystem, index, buffer));
  27. }
  28. void DeferredRenderContext::setIndexBuffer(const IndexBufferPtr& buffer)
  29. {
  30. mCommandQueue->queue(boost::bind(&RenderSystem::setIndexBuffer, mRenderSystem, buffer));
  31. }
  32. void DeferredRenderContext::setVertexDeclaration(VertexDeclarationPtr vertexDeclaration)
  33. {
  34. mCommandQueue->queue(boost::bind(&RenderSystem::setVertexDeclaration, mRenderSystem, vertexDeclaration));
  35. }
  36. void DeferredRenderContext::setDrawOperation(DrawOperationType op)
  37. {
  38. mCommandQueue->queue(boost::bind(&RenderSystem::setDrawOperation, mRenderSystem, op));
  39. }
  40. void DeferredRenderContext::setSamplerState(GpuProgramType gptype, UINT16 texUnit, const SamplerStatePtr& samplerState)
  41. {
  42. mCommandQueue->queue(boost::bind(&RenderSystem::setSamplerState, mRenderSystem, gptype, texUnit, samplerState));
  43. }
  44. void DeferredRenderContext::setBlendState(const BlendStatePtr& blendState)
  45. {
  46. mCommandQueue->queue(boost::bind(&RenderSystem::setBlendState, mRenderSystem, blendState));
  47. }
  48. void DeferredRenderContext::setRasterizerState(const RasterizerStatePtr& rasterizerState)
  49. {
  50. mCommandQueue->queue(boost::bind(&RenderSystem::setRasterizerState, mRenderSystem, rasterizerState));
  51. }
  52. void DeferredRenderContext::setDepthStencilState(const DepthStencilStatePtr& depthStencilState, UINT32 stencilRefValue)
  53. {
  54. mCommandQueue->queue(boost::bind(&RenderSystem::setDepthStencilState, mRenderSystem, depthStencilState, stencilRefValue));
  55. }
  56. void DeferredRenderContext::setTexture(GpuProgramType gptype, UINT16 unit, bool enabled, const TexturePtr& texPtr)
  57. {
  58. mCommandQueue->queue(boost::bind(&RenderSystem::setTexture, mRenderSystem, gptype, unit, enabled, texPtr));
  59. }
  60. void DeferredRenderContext::disableTextureUnit(GpuProgramType gptype, UINT16 texUnit)
  61. {
  62. mCommandQueue->queue(boost::bind(&RenderSystem::disableTextureUnit, mRenderSystem, gptype, texUnit));
  63. }
  64. void DeferredRenderContext::setScissorTest(UINT32 left, UINT32 top, UINT32 right, UINT32 bottom)
  65. {
  66. mCommandQueue->queue(boost::bind(&RenderSystem::setScissorRect, mRenderSystem, left, top, right, bottom));
  67. }
  68. void DeferredRenderContext::addClipPlane(const Plane &p)
  69. {
  70. mCommandQueue->queue(boost::bind(&RenderSystem::addClipPlane, mRenderSystem, p));
  71. }
  72. void DeferredRenderContext::addClipPlane(float A, float B, float C, float D)
  73. {
  74. mCommandQueue->queue(boost::bind(&RenderSystem::addClipPlane, mRenderSystem, A, B, C, D));
  75. }
  76. void DeferredRenderContext::setClipPlanes(const PlaneList& clipPlanes)
  77. {
  78. mCommandQueue->queue(boost::bind(&RenderSystem::setClipPlanes, mRenderSystem, clipPlanes));
  79. }
  80. void DeferredRenderContext::resetClipPlanes()
  81. {
  82. mCommandQueue->queue(boost::bind(&RenderSystem::resetClipPlanes, mRenderSystem));
  83. }
  84. void DeferredRenderContext::bindGpuProgram(HGpuProgram prg)
  85. {
  86. mCommandQueue->queue(boost::bind(&RenderSystem::bindGpuProgram, mRenderSystem, prg));
  87. }
  88. void DeferredRenderContext::unbindGpuProgram(GpuProgramType gptype)
  89. {
  90. mCommandQueue->queue(boost::bind(&RenderSystem::unbindGpuProgram, mRenderSystem, gptype));
  91. }
  92. void DeferredRenderContext::bindGpuParams(GpuProgramType gptype, GpuParamsPtr params)
  93. {
  94. mCommandQueue->queue(boost::bind(&RenderSystem::bindGpuParams, mRenderSystem, gptype, params));
  95. }
  96. void DeferredRenderContext::setRenderTarget(RenderTargetPtr target)
  97. {
  98. mCommandQueue->queue(boost::bind(&RenderSystem::setRenderTarget, mRenderSystem, target));
  99. }
  100. void DeferredRenderContext::clear(RenderTargetPtr target, unsigned int buffers, const Color& color, float depth, unsigned short stencil)
  101. {
  102. mCommandQueue->queue(boost::bind(&RenderSystem::clear, mRenderSystem, target, buffers, color, depth, stencil));
  103. }
  104. void DeferredRenderContext::beginFrame()
  105. {
  106. mCommandQueue->queue(boost::bind(&RenderSystem::beginFrame, mRenderSystem));
  107. }
  108. void DeferredRenderContext::endFrame()
  109. {
  110. mCommandQueue->queue(boost::bind(&RenderSystem::endFrame, mRenderSystem));
  111. }
  112. void DeferredRenderContext::render(const RenderOperation& op)
  113. {
  114. mCommandQueue->queue(boost::bind(&RenderSystem::render, mRenderSystem, op));
  115. }
  116. void DeferredRenderContext::draw(UINT32 vertexCount)
  117. {
  118. mCommandQueue->queue(boost::bind(&RenderSystem::draw, mRenderSystem, vertexCount));
  119. }
  120. void DeferredRenderContext::drawIndexed(UINT32 startIndex, UINT32 indexCount, UINT32 vertexCount)
  121. {
  122. mCommandQueue->queue(boost::bind(&RenderSystem::drawIndexed, mRenderSystem, startIndex, indexCount, vertexCount));
  123. }
  124. void DeferredRenderContext::submitToGpu()
  125. {
  126. std::queue<CommandQueue::Command>* commands = mCommandQueue->flush();
  127. RenderSystem* rs = RenderSystem::instancePtr();
  128. rs->queueCommand(boost::bind(&CommandQueue::playback, mCommandQueue, commands));
  129. }
  130. void DeferredRenderContext::cancelAll()
  131. {
  132. std::queue<CommandQueue::Command>* commands = mCommandQueue->flush();
  133. delete commands;
  134. }
  135. }