147 void create_frame_buffers();
148 void destroy_frame_buffers();
149 void update_uniforms(int32_t _pass,
const float* view,
const float* proj);
160 u_params = bgfx::createUniform(
"u_params", bgfx::UniformType::Vec4, NumVec4);
165 bgfx::setUniform(u_params, m_params, NumVec4);
170 bgfx::destroy(u_params);
178 struct {
float m_viewportPixelSize[2];
float m_halfViewportPixelSize[2]; };
179 struct {
float m_depthUnpackConsts[2];
float m_unused0[2]; };
180 struct {
float m_ndcToViewMul[2];
float m_ndcToViewAdd[2]; };
181 struct {
float m_perPassFullResCoordOffset[2];
float m_perPassFullResUVOffset[2]; };
182 struct {
float m_viewport2xPixelSize[2];
float m_viewport2xPixelSize_x_025[2]; };
183 struct {
float m_effectRadius;
float m_effectShadowStrength;
float m_effectShadowPow;
float m_effectShadowClamp; };
184 struct {
float m_effectFadeOutMul;
float m_effectFadeOutAdd;
float m_effectHorizonAngleThreshold;
float m_effectSamplingRadiusNearLimitRec; };
185 struct {
float m_depthPrecisionOffsetMod;
float m_negRecEffectRadius;
float m_loadCounterAvgDiv;
float m_adaptiveSampleCountLimit; };
186 struct {
float m_invSharpness;
float m_passIndex;
float m_quarterResPixelSize[2]; };
187 struct {
float m_patternRotScaleMatrices[5][4]; };
188 struct {
float m_normalsUnpackMul;
float m_normalsUnpackAdd;
float m_detailAOStrength;
float m_layer; };
189 struct {
float m_normalsWorldToViewspaceMatrix[16]; };
192 float m_params[NumVec4 * 4];
196 bgfx::UniformHandle u_params{bgfx::kInvalidHandle};
201 bgfx::ProgramHandle m_prepareDepthsProgram{bgfx::kInvalidHandle};
202 bgfx::ProgramHandle m_prepareDepthsAndNormalsProgram{bgfx::kInvalidHandle};
203 bgfx::ProgramHandle m_prepareDepthsHalfProgram{bgfx::kInvalidHandle};
204 bgfx::ProgramHandle m_prepareDepthsAndNormalsHalfProgram{bgfx::kInvalidHandle};
205 bgfx::ProgramHandle m_prepareDepthMipProgram{bgfx::kInvalidHandle};
206 bgfx::ProgramHandle m_generateQ0Program{bgfx::kInvalidHandle};
207 bgfx::ProgramHandle m_generateQ1Program{bgfx::kInvalidHandle};
208 bgfx::ProgramHandle m_generateQ2Program{bgfx::kInvalidHandle};
209 bgfx::ProgramHandle m_generateQ3Program{bgfx::kInvalidHandle};
210 bgfx::ProgramHandle m_generateQ3BaseProgram{bgfx::kInvalidHandle};
212 bgfx::ProgramHandle m_generateQ0ProgramRgba16f{bgfx::kInvalidHandle};
213 bgfx::ProgramHandle m_generateQ1ProgramRgba16f{bgfx::kInvalidHandle};
214 bgfx::ProgramHandle m_generateQ2ProgramRgba16f{bgfx::kInvalidHandle};
215 bgfx::ProgramHandle m_generateQ3ProgramRgba16f{bgfx::kInvalidHandle};
216 bgfx::ProgramHandle m_generateQ3BaseProgramRgba16f{bgfx::kInvalidHandle};
218 bgfx::ProgramHandle m_smartBlurProgram{bgfx::kInvalidHandle};
219 bgfx::ProgramHandle m_smartBlurWideProgram{bgfx::kInvalidHandle};
220 bgfx::ProgramHandle m_nonSmartBlurProgram{bgfx::kInvalidHandle};
221 bgfx::ProgramHandle m_applyProgram{bgfx::kInvalidHandle};
222 bgfx::ProgramHandle m_nonSmartApplyProgram{bgfx::kInvalidHandle};
223 bgfx::ProgramHandle m_nonSmartHalfApplyProgram{bgfx::kInvalidHandle};
224 bgfx::ProgramHandle m_generateImportanceMapProgram{bgfx::kInvalidHandle};
225 bgfx::ProgramHandle m_postprocessImportanceMapAProgram{bgfx::kInvalidHandle};
226 bgfx::ProgramHandle m_postprocessImportanceMapBProgram{bgfx::kInvalidHandle};
227 bgfx::ProgramHandle m_loadCounterClearProgram{bgfx::kInvalidHandle};
229 bgfx::ProgramHandle m_updateGBufferProgram{bgfx::kInvalidHandle};
232 bgfx::UniformHandle u_rect{bgfx::kInvalidHandle};
235 bgfx::UniformHandle s_normal{bgfx::kInvalidHandle};
236 bgfx::UniformHandle s_depth{bgfx::kInvalidHandle};
237 bgfx::UniformHandle s_ao{bgfx::kInvalidHandle};
238 bgfx::UniformHandle s_blurInput{bgfx::kInvalidHandle};
239 bgfx::UniformHandle s_finalSSAO{bgfx::kInvalidHandle};
240 bgfx::UniformHandle s_depthSource{bgfx::kInvalidHandle};
241 bgfx::UniformHandle s_viewspaceDepthSource{bgfx::kInvalidHandle};
242 bgfx::UniformHandle s_viewspaceDepthSourceMirror{bgfx::kInvalidHandle};
243 bgfx::UniformHandle s_importanceMap{bgfx::kInvalidHandle};
246 bgfx::TextureHandle m_halfDepths[4]{{bgfx::kInvalidHandle},
247 {bgfx::kInvalidHandle},
248 {bgfx::kInvalidHandle},
249 {bgfx::kInvalidHandle}};
250 bgfx::TextureHandle m_pingPongHalfResultA{bgfx::kInvalidHandle};
251 bgfx::TextureHandle m_pingPongHalfResultB{bgfx::kInvalidHandle};
252 bgfx::TextureHandle m_finalResults{bgfx::kInvalidHandle};
253 bgfx::TextureHandle m_aoMap{bgfx::kInvalidHandle};
254 bgfx::TextureHandle m_normals{bgfx::kInvalidHandle};
257 bgfx::TextureHandle m_importanceMap{bgfx::kInvalidHandle};
258 bgfx::TextureHandle m_importanceMapPong{bgfx::kInvalidHandle};
259 bgfx::DynamicIndexBufferHandle m_loadCounter{bgfx::kInvalidHandle};
261 settings m_settings{};
262 uniforms m_uniforms{};
268 int32_t m_halfSize[2]{};
269 int32_t m_quarterSize[2]{};
270 int32_t m_fullResOutScissorRect[4]{};
271 int32_t m_halfResOutScissorRect[4]{};
274 std::vector<gpu_program::ptr> m_programs;