BsTechnique.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. //__________________________ Banshee Project - A modern game development toolkit _________________________________//
  2. //_____________________________________ www.banshee-project.com __________________________________________________//
  3. //________________________ Copyright (c) 2014 Marko Pintera. All rights reserved. ________________________________//
  4. #include "BsTechnique.h"
  5. #include "BsException.h"
  6. #include "BsRenderSystem.h"
  7. #include "BsRendererManager.h"
  8. #include "BsPass.h"
  9. #include "BsRenderer.h"
  10. #include "BsTechniqueRTTI.h"
  11. namespace BansheeEngine
  12. {
  13. Technique::Technique(const String& renderSystem, const String& renderer)
  14. :mRenderSystem(renderSystem), mRenderer(renderer)
  15. {
  16. }
  17. PassPtr Technique::addPass()
  18. {
  19. PassPtr newPass = bs_shared_ptr<Pass, PoolAlloc>();
  20. mPasses.push_back(newPass);
  21. return newPass;
  22. }
  23. void Technique::removePass(UINT32 idx)
  24. {
  25. if(idx < 0 || idx >= mPasses.size())
  26. BS_EXCEPT(InvalidParametersException, "Index out of range: " + toString(idx));
  27. int count = 0;
  28. auto iter = mPasses.begin();
  29. while(count != idx)
  30. {
  31. ++count;
  32. ++iter;
  33. }
  34. mPasses.erase(iter);
  35. }
  36. PassPtr Technique::getPass(UINT32 idx) const
  37. {
  38. if(idx < 0 || idx >= mPasses.size())
  39. BS_EXCEPT(InvalidParametersException, "Index out of range: " + toString(idx));
  40. return mPasses[idx];
  41. }
  42. bool Technique::isSupported() const
  43. {
  44. if(RenderSystem::instancePtr()->getName() == mRenderSystem &&
  45. (RendererManager::instance().getActive()->getName() == mRenderer ||
  46. RendererManager::getCoreRendererName() == mRenderer))
  47. {
  48. return true;
  49. }
  50. return false;
  51. }
  52. RTTITypeBase* Technique::getRTTIStatic()
  53. {
  54. return TechniqueRTTI::instance();
  55. }
  56. RTTITypeBase* Technique::getRTTI() const
  57. {
  58. return Technique::getRTTIStatic();
  59. }
  60. }