BsRasterizerState.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "RenderAPI/BsRasterizerState.h"
  4. #include "Managers/BsRenderStateManager.h"
  5. #include "RenderAPI/BsRenderAPI.h"
  6. #include "Private/RTTI/BsRasterizerStateRTTI.h"
  7. #include "Resources/BsResources.h"
  8. namespace bs
  9. {
  10. bool RASTERIZER_STATE_DESC::operator == (const RASTERIZER_STATE_DESC& rhs) const
  11. {
  12. return polygonMode == rhs.polygonMode &&
  13. cullMode == rhs.cullMode &&
  14. depthBias == rhs.depthBias &&
  15. depthBiasClamp == rhs.depthBiasClamp &&
  16. slopeScaledDepthBias == rhs.slopeScaledDepthBias &&
  17. depthClipEnable == rhs.depthClipEnable &&
  18. scissorEnable == rhs.scissorEnable &&
  19. multisampleEnable == rhs.multisampleEnable &&
  20. antialiasedLineEnable == rhs.antialiasedLineEnable;
  21. }
  22. RasterizerProperties::RasterizerProperties(const RASTERIZER_STATE_DESC& desc)
  23. :mData(desc), mHash(RasterizerState::generateHash(desc))
  24. { }
  25. RasterizerState::RasterizerState(const RASTERIZER_STATE_DESC& desc)
  26. : mProperties(desc), mId(0)
  27. {
  28. }
  29. RasterizerState::~RasterizerState()
  30. {
  31. }
  32. SPtr<ct::RasterizerState> RasterizerState::getCore() const
  33. {
  34. return std::static_pointer_cast<ct::RasterizerState>(mCoreSpecific);
  35. }
  36. SPtr<ct::CoreObject> RasterizerState::createCore() const
  37. {
  38. SPtr<ct::RasterizerState> core = ct::RenderStateManager::instance()._createRasterizerState(mProperties.mData);
  39. mId = core->getId(); // Accessing core from sim thread is okay here since core ID is immutable
  40. return core;
  41. }
  42. const RasterizerProperties& RasterizerState::getProperties() const
  43. {
  44. return mProperties;
  45. }
  46. const SPtr<RasterizerState>& RasterizerState::getDefault()
  47. {
  48. return RenderStateManager::instance().getDefaultRasterizerState();
  49. }
  50. SPtr<RasterizerState> RasterizerState::create(const RASTERIZER_STATE_DESC& desc)
  51. {
  52. return RenderStateManager::instance().createRasterizerState(desc);
  53. }
  54. UINT64 RasterizerState::generateHash(const RASTERIZER_STATE_DESC& desc)
  55. {
  56. size_t hash = 0;
  57. hash_combine(hash, (UINT32)desc.polygonMode);
  58. hash_combine(hash, (UINT32)desc.cullMode);
  59. hash_combine(hash, desc.depthBias);
  60. hash_combine(hash, desc.depthBiasClamp);
  61. hash_combine(hash, desc.slopeScaledDepthBias);
  62. hash_combine(hash, desc.depthClipEnable);
  63. hash_combine(hash, desc.scissorEnable);
  64. hash_combine(hash, desc.multisampleEnable);
  65. hash_combine(hash, desc.antialiasedLineEnable);
  66. return (UINT64)hash;
  67. }
  68. /************************************************************************/
  69. /* RTTI */
  70. /************************************************************************/
  71. RTTITypeBase* RasterizerState::getRTTIStatic()
  72. {
  73. return RasterizerStateRTTI::instance();
  74. }
  75. RTTITypeBase* RasterizerState::getRTTI() const
  76. {
  77. return RasterizerState::getRTTIStatic();
  78. }
  79. namespace ct
  80. {
  81. RasterizerState::RasterizerState(const RASTERIZER_STATE_DESC& desc, UINT32 id)
  82. : mProperties(desc), mId(id)
  83. {
  84. }
  85. RasterizerState::~RasterizerState()
  86. {
  87. }
  88. void RasterizerState::initialize()
  89. {
  90. // Since we cache states it's possible this object was already initialized
  91. // (i.e. multiple sim-states can share a single core-state)
  92. if (isInitialized())
  93. return;
  94. createInternal();
  95. CoreObject::initialize();
  96. }
  97. const RasterizerProperties& RasterizerState::getProperties() const
  98. {
  99. return mProperties;
  100. }
  101. SPtr<RasterizerState> RasterizerState::create(const RASTERIZER_STATE_DESC& desc)
  102. {
  103. return RenderStateManager::instance().createRasterizerState(desc);
  104. }
  105. const SPtr<RasterizerState>& RasterizerState::getDefault()
  106. {
  107. return RenderStateManager::instance().getDefaultRasterizerState();
  108. }
  109. }
  110. }