BsBansheeRenderer.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #pragma once
  2. #include "BsBansheeRendererPrerequisites.h"
  3. #include "BsRenderer.h"
  4. #include "BsBounds.h"
  5. #include "BsRenderableElement.h"
  6. namespace BansheeEngine
  7. {
  8. /**
  9. * @brief Semantics that may be used for signaling the renderer
  10. * for what is a certain shader parameter used for.
  11. */
  12. enum BansheeRendererParamSemantic
  13. {
  14. RPS_Time = 1000,
  15. RPS_LightDir = 1001
  16. };
  17. /**
  18. * @brief Default renderer for Banshee. Performs frustum culling, sorting and
  19. * renders objects in custom ways determine by renderable handlers.
  20. *
  21. * @note Sim thread unless otherwise noted.
  22. */
  23. class BS_BSRND_EXPORT BansheeRenderer : public Renderer
  24. {
  25. /**
  26. * @brief Render data for a single render target.
  27. */
  28. struct RenderTargetData
  29. {
  30. SPtr<RenderTargetCore> target;
  31. Vector<const CameraHandlerCore*> cameras;
  32. };
  33. /**
  34. * @brief Data used by the renderer for a camera.
  35. */
  36. struct CameraData
  37. {
  38. RenderQueuePtr renderQueue;
  39. };
  40. /**
  41. * @brief Data used by the renderer when rendering renderable handlers.
  42. */
  43. struct RenderableData
  44. {
  45. RenderableHandlerCore* renderable;
  46. Vector<RenderableElement> elements;
  47. RenderableController* controller;
  48. };
  49. public:
  50. BansheeRenderer() { }
  51. ~BansheeRenderer() { }
  52. /**
  53. * @copydoc Renderer::getName
  54. */
  55. virtual const String& getName() const;
  56. /**
  57. * @copydoc Renderer::renderAll
  58. */
  59. virtual void renderAll();
  60. /**
  61. * @copydoc Renderer::_onActivated
  62. */
  63. virtual void _onActivated();
  64. /**
  65. * @copydoc Renderer::_onDeactivated
  66. */
  67. virtual void _onDeactivated();
  68. private:
  69. /**
  70. * @copydoc Renderer::_notifyCameraAdded
  71. */
  72. void _notifyCameraAdded(const CameraHandlerCore* camera);
  73. /**
  74. * @copydoc Renderer::_notifyCameraRemoved
  75. */
  76. void _notifyCameraRemoved(const CameraHandlerCore* camera);
  77. /**
  78. * @copydoc Renderer::_notifyRenderableAdded
  79. */
  80. void _notifyRenderableAdded(RenderableHandlerCore* renderable);
  81. /**
  82. * @copydoc Renderer::_notifyRenderableUpdated
  83. */
  84. void _notifyRenderableUpdated(RenderableHandlerCore* renderable);
  85. /**
  86. * @copydoc Renderer::_notifyRenderableRemoved
  87. */
  88. void _notifyRenderableRemoved(RenderableHandlerCore* renderable);
  89. /**
  90. * @brief Adds a new set of objects to the cameras render queue.
  91. *
  92. * @param proxy Proxy of the render queues camera to add the objects to.
  93. * @param renderQueue Objects to add to the cameras queue.
  94. *
  95. * @note Core thread only.
  96. */
  97. void addToRenderQueue(const SPtr<CameraHandlerCore>& proxy, RenderQueuePtr renderQueue);
  98. /**
  99. * @brief Performs rendering over all camera proxies.
  100. *
  101. * @param time Current frame time in milliseconds.
  102. *
  103. * @note Core thread only.
  104. */
  105. void renderAllCore(float time);
  106. /**
  107. * @brief Renders all objects visible by the provided camera.
  108. *
  109. * @param camera Camera used for determining destination render target and visibility.
  110. * @param renderQueue Optionally non-empty queue of manually added objects to render.
  111. *
  112. * @note Core thread only.
  113. */
  114. virtual void render(const CameraHandlerCore& camera, const RenderQueuePtr& renderQueue);
  115. /**
  116. * @brief Creates data used by the renderer on the core thread.
  117. */
  118. void initializeCore();
  119. /**
  120. * @brief Destroys data used by the renderer on the core thread.
  121. */
  122. void destroyCore();
  123. /**
  124. * @brief Creates a dummy shader to be used when no other is available.
  125. */
  126. SPtr<ShaderCore> createDefaultShader();
  127. Vector<RenderTargetData> mRenderTargets; // Core thread
  128. UnorderedMap<const CameraHandlerCore*, CameraData> mCameraData; // Core thread
  129. SPtr<MaterialCore> mDummyMaterial; // Core thread
  130. Vector<RenderableData> mRenderables; // Core thread
  131. Vector<Matrix4> mWorldTransforms; // Core thread
  132. Vector<Bounds> mWorldBounds; // Core thread
  133. LitTexRenderableController* mLitTexHandler;
  134. };
  135. }