TraditionalDeferredShading.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Copyright (C) 2009-2020, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <anki/renderer/RendererObject.h>
  7. namespace anki
  8. {
  9. /// @addtogroup renderer
  10. /// @{
  11. /// Parameters to be passed to TraditionalDeferredLightShading::drawLights.
  12. class TraditionalDeferredLightShadingDrawInfo
  13. {
  14. public:
  15. Mat4 m_viewProjectionMatrix;
  16. Mat4 m_invViewProjectionMatrix;
  17. Vec4 m_cameraPosWSpace;
  18. UVec4 m_viewport;
  19. Vec2 m_gbufferTexCoordsScale;
  20. Vec2 m_gbufferTexCoordsBias;
  21. Vec2 m_lightbufferTexCoordsScale;
  22. Vec2 m_lightbufferTexCoordsBias;
  23. F32 m_cameraNear;
  24. F32 m_cameraFar;
  25. DirectionalLightQueueElement* m_directionalLight ANKI_DEBUG_CODE(= numberToPtr<DirectionalLightQueueElement*>(1));
  26. ConstWeakArray<PointLightQueueElement> m_pointLights;
  27. ConstWeakArray<SpotLightQueueElement> m_spotLights;
  28. CommandBufferPtr m_commandBuffer;
  29. Bool m_computeSpecular = false;
  30. };
  31. /// Helper for drawing using traditional deferred shading.
  32. class TraditionalDeferredLightShading : public RendererObject
  33. {
  34. public:
  35. TraditionalDeferredLightShading(Renderer* r);
  36. ~TraditionalDeferredLightShading();
  37. ANKI_USE_RESULT Error init();
  38. /// Run the light shading. It will iterate over the lights and draw them. It doesn't bind anything related to
  39. /// GBuffer or the output buffer.
  40. void drawLights(TraditionalDeferredLightShadingDrawInfo& info);
  41. private:
  42. ShaderProgramResourcePtr m_lightProg;
  43. Array<ShaderProgramPtr, 2> m_plightGrProg;
  44. Array<ShaderProgramPtr, 2> m_slightGrProg;
  45. Array<ShaderProgramPtr, 2> m_dirLightGrProg;
  46. /// @name Meshes of light volumes.
  47. /// @{
  48. MeshResourcePtr m_plightMesh;
  49. MeshResourcePtr m_slightMesh;
  50. /// @}
  51. static void bindVertexIndexBuffers(MeshResourcePtr& mesh, CommandBufferPtr& cmdb, U32& indexCount);
  52. };
  53. /// @}
  54. } // end namespace anki