BsBlendState.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #include "BsBlendState.h"
  2. #include "BsRenderStateManager.h"
  3. #include "BsRenderAPI.h"
  4. #include "BsBlendStateRTTI.h"
  5. #include "BsResources.h"
  6. namespace BansheeEngine
  7. {
  8. BlendProperties::BlendProperties(const BLEND_STATE_DESC& desc)
  9. :mData(desc)
  10. { }
  11. bool BlendProperties::getBlendEnabled(UINT32 renderTargetIdx) const
  12. {
  13. assert(renderTargetIdx >= 0 && renderTargetIdx < BS_MAX_MULTIPLE_RENDER_TARGETS);
  14. return mData.renderTargetDesc[renderTargetIdx].blendEnable;
  15. }
  16. BlendFactor BlendProperties::getSrcBlend(UINT32 renderTargetIdx) const
  17. {
  18. assert(renderTargetIdx >= 0 && renderTargetIdx < BS_MAX_MULTIPLE_RENDER_TARGETS);
  19. return mData.renderTargetDesc[renderTargetIdx].srcBlend;
  20. }
  21. BlendFactor BlendProperties::getDstBlend(UINT32 renderTargetIdx) const
  22. {
  23. assert(renderTargetIdx >= 0 && renderTargetIdx < BS_MAX_MULTIPLE_RENDER_TARGETS);
  24. return mData.renderTargetDesc[renderTargetIdx].dstBlend;
  25. }
  26. BlendOperation BlendProperties::getBlendOperation(UINT32 renderTargetIdx) const
  27. {
  28. assert(renderTargetIdx >= 0 && renderTargetIdx < BS_MAX_MULTIPLE_RENDER_TARGETS);
  29. return mData.renderTargetDesc[renderTargetIdx].blendOp;
  30. }
  31. BlendFactor BlendProperties::getAlphaSrcBlend(UINT32 renderTargetIdx) const
  32. {
  33. assert(renderTargetIdx >= 0 && renderTargetIdx < BS_MAX_MULTIPLE_RENDER_TARGETS);
  34. return mData.renderTargetDesc[renderTargetIdx].srcBlendAlpha;
  35. }
  36. BlendFactor BlendProperties::getAlphaDstBlend(UINT32 renderTargetIdx) const
  37. {
  38. assert(renderTargetIdx >= 0 && renderTargetIdx < BS_MAX_MULTIPLE_RENDER_TARGETS);
  39. return mData.renderTargetDesc[renderTargetIdx].dstBlendAlpha;
  40. }
  41. BlendOperation BlendProperties::getAlphaBlendOperation(UINT32 renderTargetIdx) const
  42. {
  43. assert(renderTargetIdx >= 0 && renderTargetIdx < BS_MAX_MULTIPLE_RENDER_TARGETS);
  44. return mData.renderTargetDesc[renderTargetIdx].blendOpAlpha;
  45. }
  46. UINT8 BlendProperties::getRenderTargetWriteMask(UINT32 renderTargetIdx) const
  47. {
  48. assert(renderTargetIdx >= 0 && renderTargetIdx < BS_MAX_MULTIPLE_RENDER_TARGETS);
  49. return mData.renderTargetDesc[renderTargetIdx].renderTargetWriteMask;
  50. }
  51. BlendStateCore::BlendStateCore(const BLEND_STATE_DESC& desc)
  52. :mProperties(desc)
  53. {
  54. }
  55. const BlendProperties& BlendStateCore::getProperties() const
  56. {
  57. return mProperties;
  58. }
  59. const SPtr<BlendStateCore>& BlendStateCore::getDefault()
  60. {
  61. return RenderStateCoreManager::instance().getDefaultBlendState();
  62. }
  63. BlendState::BlendState(const BLEND_STATE_DESC& desc)
  64. :mProperties(desc)
  65. { }
  66. SPtr<BlendStateCore> BlendState::getCore() const
  67. {
  68. return std::static_pointer_cast<BlendStateCore>(mCoreSpecific);
  69. }
  70. SPtr<CoreObjectCore> BlendState::createCore() const
  71. {
  72. return RenderStateCoreManager::instance().createBlendStateInternal(mProperties.mData);
  73. }
  74. const BlendProperties& BlendState::getProperties() const
  75. {
  76. return mProperties;
  77. }
  78. const BlendStatePtr& BlendState::getDefault()
  79. {
  80. return RenderStateManager::instance().getDefaultBlendState();
  81. }
  82. BlendStatePtr BlendState::create(const BLEND_STATE_DESC& desc)
  83. {
  84. return RenderStateManager::instance().createBlendState(desc);
  85. }
  86. /************************************************************************/
  87. /* RTTI */
  88. /************************************************************************/
  89. RTTITypeBase* BlendState::getRTTIStatic()
  90. {
  91. return BlendStateRTTI::instance();
  92. }
  93. RTTITypeBase* BlendState::getRTTI() const
  94. {
  95. return BlendState::getRTTIStatic();
  96. }
  97. }