CmRenderStateManager.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include "CmRenderStateManager.h"
  2. #include "CmSamplerState.h"
  3. #include "CmDepthStencilState.h"
  4. #include "CmRasterizerState.h"
  5. #include "CmBlendState.h"
  6. namespace BansheeEngine
  7. {
  8. SamplerStatePtr RenderStateManager::createSamplerState(const SAMPLER_STATE_DESC& desc) const
  9. {
  10. SamplerStatePtr samplerState = createSamplerStateImpl();
  11. samplerState->_setThisPtr(samplerState);
  12. samplerState->initialize(desc);
  13. return samplerState;
  14. }
  15. DepthStencilStatePtr RenderStateManager::createDepthStencilState(const DEPTH_STENCIL_STATE_DESC& desc) const
  16. {
  17. DepthStencilStatePtr depthStencilState = createDepthStencilStateImpl();
  18. depthStencilState->_setThisPtr(depthStencilState);
  19. depthStencilState->initialize(desc);
  20. return depthStencilState;
  21. }
  22. RasterizerStatePtr RenderStateManager::createRasterizerState(const RASTERIZER_STATE_DESC& desc) const
  23. {
  24. RasterizerStatePtr rasterizerState = createRasterizerStateImpl();
  25. rasterizerState->_setThisPtr(rasterizerState);
  26. rasterizerState->initialize(desc);
  27. return rasterizerState;
  28. }
  29. BlendStatePtr RenderStateManager::createBlendState(const BLEND_STATE_DESC& desc) const
  30. {
  31. BlendStatePtr blendState = createBlendStateImpl();
  32. blendState->_setThisPtr(blendState);
  33. blendState->initialize(desc);
  34. return blendState;
  35. }
  36. SamplerStatePtr RenderStateManager::createEmptySamplerState() const
  37. {
  38. SamplerStatePtr samplerState = createSamplerStateImpl();
  39. samplerState->_setThisPtr(samplerState);
  40. return samplerState;
  41. }
  42. DepthStencilStatePtr RenderStateManager::createEmptyDepthStencilState() const
  43. {
  44. DepthStencilStatePtr depthStencilState = createDepthStencilStateImpl();
  45. depthStencilState->_setThisPtr(depthStencilState);
  46. return depthStencilState;
  47. }
  48. RasterizerStatePtr RenderStateManager::createEmptyRasterizerState() const
  49. {
  50. RasterizerStatePtr rasterizerState = createRasterizerStateImpl();
  51. rasterizerState->_setThisPtr(rasterizerState);
  52. return rasterizerState;
  53. }
  54. BlendStatePtr RenderStateManager::createEmptyBlendState() const
  55. {
  56. BlendStatePtr blendState = createBlendStateImpl();
  57. blendState->_setThisPtr(blendState);
  58. return blendState;
  59. }
  60. const SamplerStatePtr& RenderStateManager::getDefaultSamplerState() const
  61. {
  62. if(mDefaultSamplerState == nullptr)
  63. mDefaultSamplerState = createSamplerState(SAMPLER_STATE_DESC());
  64. return mDefaultSamplerState;
  65. }
  66. const BlendStatePtr& RenderStateManager::getDefaultBlendState() const
  67. {
  68. if(mDefaultBlendState == nullptr)
  69. mDefaultBlendState = createBlendState(BLEND_STATE_DESC());
  70. return mDefaultBlendState;
  71. }
  72. const RasterizerStatePtr& RenderStateManager::getDefaultRasterizerState() const
  73. {
  74. if(mDefaultRasterizerState == nullptr)
  75. mDefaultRasterizerState = createRasterizerState(RASTERIZER_STATE_DESC());
  76. return mDefaultRasterizerState;
  77. }
  78. const DepthStencilStatePtr& RenderStateManager::getDefaultDepthStencilState() const
  79. {
  80. if(mDefaultDepthStencilState == nullptr)
  81. mDefaultDepthStencilState = createDepthStencilState(DEPTH_STENCIL_STATE_DESC());
  82. return mDefaultDepthStencilState;
  83. }
  84. SamplerStatePtr RenderStateManager::createSamplerStateImpl() const
  85. {
  86. return bs_core_ptr<SamplerState, PoolAlloc>();
  87. }
  88. BlendStatePtr RenderStateManager::createBlendStateImpl() const
  89. {
  90. return bs_core_ptr<BlendState, PoolAlloc>();
  91. }
  92. RasterizerStatePtr RenderStateManager::createRasterizerStateImpl() const
  93. {
  94. return bs_core_ptr<RasterizerState, PoolAlloc>();
  95. }
  96. DepthStencilStatePtr RenderStateManager::createDepthStencilStateImpl() const
  97. {
  98. return bs_core_ptr<DepthStencilState, PoolAlloc>();
  99. }
  100. }