ClusterBinning2.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright (C) 2009-2023, 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. /// Bins clusterer objects to the clusterer.
  11. class ClusterBinning2 : public RendererObject
  12. {
  13. public:
  14. ClusterBinning2();
  15. ~ClusterBinning2();
  16. Error init();
  17. /// Populate the rendergraph.
  18. void populateRenderGraph(RenderingContext& ctx);
  19. const BufferOffsetRange& getClusteredShadingUniforms() const
  20. {
  21. return m_runCtx.m_clusterUniformsBuffer;
  22. }
  23. const BufferOffsetRange& getPackedObjectsBuffer(GpuSceneNonRenderableObjectType type) const
  24. {
  25. return m_runCtx.m_packedObjectsBuffers[type];
  26. }
  27. BufferHandle getPackedObjectsBufferHandle(GpuSceneNonRenderableObjectType type) const
  28. {
  29. return m_runCtx.m_packedObjectsHandles[type];
  30. }
  31. const BufferOffsetRange& getClustersBuffer() const
  32. {
  33. return m_runCtx.m_clustersBuffer;
  34. }
  35. BufferHandle getClustersBufferHandle() const
  36. {
  37. return m_runCtx.m_clustersHandle;
  38. }
  39. private:
  40. ShaderProgramResourcePtr m_jobSetupProg;
  41. ShaderProgramPtr m_jobSetupGrProg;
  42. ShaderProgramResourcePtr m_binningProg;
  43. Array<ShaderProgramPtr, U32(GpuSceneNonRenderableObjectType::kCount)> m_binningGrProgs;
  44. ShaderProgramResourcePtr m_packingProg;
  45. Array<ShaderProgramPtr, U32(GpuSceneNonRenderableObjectType::kCount)> m_packingGrProgs;
  46. class
  47. {
  48. public:
  49. BufferHandle m_clustersHandle;
  50. BufferOffsetRange m_clustersBuffer;
  51. Array<BufferHandle, U32(GpuSceneNonRenderableObjectType::kCount)> m_packedObjectsHandles;
  52. Array<BufferOffsetRange, U32(GpuSceneNonRenderableObjectType::kCount)> m_packedObjectsBuffers;
  53. BufferOffsetRange m_clusterUniformsBuffer;
  54. ClusteredShadingUniforms* m_uniformsCpu = nullptr;
  55. RenderingContext* m_rctx = nullptr;
  56. } m_runCtx;
  57. void writeClusterUniformsInternal();
  58. };
  59. /// @}
  60. } // end namespace anki