BsRenderStateManager.cpp 3.8 KB

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