CmTechnique.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "CmTechnique.h"
  2. #include "CmException.h"
  3. #include "CmRenderSystemManager.h"
  4. #include "CmRenderSystem.h"
  5. #include "CmRendererManager.h"
  6. #include "CmPass.h"
  7. #include "CmRenderer.h"
  8. #include "CmTechniqueRTTI.h"
  9. namespace CamelotEngine
  10. {
  11. Technique::Technique(const String& renderSystem, const String& renderer)
  12. :mRenderSystem(renderSystem), mRenderer(renderer)
  13. {
  14. }
  15. PassPtr Technique::addPass()
  16. {
  17. PassPtr newPass(new Pass());
  18. mPasses.push_back(newPass);
  19. return newPass;
  20. }
  21. void Technique::removePass(UINT32 idx)
  22. {
  23. if(idx < 0 || idx >= mPasses.size())
  24. CM_EXCEPT(InvalidParametersException, "Index out of range: " + toString(idx));
  25. int count = 0;
  26. auto iter = mPasses.begin();
  27. while(count != idx)
  28. {
  29. ++count;
  30. ++iter;
  31. }
  32. mPasses.erase(iter);
  33. }
  34. PassPtr Technique::getPass(UINT32 idx) const
  35. {
  36. if(idx < 0 || idx >= mPasses.size())
  37. CM_EXCEPT(InvalidParametersException, "Index out of range: " + toString(idx));
  38. return mPasses[idx];
  39. }
  40. bool Technique::isSupported() const
  41. {
  42. if(RenderSystemManager::getActive()->getName() == mRenderSystem &&
  43. RendererManager::getActive()->getName() == mRenderer)
  44. {
  45. return true;
  46. }
  47. return false;
  48. }
  49. RTTITypeBase* Technique::getRTTIStatic()
  50. {
  51. return TechniqueRTTI::instance();
  52. }
  53. RTTITypeBase* Technique::getRTTI() const
  54. {
  55. return Technique::getRTTIStatic();
  56. }
  57. }