BsObjectRendering.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 "BsGpuParamDesc.h"
  6. #include "BsGpuParam.h"
  7. #include "BsRenderableElement.h"
  8. #include "BsRendererMaterial.h"
  9. #include "BsParamBlocks.h"
  10. #include "BsRendererObject.h"
  11. namespace bs
  12. {
  13. struct RendererAnimationData;
  14. /** @addtogroup RenderBeast
  15. * @{
  16. */
  17. BS_PARAM_BLOCK_BEGIN(PerFrameParamBuffer)
  18. BS_PARAM_BLOCK_ENTRY(float, gTime)
  19. BS_PARAM_BLOCK_END
  20. BS_PARAM_BLOCK_BEGIN(PerObjectParamBuffer)
  21. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatWorldViewProj)
  22. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatWorld)
  23. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatInvWorld)
  24. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatWorldNoScale)
  25. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatInvWorldNoScale)
  26. BS_PARAM_BLOCK_ENTRY(float, gWorldDeterminantSign)
  27. BS_PARAM_BLOCK_END
  28. /** Data bound to the shader when rendering a specific renderable object. */
  29. struct RenderableShaderData
  30. {
  31. Matrix4 worldTransform;
  32. Matrix4 invWorldTransform;
  33. Matrix4 worldNoScaleTransform;
  34. Matrix4 invWorldNoScaleTransform;
  35. float worldDeterminantSign;
  36. };
  37. /** Manages initialization and rendering of individual renderable object, represented as RenderableElement%s. */
  38. class BS_BSRND_EXPORT ObjectRenderer
  39. {
  40. public:
  41. ObjectRenderer();
  42. /** Initializes the specified renderable element, making it ready to be used. */
  43. void initElement(BeastRenderableElement& element);
  44. /** Updates global per frame parameter buffers with new values. To be called at the start of every frame. */
  45. void setParamFrameParams(float time);
  46. /**
  47. * Updates object specific parameter buffers with new values. To be called whenever object specific values change.
  48. */
  49. void setPerObjectParams(const BeastRenderableElement& element, const RenderableShaderData& data,
  50. const Matrix4& wvpMatrix, const SPtr<GpuBufferCore>& boneMatrices = nullptr);
  51. protected:
  52. PerFrameParamBuffer mPerFrameParams;
  53. PerObjectParamBuffer mPerObjectParams;
  54. };
  55. /** Basic shader that is used when no other is available. */
  56. class DefaultMaterial : public RendererMaterial<DefaultMaterial> { RMAT_DEF("Default.bsl"); };
  57. /** @} */
  58. }