CmBlendState.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "CmBlendState.h"
  2. #include "CmRenderStateManager.h"
  3. #include "CmBlendStateRTTI.h"
  4. namespace CamelotEngine
  5. {
  6. void BlendState::initialize(const BLEND_STATE_DESC& desc)
  7. {
  8. mData = desc;
  9. }
  10. const BlendState& BlendState::getDefault()
  11. {
  12. static BlendState blendState;
  13. static bool initialized = false;
  14. if(!initialized)
  15. {
  16. blendState.initialize(BLEND_STATE_DESC());
  17. initialized = true;
  18. }
  19. return blendState;
  20. }
  21. bool BlendState::getBlendEnabled(UINT32 renderTargetIdx) const
  22. {
  23. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  24. return mData.renderTargetDesc[renderTargetIdx].blendEnable;
  25. }
  26. SceneBlendFactor BlendState::getSrcBlend(UINT32 renderTargetIdx) const
  27. {
  28. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  29. return mData.renderTargetDesc[renderTargetIdx].srcBlend;
  30. }
  31. SceneBlendFactor BlendState::getDstBlend(UINT32 renderTargetIdx) const
  32. {
  33. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  34. return mData.renderTargetDesc[renderTargetIdx].dstBlend;
  35. }
  36. SceneBlendOperation BlendState::getBlendOperation(UINT32 renderTargetIdx) const
  37. {
  38. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  39. return mData.renderTargetDesc[renderTargetIdx].blendOp;
  40. }
  41. SceneBlendFactor BlendState::getAlphaSrcBlend(UINT32 renderTargetIdx) const
  42. {
  43. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  44. return mData.renderTargetDesc[renderTargetIdx].srcBlendAlpha;
  45. }
  46. SceneBlendFactor BlendState::getAlphaDstBlend(UINT32 renderTargetIdx) const
  47. {
  48. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  49. return mData.renderTargetDesc[renderTargetIdx].dstBlendAlpha;
  50. }
  51. SceneBlendOperation BlendState::getAlphaBlendOperation(UINT32 renderTargetIdx) const
  52. {
  53. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  54. return mData.renderTargetDesc[renderTargetIdx].blendOpAlpha;
  55. }
  56. UINT8 BlendState::getRenderTargetWriteMask(UINT32 renderTargetIdx) const
  57. {
  58. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  59. return mData.renderTargetDesc[renderTargetIdx].renderTargetWriteMask;
  60. }
  61. BlendStatePtr BlendState::create(const BLEND_STATE_DESC& desc)
  62. {
  63. return RenderStateManager::instance().createBlendState(desc);
  64. }
  65. /************************************************************************/
  66. /* RTTI */
  67. /************************************************************************/
  68. RTTITypeBase* BlendState::getRTTIStatic()
  69. {
  70. return BlendStateRTTI::instance();
  71. }
  72. RTTITypeBase* BlendState::getRTTI() const
  73. {
  74. return BlendState::getRTTIStatic();
  75. }
  76. }