CmRenderStateManager.cpp 3.6 KB

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