BsBansheeRenderer.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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, RenderableProxyPtr> mRenderableProxies;
  66. UnorderedMap<UINT64, CameraProxyPtr> mCameraProxies;
  67. Vector<RenderTargetData> mRenderTargets;
  68. Vector<RenderableElement*> mRenderableElements;
  69. Vector<Matrix4> mWorldTransforms;
  70. Vector<Bounds> mWorldBounds;
  71. LitTexRenderableHandler* mLitTexHandler;
  72. HEvent mRenderableRemovedConn;
  73. HEvent mCameraRemovedConn;
  74. };
  75. }