2
0

BsLitTexRenderableController.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #pragma once
  2. #include "BsBansheeRendererPrerequisites.h"
  3. #include "BsRenderableController.h"
  4. #include "BsGpuParamDesc.h"
  5. #include "BsGpuParam.h"
  6. #include "BsRenderableElement.h"
  7. namespace BansheeEngine
  8. {
  9. /**
  10. * @brief Renderer handler that manages initializing, updating
  11. * and rendering of renderable objects with a single texture
  12. * and a single light.
  13. *
  14. * @note This class is DEBUG ONLY. Until a better renderer is complete.
  15. */
  16. class BS_BSRND_EXPORT LitTexRenderableController : public RenderableController
  17. {
  18. public:
  19. /**
  20. * @brief Contains lit tex renderable data unique for each object.
  21. */
  22. struct PerObjectData
  23. {
  24. SPtr<GpuParamBlockBufferCore> perObjectParamBuffer;
  25. GpuParamMat4Core wvpParam;
  26. Vector<RenderableElement::BufferBindInfo> perObjectBuffers;
  27. };
  28. LitTexRenderableController();
  29. /**
  30. * @copydoc RenderableHandler::initializeRenderElem
  31. */
  32. void initializeRenderElem(RenderableElement& element) override;
  33. /**
  34. * @copydoc RenderableHandler::bindPerObjectBuffers
  35. */
  36. void bindPerObjectBuffers(const RenderableElement& element) override;
  37. /**
  38. * @brief Updates global per frame parameter buffers with new values.
  39. * To be called at the start of every frame.
  40. */
  41. void updatePerFrameBuffers(float time);
  42. /**
  43. * @brief Updates global per frame parameter buffers with new values.
  44. * To be called at the start of rendering for every camera.
  45. */
  46. void updatePerCameraBuffers(const Vector3& viewDir);
  47. /**
  48. * @brief Updates object specific parameter buffers with new values.
  49. * To be called whenever object specific values change.
  50. */
  51. void updatePerObjectBuffers(RenderableElement& element, const Matrix4& wvpMatrix);
  52. protected:
  53. /**
  54. * @brief Creates a new default shader used for lit textured renderables.
  55. * It is used for matching custom shaders and determining if they
  56. * comply with lit textured renderable requirements.
  57. */
  58. SPtr<ShaderCore> createDefaultShader();
  59. SPtr<ShaderCore> defaultShader;
  60. GpuParamBlockDesc staticParamBlockDesc;
  61. GpuParamBlockDesc perFrameParamBlockDesc;
  62. GpuParamBlockDesc perCameraParamBlockDesc;
  63. GpuParamBlockDesc perObjectParamBlockDesc;
  64. GpuParamDataDesc timeParamDesc;
  65. GpuParamDataDesc lightDirParamDesc;
  66. GpuParamDataDesc wvpParamDesc;
  67. GpuParamDataDesc viewDirParamDesc;
  68. SPtr<GpuParamBlockBufferCore> staticParamBuffer;
  69. SPtr<GpuParamBlockBufferCore> perFrameParamBuffer;
  70. SPtr<GpuParamBlockBufferCore> perCameraParamBuffer;
  71. SPtr<GpuParamsCore> staticParams;
  72. SPtr<GpuParamsCore> perFrameParams;
  73. SPtr<GpuParamsCore> perCameraParams;
  74. GpuParamVec4Core lightDirParam;
  75. GpuParamVec3Core viewDirParam;
  76. GpuParamFloatCore timeParam;
  77. };
  78. }