Skip to content

Commit 1cb748d

Browse files
committed
Implemented a very simple SSAO in GLES3.
1 parent b836688 commit 1cb748d

File tree

3 files changed

+12
-27
lines changed

3 files changed

+12
-27
lines changed

drivers/gles3/effects/post_effects.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ void PostEffects::post_copy(
124124
if (p_luminance_multiplier != 1.0) {
125125
flags |= PostShaderGLES3::USE_LUMINANCE_MULTIPLIER;
126126
}
127-
flags |= PostShaderGLES3::USE_LUMINANCE_MULTIPLIER;
128127

129128
bool success = post.shader.version_bind_shader(post.shader_version, mode, flags);
130129
if (!success) {

drivers/gles3/effects/post_effects.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,9 @@ class PostEffects {
5959
~PostEffects();
6060

6161
void post_copy(GLuint p_dest_framebuffer, Size2i p_dest_size, GLuint p_source_color,
62-
GLuint p_source_depth, bool p_ssao_enabled, int p_ssao_quality_level, float p_ssao_strength, float p_ssao_radius, // These are for SSAO.
63-
Size2i p_source_size, float p_luminance_multiplier, const Glow::GLOWLEVEL *p_glow_buffers, float p_glow_intensity,
64-
float p_srgb_white,
65-
uint32_t p_view = 0, bool p_use_multiview = false, uint64_t p_spec_constants = 0);
62+
GLuint p_source_depth, bool p_ssao_enabled, int p_ssao_quality_level, float p_ssao_strength, float p_ssao_radius,
63+
Size2i p_source_size, float p_luminance_multiplier, const Glow::GLOWLEVEL *p_glow_buffers, float p_glow_intensity,
64+
float p_srgb_white, uint32_t p_view = 0, bool p_use_multiview = false, uint64_t p_spec_constants = 0);
6665
};
6766

6867
} //namespace GLES3

drivers/gles3/rasterizer_scene_gles3.cpp

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2562,13 +2562,9 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
25622562
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
25632563
glViewport(0, 0, rb->internal_size.x, rb->internal_size.y);
25642564

2565-
scene_state.reset_gl_state();
2566-
25672565
// If SSAO is enabled, we definitely need the depth buffer.
2568-
if (render_data.environment.is_valid()) {
2569-
if (environment_get_ssao_enabled(render_data.environment)) {
2570-
scene_state.used_depth_texture = true;
2571-
}
2566+
if (ssao_enabled) {
2567+
scene_state.used_depth_texture = true;
25722568
}
25732569

25742570
// Do depth prepass if it's explicitly enabled
@@ -2861,17 +2857,11 @@ void RasterizerSceneGLES3::_render_post_processing(const RenderDataGLES3 *p_rend
28612857
if (p_render_data->environment.is_valid()) {
28622858
ssao_enabled = environment_get_ssao_enabled(p_render_data->environment);
28632859
// This SSAO is not implemented the same way, but uses the intensity and radius
2864-
// in a similar way. The 'detail' value is used as the distance falloff control.
2865-
// The parameters are scaled so the SSAO defaults look good (though different).
2860+
// in a similar way. The parameters are scaled so the SSAO defaults look ok.
28662861
ssao_strength = environment_get_ssao_intensity(p_render_data->environment) * 2.0;
28672862
ssao_radius = environment_get_ssao_radius(p_render_data->environment) * 0.5;
28682863
}
28692864

2870-
if (ssao_enabled) {
2871-
// I think this already happened?
2872-
//rb->check_backbuffer(scene_state.used_screen_texture, scene_state.used_depth_texture);
2873-
}
2874-
28752865
uint64_t bcs_spec_constants = 0;
28762866
if (p_render_data->environment.is_valid()) {
28772867
bool use_bcs = environment_get_adjustments_enabled(p_render_data->environment);
@@ -2940,10 +2930,9 @@ void RasterizerSceneGLES3::_render_post_processing(const RenderDataGLES3 *p_rend
29402930

29412931
// Copy color buffer
29422932
post_effects->post_copy(fbo_rt, target_size, color,
2943-
depth_buffer, ssao_enabled, ssao_quality, ssao_strength, ssao_radius, // These are new for SSAO.
2944-
internal_size, p_render_data->luminance_multiplier, glow_buffers, glow_intensity,
2945-
srgb_white,
2946-
0, false, bcs_spec_constants);
2933+
depth_buffer, ssao_enabled, ssao_quality, ssao_strength, ssao_radius,
2934+
internal_size, p_render_data->luminance_multiplier, glow_buffers, glow_intensity,
2935+
srgb_white, 0, false, bcs_spec_constants);
29472936

29482937
// Copy depth buffer
29492938
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo_int);
@@ -3015,14 +3004,12 @@ void RasterizerSceneGLES3::_render_post_processing(const RenderDataGLES3 *p_rend
30153004
glBindFramebuffer(GL_FRAMEBUFFER, fbos[2]);
30163005
glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, write_color, 0, v);
30173006
post_effects->post_copy(fbos[2], target_size, source_color,
3018-
read_depth, ssao_enabled, ssao_quality, ssao_strength, ssao_radius, // These are new for SSAO.
3019-
internal_size, p_render_data->luminance_multiplier, glow_buffers, glow_intensity,
3020-
srgb_white,
3021-
v, true, bcs_spec_constants);
3007+
read_depth, ssao_enabled, ssao_quality, ssao_strength, ssao_radius,
3008+
internal_size, p_render_data->luminance_multiplier, glow_buffers, glow_intensity,
3009+
srgb_white, v, true, bcs_spec_constants);
30223010
}
30233011

30243012
// Copy depth
3025-
//GLuint read_depth = rb->get_internal_depth();
30263013
GLuint write_depth = texture_storage->render_target_get_depth(render_target);
30273014

30283015
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbos[0]);

0 commit comments

Comments
 (0)