BsRendererManager.h 2.1 KB

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