BsLightRendering.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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 "BsRendererMaterial.h"
  6. #include "BsParamBlocks.h"
  7. namespace BansheeEngine
  8. {
  9. /** @addtogroup RenderBeast
  10. * @{
  11. */
  12. BS_PARAM_BLOCK_BEGIN(PerLightParamBuffer)
  13. BS_PARAM_BLOCK_ENTRY(Vector4, gLightPositionAndType)
  14. BS_PARAM_BLOCK_ENTRY(Vector4, gLightColorAndIntensity)
  15. BS_PARAM_BLOCK_ENTRY(Vector4, gLightSpotAnglesAndSqrdInvRadius)
  16. BS_PARAM_BLOCK_ENTRY(Vector3, gLightDirection)
  17. BS_PARAM_BLOCK_ENTRY(Vector4, gLightGeometry)
  18. BS_PARAM_BLOCK_ENTRY(Matrix4, gMatConeTransform)
  19. BS_PARAM_BLOCK_END
  20. /** Manipulates parameters used in various light rendering shaders. */
  21. class LightRenderingParams
  22. {
  23. public:
  24. LightRenderingParams(const SPtr<MaterialCore>& lightMaterial);
  25. /** Updates parameters that are common for all lights. */
  26. void setStaticParameters(const SPtr<RenderTargets>& gbuffer,
  27. const SPtr<GpuParamBlockBufferCore>& perCamera);
  28. /** Updates data in the parameter buffer from the data in the provided light. */
  29. void setParameters(const LightCore* light);
  30. /** Returns the internal parameter buffer that can be bound to the pipeline. */
  31. const SPtr<GpuParamBlockBufferCore>& getBuffer() const;
  32. private:
  33. SPtr<MaterialCore> mMaterial;
  34. MaterialParamTextureCore mGBufferA;
  35. MaterialParamTextureCore mGBufferB;
  36. MaterialParamTextureCore mGBufferDepth;
  37. PerLightParamBuffer mBuffer;
  38. };
  39. /** Shader that renders directional light sources during deferred rendering light pass. */
  40. class DirectionalLightMat : public RendererMaterial<DirectionalLightMat>
  41. {
  42. RMAT_DEF("DeferredDirectionalLightPass.bsl");
  43. public:
  44. DirectionalLightMat();
  45. /** Binds the material for rendering and sets up any global parameters. */
  46. void bind(const SPtr<RenderTargets>& gbuffer, const SPtr<GpuParamBlockBufferCore>& perCamera);
  47. /** Updates the per-light buffers used by the material. */
  48. void setPerLightParams(const LightCore* light);
  49. private:
  50. LightRenderingParams mParams;
  51. };
  52. /**
  53. * Shader that renders point (radial & spot) light sources during deferred rendering light pass. Used when the camera
  54. * is inside the point light geometry.
  55. */
  56. class PointLightInMat : public RendererMaterial<PointLightInMat>
  57. {
  58. RMAT_DEF("DeferredPointLightPassIn.bsl");
  59. public:
  60. PointLightInMat();
  61. /** Binds the material for rendering and sets up any global parameters. */
  62. void bind(const SPtr<RenderTargets>& gbuffer, const SPtr<GpuParamBlockBufferCore>& perCamera);
  63. /** Updates the per-light buffers used by the material. */
  64. void setPerLightParams(const LightCore* light);
  65. private:
  66. LightRenderingParams mParams;
  67. };
  68. /**
  69. * Shader that renders point (radial & spot) light sources during deferred rendering light pass. Used when the camera
  70. * is outside the point light geometry.
  71. */
  72. class PointLightOutMat : public RendererMaterial<PointLightOutMat>
  73. {
  74. RMAT_DEF("DeferredPointLightPassOut.bsl");
  75. public:
  76. PointLightOutMat();
  77. /** Binds the material for rendering and sets up any global parameters. */
  78. void bind(const SPtr<RenderTargets>& gbuffer, const SPtr<GpuParamBlockBufferCore>& perCamera);
  79. /** Updates the per-light buffers used by the material. */
  80. void setPerLightParams(const LightCore* light);
  81. private:
  82. LightRenderingParams mParams;
  83. };
  84. /** @} */
  85. }