BsRenderer.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #pragma once
  2. #include "BsCorePrerequisites.h"
  3. #include "BsGameObject.h"
  4. #include "BsEvent.h"
  5. namespace BansheeEngine
  6. {
  7. /**
  8. * @brief Available parameter block semantics that allow the renderer to identify
  9. * the use of a GPU program parameter block specified in a shader.
  10. */
  11. enum RendererBlockSemantic
  12. {
  13. // 0 - Reserved
  14. RBS_Static = 1,
  15. RBS_PerCamera = 2,
  16. RBS_PerFrame = 3,
  17. RBS_PerObject = 4
  18. };
  19. /**
  20. * @brief Available parameter semantics that allow the renderer to identify
  21. * the use of a GPU parameter specified in a shader.
  22. */
  23. enum RendererParamSemantic
  24. {
  25. // 0 - Reserved
  26. RPS_WorldViewProjTfrm = 1,
  27. RPS_ViewProjTfrm = 2,
  28. RPS_WorldTfrm = 3
  29. };
  30. /**
  31. * @brief Primarily rendering class that allows you to specify how to render objects that exist
  32. * in the scene graph. You need to provide your own implementation of your class.
  33. *
  34. * @note Normally you would iterate over all cameras, find visible objects for each camera and render
  35. * those objects in some way.
  36. */
  37. class BS_CORE_EXPORT Renderer
  38. {
  39. public:
  40. /**
  41. * @brief Called after the renderer has been activated.
  42. *
  43. * @note Internal method.
  44. */
  45. virtual void _onActivated() { }
  46. /**
  47. * @brief Called just before the renderer is deactivated.
  48. *
  49. * @note Internal method.
  50. */
  51. virtual void _onDeactivated() { }
  52. /**
  53. * @brief Name of the renderer. Used by materials to find
  54. * an appropriate technique for this renderer.
  55. */
  56. virtual const String& getName() const = 0;
  57. /**
  58. * @brief Called in order to render all currently active cameras.
  59. */
  60. virtual void renderAll() = 0;
  61. /**
  62. * @brief Allows you to register a callback for the specified viewport. The callback
  63. * will be called before rendering and you will be able to populate the
  64. * render queue with render commands that will be executed when rendering.
  65. */
  66. void addRenderCallback(const Viewport* viewport, std::function<void(const Viewport*, DrawList&)> callback);
  67. protected:
  68. UnorderedMap<const Viewport*, Vector<std::function<void(const Viewport*, DrawList&)>>> mRenderCallbacks;
  69. };
  70. }