BsLitTexRenderableController.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #pragma once
  2. #include "BsRenderBeastPrerequisites.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. GpuParamMat4Core wvpParam;
  25. Vector<RenderableElement::BufferBindInfo> perObjectBuffers;
  26. };
  27. LitTexRenderableController();
  28. /**
  29. * @copydoc RenderableHandler::initializeRenderElem
  30. */
  31. void initializeRenderElem(RenderableElement& element) override;
  32. /**
  33. * @copydoc RenderableHandler::bindPerObjectBuffers
  34. */
  35. void bindPerObjectBuffers(const RenderableElement& element) override;
  36. /**
  37. * @brief Updates global per frame parameter buffers with new values.
  38. * To be called at the start of every frame.
  39. */
  40. void updatePerFrameBuffers(float time);
  41. /**
  42. * @brief Updates global per frame parameter buffers with new values.
  43. * To be called at the start of rendering for every camera.
  44. */
  45. void updatePerCameraBuffers(const Vector3& viewDir);
  46. /**
  47. * @brief Updates object specific parameter buffers with new values.
  48. * To be called whenever object specific values change.
  49. */
  50. void updatePerObjectBuffers(RenderableElement& element, const Matrix4& wvpMatrix);
  51. protected:
  52. /**
  53. * @brief Creates a new default shader used for lit textured renderables.
  54. * It is used for matching custom shaders and determining if they
  55. * comply with lit textured renderable requirements.
  56. */
  57. SPtr<ShaderCore> createDefaultShader();
  58. SPtr<ShaderCore> defaultShader;
  59. GpuParamBlockDesc staticParamBlockDesc;
  60. GpuParamBlockDesc perFrameParamBlockDesc;
  61. GpuParamBlockDesc perCameraParamBlockDesc;
  62. GpuParamBlockDesc perObjectParamBlockDesc;
  63. GpuParamDataDesc timeParamDesc;
  64. GpuParamDataDesc lightDirParamDesc;
  65. GpuParamDataDesc wvpParamDesc;
  66. GpuParamDataDesc viewDirParamDesc;
  67. SPtr<GpuParamBlockBufferCore> staticParamBuffer;
  68. SPtr<GpuParamBlockBufferCore> perFrameParamBuffer;
  69. SPtr<GpuParamBlockBufferCore> perCameraParamBuffer;
  70. SPtr<GpuParamBlockBufferCore> perObjectParamBuffer;
  71. SPtr<GpuParamsCore> staticParams;
  72. SPtr<GpuParamsCore> perFrameParams;
  73. SPtr<GpuParamsCore> perCameraParams;
  74. GpuParamVec4Core lightDirParam;
  75. GpuParamVec3Core viewDirParam;
  76. GpuParamFloatCore timeParam;
  77. };
  78. }