CmTechnique.cpp 1.1 KB

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