CmBlendState.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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 BlendStatePtr& BlendState::getDefault()
  11. {
  12. static BlendStatePtr blendState = RenderStateManager::instance().createBlendState(BLEND_STATE_DESC());
  13. return blendState;
  14. }
  15. bool BlendState::getBlendEnabled(UINT32 renderTargetIdx) const
  16. {
  17. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  18. return mData.renderTargetDesc[renderTargetIdx].blendEnable;
  19. }
  20. SceneBlendFactor BlendState::getSrcBlend(UINT32 renderTargetIdx) const
  21. {
  22. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  23. return mData.renderTargetDesc[renderTargetIdx].srcBlend;
  24. }
  25. SceneBlendFactor BlendState::getDstBlend(UINT32 renderTargetIdx) const
  26. {
  27. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  28. return mData.renderTargetDesc[renderTargetIdx].dstBlend;
  29. }
  30. SceneBlendOperation BlendState::getBlendOperation(UINT32 renderTargetIdx) const
  31. {
  32. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  33. return mData.renderTargetDesc[renderTargetIdx].blendOp;
  34. }
  35. SceneBlendFactor BlendState::getAlphaSrcBlend(UINT32 renderTargetIdx) const
  36. {
  37. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  38. return mData.renderTargetDesc[renderTargetIdx].srcBlendAlpha;
  39. }
  40. SceneBlendFactor BlendState::getAlphaDstBlend(UINT32 renderTargetIdx) const
  41. {
  42. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  43. return mData.renderTargetDesc[renderTargetIdx].dstBlendAlpha;
  44. }
  45. SceneBlendOperation BlendState::getAlphaBlendOperation(UINT32 renderTargetIdx) const
  46. {
  47. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  48. return mData.renderTargetDesc[renderTargetIdx].blendOpAlpha;
  49. }
  50. UINT8 BlendState::getRenderTargetWriteMask(UINT32 renderTargetIdx) const
  51. {
  52. assert(renderTargetIdx >= 0 && renderTargetIdx < CM_MAX_MULTIPLE_RENDER_TARGETS);
  53. return mData.renderTargetDesc[renderTargetIdx].renderTargetWriteMask;
  54. }
  55. BlendStatePtr BlendState::create(const BLEND_STATE_DESC& desc)
  56. {
  57. return RenderStateManager::instance().createBlendState(desc);
  58. }
  59. /************************************************************************/
  60. /* RTTI */
  61. /************************************************************************/
  62. RTTITypeBase* BlendState::getRTTIStatic()
  63. {
  64. return BlendStateRTTI::instance();
  65. }
  66. RTTITypeBase* BlendState::getRTTI() const
  67. {
  68. return BlendState::getRTTIStatic();
  69. }
  70. }