BsBansheeRenderer.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #pragma once
  2. #include "BsBansheeRendererPrerequisites.h"
  3. #include "BsRenderer.h"
  4. #include "BsMaterialProxy.h"
  5. #include "BsBounds.h"
  6. namespace BansheeEngine
  7. {
  8. enum BansheeRendererParamSemantic
  9. {
  10. RPS_Time = 1000,
  11. RPS_LightDir = 1001
  12. };
  13. /**
  14. * @brief Default renderer for Banshee. Performs frustum culling, sorting and renders
  15. * objects plainly according to their shaders with no fancy effects.
  16. *
  17. */
  18. // TODO UNDOCUMENTED
  19. class BS_BSRND_EXPORT BansheeRenderer : public Renderer
  20. {
  21. struct RenderTargetData
  22. {
  23. RenderTargetPtr target;
  24. Vector<CameraProxyPtr> cameras;
  25. };
  26. public:
  27. BansheeRenderer();
  28. ~BansheeRenderer();
  29. /**
  30. * @copydoc Renderer::getName
  31. */
  32. virtual const String& getName() const;
  33. /**
  34. * @copydoc Renderer::renderAll
  35. */
  36. virtual void renderAll();
  37. /**
  38. * @copydoc Renderer::_onActivated
  39. */
  40. virtual void _onActivated();
  41. /**
  42. * @copydoc Renderer::_onDeactivated
  43. */
  44. virtual void _onDeactivated();
  45. private:
  46. void addRenderableProxy(RenderableProxyPtr proxy);
  47. void removeRenderableProxy(RenderableProxyPtr proxy);
  48. void updateRenderableProxy(RenderableProxyPtr proxy, Matrix4 localToWorld);
  49. void addCameraProxy(CameraProxyPtr proxy);
  50. void removeCameraProxy(CameraProxyPtr proxy);
  51. void updateCameraProxy(CameraProxyPtr proxy, Matrix4 viewMatrix);
  52. void addToRenderQueue(CameraProxyPtr proxy, RenderQueuePtr renderQueue);
  53. void updateMaterialProxy(MaterialProxyPtr proxy, Vector<MaterialProxy::ParamsBindInfo> dirtyParams);
  54. void renderAllCore(float time);
  55. /**
  56. * @brief Renders all objects visible by the provided camera.
  57. */
  58. virtual void render(const CameraProxy& cameraProxy, const RenderQueuePtr& renderQueue);
  59. void setPass(const MaterialProxyPtr& material, UINT32 passIdx);
  60. void draw(const MeshProxy& mesh);
  61. void renderableRemoved(const HRenderable& renderable);
  62. void cameraRemoved(const HCamera& camera);
  63. Vector<RenderableProxyPtr> mDeletedRenderableProxies;
  64. Vector<CameraProxyPtr> mDeletedCameraProxies;
  65. UnorderedMap<UINT64, CameraProxyPtr> mCameraProxies;
  66. Vector<RenderTargetData> mRenderTargets;
  67. Vector<RenderableElement*> mRenderableElements;
  68. Vector<Matrix4> mWorldTransforms;
  69. Vector<Bounds> mWorldBounds;
  70. LitTexRenderableHandler* mLitTexHandler;
  71. HEvent mRenderableRemovedConn;
  72. HEvent mCameraRemovedConn;
  73. };
  74. }