151 int32_t halfSize[2]{};
152 int32_t quarterSize[2]{};
153 int32_t fullResOutScissorRect[4]{};
154 int32_t halfResOutScissorRect[4]{};
156 void create_or_update_frame_buffers(
gfx::render_view& rview,
const dimensions& dims);
157 void update_uniforms(int32_t _pass,
const float*
view,
const float* proj,
const dimensions& dims);
168 u_params = bgfx::createUniform(
"u_params", bgfx::UniformType::Vec4, NumVec4);
173 bgfx::setUniform(u_params, m_params, NumVec4);
178 bgfx::destroy(u_params);
186 struct {
float m_viewportPixelSize[2];
float m_halfViewportPixelSize[2]; };
187 struct {
float m_depthUnpackConsts[2];
float m_unused0[2]; };
188 struct {
float m_ndcToViewMul[2];
float m_ndcToViewAdd[2]; };
189 struct {
float m_perPassFullResCoordOffset[2];
float m_perPassFullResUVOffset[2]; };
190 struct {
float m_viewport2xPixelSize[2];
float m_viewport2xPixelSize_x_025[2]; };
191 struct {
float m_effectRadius;
float m_effectShadowStrength;
float m_effectShadowPow;
float m_effectShadowClamp; };
192 struct {
float m_effectFadeOutMul;
float m_effectFadeOutAdd;
float m_effectHorizonAngleThreshold;
float m_effectSamplingRadiusNearLimitRec; };
193 struct {
float m_depthPrecisionOffsetMod;
float m_negRecEffectRadius;
float m_loadCounterAvgDiv;
float m_adaptiveSampleCountLimit; };
194 struct {
float m_invSharpness;
float m_passIndex;
float m_quarterResPixelSize[2]; };
195 struct {
float m_patternRotScaleMatrices[5][4]; };
196 struct {
float m_normalsUnpackMul;
float m_normalsUnpackAdd;
float m_detailAOStrength;
float m_layer; };
197 struct {
float m_normalsWorldToViewspaceMatrix[16]; };
200 float m_params[NumVec4 * 4];
204 bgfx::UniformHandle u_params{bgfx::kInvalidHandle};
209 bgfx::ProgramHandle m_prepareDepthsProgram{bgfx::kInvalidHandle};
210 bgfx::ProgramHandle m_prepareDepthsAndNormalsProgram{bgfx::kInvalidHandle};
211 bgfx::ProgramHandle m_prepareDepthsHalfProgram{bgfx::kInvalidHandle};
212 bgfx::ProgramHandle m_prepareDepthsAndNormalsHalfProgram{bgfx::kInvalidHandle};
213 bgfx::ProgramHandle m_prepareDepthMipProgram{bgfx::kInvalidHandle};
214 bgfx::ProgramHandle m_generateQ0Program{bgfx::kInvalidHandle};
215 bgfx::ProgramHandle m_generateQ1Program{bgfx::kInvalidHandle};
216 bgfx::ProgramHandle m_generateQ2Program{bgfx::kInvalidHandle};
217 bgfx::ProgramHandle m_generateQ3Program{bgfx::kInvalidHandle};
218 bgfx::ProgramHandle m_generateQ3BaseProgram{bgfx::kInvalidHandle};
220 bgfx::ProgramHandle m_generateQ0ProgramRgba16f{bgfx::kInvalidHandle};
221 bgfx::ProgramHandle m_generateQ1ProgramRgba16f{bgfx::kInvalidHandle};
222 bgfx::ProgramHandle m_generateQ2ProgramRgba16f{bgfx::kInvalidHandle};
223 bgfx::ProgramHandle m_generateQ3ProgramRgba16f{bgfx::kInvalidHandle};
224 bgfx::ProgramHandle m_generateQ3BaseProgramRgba16f{bgfx::kInvalidHandle};
226 bgfx::ProgramHandle m_smartBlurProgram{bgfx::kInvalidHandle};
227 bgfx::ProgramHandle m_smartBlurWideProgram{bgfx::kInvalidHandle};
228 bgfx::ProgramHandle m_nonSmartBlurProgram{bgfx::kInvalidHandle};
229 bgfx::ProgramHandle m_applyProgram{bgfx::kInvalidHandle};
230 bgfx::ProgramHandle m_nonSmartApplyProgram{bgfx::kInvalidHandle};
231 bgfx::ProgramHandle m_nonSmartHalfApplyProgram{bgfx::kInvalidHandle};
232 bgfx::ProgramHandle m_generateImportanceMapProgram{bgfx::kInvalidHandle};
233 bgfx::ProgramHandle m_postprocessImportanceMapAProgram{bgfx::kInvalidHandle};
234 bgfx::ProgramHandle m_postprocessImportanceMapBProgram{bgfx::kInvalidHandle};
235 bgfx::ProgramHandle m_loadCounterClearProgram{bgfx::kInvalidHandle};
237 bgfx::ProgramHandle m_updateGBufferProgram{bgfx::kInvalidHandle};
240 bgfx::UniformHandle u_rect{bgfx::kInvalidHandle};
243 bgfx::UniformHandle s_normal{bgfx::kInvalidHandle};
244 bgfx::UniformHandle s_depth{bgfx::kInvalidHandle};
245 bgfx::UniformHandle s_ao{bgfx::kInvalidHandle};
246 bgfx::UniformHandle s_blurInput{bgfx::kInvalidHandle};
247 bgfx::UniformHandle s_finalSSAO{bgfx::kInvalidHandle};
248 bgfx::UniformHandle s_depthSource{bgfx::kInvalidHandle};
249 bgfx::UniformHandle s_viewspaceDepthSource{bgfx::kInvalidHandle};
250 bgfx::UniformHandle s_viewspaceDepthSourceMirror{bgfx::kInvalidHandle};
251 bgfx::UniformHandle s_importanceMap{bgfx::kInvalidHandle};
253 bgfx::DynamicIndexBufferHandle m_loadCounter{bgfx::kInvalidHandle};
255 settings m_settings{};
256 uniforms m_uniforms{};
258 std::vector<gpu_program::ptr> m_programs;