BsStaticRenderableHandler.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #pragma once
  2. #include "BsRenderBeastPrerequisites.h"
  3. #include "BsRenderableHandler.h"
  4. #include "BsGpuParamDesc.h"
  5. #include "BsGpuParam.h"
  6. #include "BsRenderableElement.h"
  7. #include "BsRenderBeast.h"
  8. #include "BsParamBlocks.h"
  9. namespace BansheeEngine
  10. {
  11. BS_PARAM_BLOCK_BEGIN(PerFrameParamBuffer)
  12. BS_PARAM_BLOCK_ENTRY(float, gTime)
  13. BS_PARAM_BLOCK_END
  14. BS_PARAM_BLOCK_BEGIN(PerCameraParamBuffer)
  15. BS_PARAM_BLOCK_ENTRY(Vector3, gViewDir)
  16. BS_PARAM_BLOCK_ENTRY(Vector3, gViewOrigin)
  17. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatViewProj)
  18. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatView)
  19. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatProj)
  20. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatInvProj)
  21. BS_PARAM_BLOCK_ENTRY(Vector2, gDeviceZToWorldZ)
  22. BS_PARAM_BLOCK_ENTRY(Vector4, gClipToUVScaleOffset)
  23. BS_PARAM_BLOCK_END
  24. BS_PARAM_BLOCK_BEGIN(PerObjectParamBuffer)
  25. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatWorldViewProj)
  26. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatWorld)
  27. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatInvWorld)
  28. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatWorldNoScale)
  29. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatInvWorldNoScale)
  30. BS_PARAM_BLOCK_ENTRY(float, gWorldDeterminantSign)
  31. BS_PARAM_BLOCK_END
  32. /**
  33. * @brief Renderable handler that manages initializing, updating and
  34. * rendering of static renderable objects.
  35. */
  36. class BS_BSRND_EXPORT StaticRenderableHandler : public RenderableHandler
  37. {
  38. public:
  39. /**
  40. * @brief Contains lit tex renderable data unique for each object.
  41. */
  42. struct PerObjectData
  43. {
  44. Vector<RenderableElement::BufferBindInfo> perObjectBuffers;
  45. };
  46. StaticRenderableHandler();
  47. /**
  48. * @copydoc RenderableController::initializeRenderElem
  49. */
  50. void initializeRenderElem(RenderableElement& element) override;
  51. /**
  52. * @copydoc RenderableController::bindPerObjectBuffers
  53. */
  54. void bindPerObjectBuffers(const RenderableElement& element) override;
  55. /**
  56. * @brief Updates global per frame parameter buffers with new values.
  57. * To be called at the start of every frame.
  58. */
  59. void updatePerFrameBuffers(float time);
  60. /**
  61. * @brief Updates global per frame parameter buffers with new values.
  62. * To be called at the start of rendering for every camera.
  63. */
  64. void updatePerCameraBuffers(const CameraShaderData& cameraData);
  65. /**
  66. * @brief Updates object specific parameter buffers with new values.
  67. * To be called whenever object specific values change.
  68. */
  69. void updatePerObjectBuffers(RenderableElement& element, const RenderableShaderData& data, const Matrix4& wvpMatrix);
  70. protected:
  71. PerFrameParamBuffer mPerFrameParams;
  72. PerCameraParamBuffer mPerCameraParams;
  73. PerObjectParamBuffer mPerObjectParams;
  74. };
  75. }