BsRendererManager.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #pragma once
  2. #include "BsCorePrerequisites.h"
  3. #include "BsRendererFactory.h"
  4. #include "BsModule.h"
  5. namespace BansheeEngine
  6. {
  7. /**
  8. * @brief Allows you to change and retrieve the active renderer. Active renderer will
  9. * be used for rendering all objects in the following frame.
  10. *
  11. * @note No renderer is active by default. You must make a renderer active before doing any rendering.
  12. */
  13. class BS_CORE_EXPORT RendererManager : public Module<RendererManager>
  14. {
  15. public:
  16. ~RendererManager();
  17. /**
  18. * @brief Attempts to find a renderer with the specified name and makes it active.
  19. * Exception is thrown if renderer with the specified name doesn't exist.
  20. */
  21. void setActive(const String& name);
  22. /**
  23. * @brief Returns the currently active renderer. Null if no renderer is active.
  24. */
  25. RendererPtr getActive() { return mActiveRenderer; }
  26. /**
  27. * @brief Core renderer represents a set of shared features within all renderers.
  28. * Techniques using this renderer name will report as if they are supported regardless
  29. * of the active renderer.
  30. *
  31. * @note Useful when you want to make a technique working on all renderers. (Normally techniques
  32. * need to be different as far as render system is concerned but can often be same from
  33. * renderers perspective).
  34. *
  35. * @see Technique
  36. */
  37. static const String& getCoreRendererName();
  38. /**
  39. * @brief Registers a new renderer factory. Any renderer you try to make active with
  40. * "setActive" you will need to have previously registered here.
  41. *
  42. * @note Internal method.
  43. */
  44. void _registerFactory(RendererFactoryPtr factory);
  45. private:
  46. Vector<RendererFactoryPtr> mAvailableFactories;
  47. RendererPtr mActiveRenderer;
  48. };
  49. }