26 virtual ~DeferredRenderer();
28 virtual void Resize(uint32_t width, uint32_t height)
override;
31 entt::registry& registry,
32 glm::mat4 projectionMatrix,
38 virtual uint16_t GetRenderModeCount()
const override;
39 virtual const RenderMode* GetRenderModes()
const override;
40 virtual void SetRenderMode(uint16_t mode)
override;
41 virtual std::vector<Grindstone::Rendering::GeometryRenderStats> GetRenderingStats()
override;
43 enum class DeferredRenderMode : uint16_t {
61 struct DeferredRendererImageSet {
106 std::vector<GraphicsAPI::Image*> bloomRenderTargets;
107 std::vector<GraphicsAPI::DescriptorSet*> bloomDescriptorSets;
115 void CreatePipelines();
116 void CreateBloomUniformBuffers();
117 void UpdateBloomDescriptorSet(DeferredRendererImageSet& imageSet);
118 void CreateDepthOfFieldRenderTargetsAndDescriptorSets(DeferredRendererImageSet& imageSet,
size_t imageSetIndex);
119 void CreateSsrRenderTargetsAndDescriptorSets(DeferredRendererImageSet& imageSet,
size_t imageSetIndex);
120 void CreateBloomRenderTargetsAndDescriptorSets(DeferredRendererImageSet& imageSet,
size_t imageSetIndex);
124 void UpdateBloomUBO();
132 void CreateDepthOfFieldResources();
133 void CreateBloomResources();
134 void CreateSSRResources();
135 void CreateSsaoKernelAndNoise();
136 void CreateDescriptorSetLayouts();
137 void CreateGbufferFramebuffer();
138 void CreateLitHDRFramebuffer();
139 void CreateDescriptorSets(DeferredRendererImageSet& imageSet);
140 void UpdateDescriptorSets(DeferredRendererImageSet& imageSet);
141 void CreateUniformBuffers();
142 void CreateVertexAndIndexBuffersAndLayouts();
144 struct PostProcessUbo {
145 glm::vec4 vignetteColor = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
146 float vignetteRadius = 0.75f;
147 float vignetteSoftness = 0.8f;
148 float grainAmount = 0.0007f;
149 float grainPixelSize = 1.0f;
150 glm::vec2 chromaticDistortionRedOffset = glm::vec2(0.00045f, 0.00045f);
151 glm::vec2 chromaticDistortionGreenOffset = glm::vec2(0.0003f, 0.0003f);
152 glm::vec2 chromaticDistortionBlueOffset = glm::vec2(-0.0003f, -0.0003f);
153 float paniniDistortionStrength = 0.0f;
154 bool isAnimated =
true;
157 PostProcessUbo postProcessUboData;
159 struct DebugUboData {
165 DebugUboData debugUboData;
167 uint32_t framebufferWidth = 0u;
168 uint32_t framebufferHeight = 0u;
169 uint32_t renderWidth = 0u;
170 uint32_t renderHeight = 0u;
172 size_t bloomStoredMipLevelCount = 0;
173 size_t bloomMipLevelCount = 0;
176 std::vector<DeferredRendererImageSet> deferredRendererImageSets;
177 std::vector<GraphicsAPI::Buffer*> bloomUniformBuffers;
178 size_t bloomFirstUpsampleIndex = 0;
231 Uuid currentEnvironmentMapUuid;
233 DeferredRenderMode renderMode;