BsStaticRenderableHandler.h 3.1 KB

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