TraditionalDeferredShading.h 1.8 KB

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