BsLightRendering.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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 bs { namespace ct
  8. {
  9. /** @addtogroup RenderBeast
  10. * @{
  11. */
  12. /** Information about a single light, as seen by the lighting shader. */
  13. struct LightData
  14. {
  15. Vector3 position;
  16. float radius;
  17. Vector3 direction;
  18. float intensity;
  19. Vector3 spotAngles;
  20. float radiusSqrdInv;
  21. Vector3 color;
  22. };
  23. /** Renderer information specific to a single light. */
  24. class RendererLight
  25. {
  26. public:
  27. RendererLight(Light* light);
  28. /** Populates the structure with light parameters. */
  29. void getParameters(LightData& output) const;
  30. /** Gets the internal light representation. */
  31. Light* getInternal() const { return mInternal; }
  32. private:
  33. Light* mInternal;
  34. };
  35. BS_PARAM_BLOCK_BEGIN(TiledLightingParamDef)
  36. BS_PARAM_BLOCK_ENTRY(Vector3I, gNumLightsPerType)
  37. BS_PARAM_BLOCK_END
  38. extern TiledLightingParamDef gTiledLightingParamDef;
  39. /** Shader that performs a lighting pass over data stored in the Gbuffer. */
  40. class TiledDeferredLightingMat : public RendererMaterial<TiledDeferredLightingMat>
  41. {
  42. RMAT_DEF("TiledDeferredLighting.bsl");
  43. public:
  44. TiledDeferredLightingMat();
  45. /** Binds the material for rendering, sets up parameters and executes it. */
  46. void execute(const SPtr<RenderTargets>& gbuffer, const SPtr<GpuParamBlockBuffer>& perCamera);
  47. /** Binds all the active lights. */
  48. void setLights(const Vector<LightData> (&lightData)[3]);
  49. private:
  50. GpuParamTexture mGBufferA;
  51. GpuParamTexture mGBufferB;
  52. GpuParamTexture mGBufferDepth;
  53. GpuParamBuffer mDirLightBufferParam;
  54. GpuParamBuffer mPointLightBufferParam;
  55. GpuParamBuffer mSpotLightBufferParam;
  56. GpuParamLoadStoreTexture mOutputParam;
  57. SPtr<GpuParamBlockBuffer> mParamBuffer;
  58. SPtr<GpuBuffer> mLightBuffers[3];
  59. static const UINT32 TILE_SIZE;
  60. };
  61. /** @} */
  62. }}