BsStaticRenderableHandler.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. namespace BansheeEngine
  9. {
  10. /**
  11. * @brief Renderable handler that manages initializing, updating and
  12. * rendering of static renderable objects.
  13. */
  14. class BS_BSRND_EXPORT StaticRenderableHandler : public RenderableHandler
  15. {
  16. public:
  17. /**
  18. * @brief Contains lit tex renderable data unique for each object.
  19. */
  20. struct PerObjectData
  21. {
  22. GpuParamMat4Core wvpParam;
  23. GpuParamMat4Core wParam;
  24. GpuParamMat4Core iwParam;
  25. GpuParamMat4Core wNoScaleParam;
  26. GpuParamMat4Core iwNoScaleParam;
  27. GpuParamFloatCore worldDeterminantSignParam;
  28. Vector<RenderableElement::BufferBindInfo> perObjectBuffers;
  29. };
  30. StaticRenderableHandler();
  31. /**
  32. * @copydoc RenderableController::initializeRenderElem
  33. */
  34. void initializeRenderElem(RenderableElement& element) override;
  35. /**
  36. * @copydoc RenderableController::bindPerObjectBuffers
  37. */
  38. void bindPerObjectBuffers(const RenderableElement& element) override;
  39. /**
  40. * @brief Updates global per frame parameter buffers with new values.
  41. * To be called at the start of every frame.
  42. */
  43. void updatePerFrameBuffers(float time);
  44. /**
  45. * @brief Updates global per frame parameter buffers with new values.
  46. * To be called at the start of rendering for every camera.
  47. */
  48. void updatePerCameraBuffers(const Matrix4& vpMatrix, const Matrix4& vMatrix, const Matrix4& pMatrix, const Vector3& viewDir);
  49. /**
  50. * @brief Updates object specific parameter buffers with new values.
  51. * To be called whenever object specific values change.
  52. */
  53. void updatePerObjectBuffers(RenderableElement& element, const RenderableShaderData& data, const Matrix4& wvpMatrix);
  54. protected:
  55. /**
  56. * @brief Creates a new default shader used for lit textured renderables.
  57. * It is used for matching custom shaders and determining if they
  58. * comply with lit textured renderable requirements.
  59. */
  60. SPtr<ShaderCore> createDefaultShader();
  61. SPtr<ShaderCore> defaultShader;
  62. GpuParamBlockDesc staticParamBlockDesc;
  63. GpuParamBlockDesc perFrameParamBlockDesc;
  64. GpuParamBlockDesc perCameraParamBlockDesc;
  65. GpuParamBlockDesc perObjectParamBlockDesc;
  66. GpuParamDataDesc timeParamDesc;
  67. GpuParamDataDesc vpParamDesc;
  68. GpuParamDataDesc vParamDesc;
  69. GpuParamDataDesc pParamDesc;
  70. GpuParamDataDesc viewDirParamDesc;
  71. GpuParamDataDesc wvpParamDesc;
  72. GpuParamDataDesc wParamDesc;
  73. GpuParamDataDesc iwParamDesc;
  74. GpuParamDataDesc wNoScaleParamDesc;
  75. GpuParamDataDesc iwNoScaleParamDesc;
  76. GpuParamDataDesc worldDeterminantSignParamDesc;
  77. SPtr<GpuParamBlockBufferCore> perFrameParamBuffer;
  78. SPtr<GpuParamBlockBufferCore> perCameraParamBuffer;
  79. SPtr<GpuParamBlockBufferCore> perObjectParamBuffer;
  80. SPtr<GpuParamsCore> perFrameParams;
  81. SPtr<GpuParamsCore> perCameraParams;
  82. GpuParamVec3Core viewDirParam;
  83. GpuParamMat4Core viewProjMatParam;
  84. GpuParamMat4Core viewMatParam;
  85. GpuParamMat4Core projMatParam;
  86. GpuParamFloatCore timeParam;
  87. };
  88. }