BsBansheeRenderer.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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. * Semantics that may be used for signaling the renderer
  10. * for what is a certain shader parameter used for.
  11. */
  12. static StringID RPS_Time = "Time";
  13. static StringID RPS_LightDir = "LightDir";
  14. /**
  15. * @brief Default renderer for Banshee. Performs frustum culling, sorting and
  16. * renders objects in custom ways determine by renderable handlers.
  17. *
  18. * @note Sim thread unless otherwise noted.
  19. */
  20. class BS_BSRND_EXPORT BansheeRenderer : public Renderer
  21. {
  22. /**
  23. * @brief Render data for a single render target.
  24. */
  25. struct RenderTargetData
  26. {
  27. SPtr<RenderTargetCore> target;
  28. Vector<const CameraHandlerCore*> cameras;
  29. };
  30. /**
  31. * @brief Data used by the renderer for a camera.
  32. */
  33. struct CameraData
  34. {
  35. RenderQueuePtr renderQueue;
  36. };
  37. /**
  38. * @brief Data used by the renderer when rendering renderable handlers.
  39. */
  40. struct RenderableData
  41. {
  42. RenderableHandlerCore* renderable;
  43. Vector<RenderableElement> elements;
  44. RenderableController* controller;
  45. };
  46. public:
  47. BansheeRenderer();
  48. ~BansheeRenderer() { }
  49. /**
  50. * @copydoc Renderer::getName
  51. */
  52. virtual const StringID& getName() const override;
  53. /**
  54. * @copydoc Renderer::renderAll
  55. */
  56. virtual void renderAll() override;
  57. /**
  58. * @brief Sets options used for controlling the rendering.
  59. */
  60. void setOptions(const SPtr<CoreRendererOptions>& options) override;
  61. /**
  62. * @brief Returns current set of options used for controlling the rendering.
  63. */
  64. SPtr<CoreRendererOptions> getOptions() const override;
  65. /**
  66. * @copydoc Renderer::_onActivated
  67. */
  68. virtual void _onActivated() override;
  69. /**
  70. * @copydoc Renderer::_onDeactivated
  71. */
  72. virtual void _onDeactivated() override;
  73. private:
  74. /**
  75. * @copydoc Renderer::_notifyCameraAdded
  76. */
  77. void _notifyCameraAdded(const CameraHandlerCore* camera) override;
  78. /**
  79. * @copydoc Renderer::_notifyCameraRemoved
  80. */
  81. void _notifyCameraRemoved(const CameraHandlerCore* camera) override;
  82. /**
  83. * @copydoc Renderer::_notifyLightAdded
  84. */
  85. void _notifyLightAdded(const LightInternalCore* light) override;
  86. /**
  87. * @copydoc Renderer::_notifyLightRemoved
  88. */
  89. void _notifyLightRemoved(const LightInternalCore* light) override;
  90. /**
  91. * @copydoc Renderer::_notifyRenderableAdded
  92. */
  93. void _notifyRenderableAdded(RenderableHandlerCore* renderable) override;
  94. /**
  95. * @copydoc Renderer::_notifyRenderableUpdated
  96. */
  97. void _notifyRenderableUpdated(RenderableHandlerCore* renderable) override;
  98. /**
  99. * @copydoc Renderer::_notifyRenderableRemoved
  100. */
  101. void _notifyRenderableRemoved(RenderableHandlerCore* renderable) override;
  102. /**
  103. * @brief Adds a new set of objects to the cameras render queue.
  104. *
  105. * @param proxy Proxy of the render queues camera to add the objects to.
  106. * @param renderQueue Objects to add to the cameras queue.
  107. *
  108. * @note Core thread only.
  109. */
  110. void addToRenderQueue(const SPtr<CameraHandlerCore>& proxy, RenderQueuePtr renderQueue);
  111. /**
  112. * @brief Updates the render options on the core thread.
  113. *
  114. * @note Core thread only.
  115. */
  116. void syncRenderOptions(const RenderBeastOptions& options);
  117. /**
  118. * @brief Performs rendering over all camera proxies.
  119. *
  120. * @param time Current frame time in milliseconds.
  121. *
  122. * @note Core thread only.
  123. */
  124. void renderAllCore(float time);
  125. /**
  126. * @brief Renders all objects visible by the provided camera.
  127. *
  128. * @param camera Camera used for determining destination render target and visibility.
  129. * @param renderQueue Optionally non-empty queue of manually added objects to render.
  130. *
  131. * @note Core thread only.
  132. */
  133. virtual void render(const CameraHandlerCore& camera, RenderQueuePtr& renderQueue);
  134. /**
  135. * @brief Creates data used by the renderer on the core thread.
  136. */
  137. void initializeCore();
  138. /**
  139. * @brief Destroys data used by the renderer on the core thread.
  140. */
  141. void destroyCore();
  142. /**
  143. * @brief Creates a dummy shader to be used when no other is available.
  144. */
  145. SPtr<ShaderCore> createDefaultShader();
  146. /**
  147. * @brief Activates the specified pass on the pipeline.
  148. *
  149. * @param material Parent material of the pass.
  150. * @param passIdx Index of the pass in the parent material.
  151. * @param samplerOverrides Optional samplers to use instead of the those in the material.
  152. * Number of samplers must match the number in the material.
  153. *
  154. * @note Core thread.
  155. */
  156. static void setPass(const SPtr<MaterialCore>& material, UINT32 passIdx, SPtr<SamplerStateCore>* samplerOverrides);
  157. Vector<RenderTargetData> mRenderTargets; // Core thread
  158. UnorderedMap<const CameraHandlerCore*, CameraData> mCameraData; // Core thread
  159. SPtr<MaterialCore> mDummyMaterial; // Core thread
  160. Vector<RenderableData> mRenderables; // Core thread
  161. Vector<Matrix4> mWorldTransforms; // Core thread
  162. Vector<Bounds> mWorldBounds; // Core thread
  163. SPtr<RenderBeastOptions> mCoreOptions; // Core thread
  164. LitTexRenderableController* mLitTexHandler;
  165. SPtr<RenderBeastOptions> mOptions;
  166. bool mOptionsDirty;
  167. };
  168. }