|
32 | 32 |
|
33 | 33 | #include "drivers/gles3/effects/copy_effects.h" |
34 | 34 | #include "drivers/gles3/effects/feed_effects.h" |
| 35 | +#include "drivers/gles3/storage/material_storage.h" |
35 | 36 | #include "rasterizer_gles3.h" |
36 | 37 | #include "storage/config.h" |
37 | 38 | #include "storage/mesh_storage.h" |
@@ -223,10 +224,10 @@ void RasterizerSceneGLES3::_geometry_instance_add_surface_with_material(Geometry |
223 | 224 | flags |= GeometryInstanceSurface::FLAG_USES_DOUBLE_SIDED_SHADOWS; |
224 | 225 | } |
225 | 226 |
|
226 | | - if (has_alpha || has_read_screen_alpha || p_material->shader_data->depth_draw == GLES3::SceneShaderData::DEPTH_DRAW_DISABLED || p_material->shader_data->depth_test == GLES3::SceneShaderData::DEPTH_TEST_DISABLED) { |
| 227 | + if (has_alpha || has_read_screen_alpha || p_material->shader_data->depth_draw == GLES3::SceneShaderData::DEPTH_DRAW_DISABLED || p_material->shader_data->depth_test != GLES3::SceneShaderData::DEPTH_TEST_ENABLED) { |
227 | 228 | //material is only meant for alpha pass |
228 | 229 | flags |= GeometryInstanceSurface::FLAG_PASS_ALPHA; |
229 | | - if (p_material->shader_data->uses_depth_prepass_alpha && !(p_material->shader_data->depth_draw == GLES3::SceneShaderData::DEPTH_DRAW_DISABLED || p_material->shader_data->depth_test == GLES3::SceneShaderData::DEPTH_TEST_DISABLED)) { |
| 230 | + if (p_material->shader_data->uses_depth_prepass_alpha && !(p_material->shader_data->depth_draw == GLES3::SceneShaderData::DEPTH_DRAW_DISABLED || p_material->shader_data->depth_test != GLES3::SceneShaderData::DEPTH_TEST_ENABLED)) { |
230 | 231 | flags |= GeometryInstanceSurface::FLAG_PASS_DEPTH; |
231 | 232 | flags |= GeometryInstanceSurface::FLAG_PASS_SHADOW; |
232 | 233 | } |
@@ -2184,7 +2185,7 @@ void RasterizerSceneGLES3::_render_shadow_pass(RID p_light, RID p_shadow_atlas, |
2184 | 2185 | scene_state.reset_gl_state(); |
2185 | 2186 | scene_state.enable_gl_depth_test(true); |
2186 | 2187 | scene_state.enable_gl_depth_draw(true); |
2187 | | - glDepthFunc(GL_GREATER); |
| 2188 | + scene_state.set_gl_depth_func(GL_GREATER); |
2188 | 2189 |
|
2189 | 2190 | glColorMask(0, 0, 0, 0); |
2190 | 2191 | glDrawBuffers(0, nullptr); |
@@ -2503,7 +2504,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_ |
2503 | 2504 | scene_state.enable_gl_depth_test(true); |
2504 | 2505 | scene_state.enable_gl_depth_draw(true); |
2505 | 2506 | scene_state.enable_gl_blend(false); |
2506 | | - glDepthFunc(GL_GEQUAL); |
| 2507 | + scene_state.set_gl_depth_func(GL_GEQUAL); |
2507 | 2508 | scene_state.enable_gl_scissor_test(false); |
2508 | 2509 |
|
2509 | 2510 | glColorMask(0, 0, 0, 0); |
@@ -2541,7 +2542,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_ |
2541 | 2542 | scene_state.enable_gl_scissor_test(false); |
2542 | 2543 | scene_state.enable_gl_depth_test(true); |
2543 | 2544 | scene_state.enable_gl_depth_draw(true); |
2544 | | - glDepthFunc(GL_GEQUAL); |
| 2545 | + scene_state.set_gl_depth_func(GL_GEQUAL); |
2545 | 2546 |
|
2546 | 2547 | { |
2547 | 2548 | GLuint db = GL_COLOR_ATTACHMENT0; |
@@ -2635,6 +2636,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_ |
2635 | 2636 | RENDER_TIMESTAMP("Render Sky"); |
2636 | 2637 |
|
2637 | 2638 | scene_state.enable_gl_depth_test(true); |
| 2639 | + scene_state.set_gl_depth_func(GL_GEQUAL); |
2638 | 2640 | scene_state.enable_gl_blend(false); |
2639 | 2641 | scene_state.set_gl_cull_mode(RS::CULL_MODE_BACK); |
2640 | 2642 |
|
@@ -3016,7 +3018,13 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params, |
3016 | 3018 | } |
3017 | 3019 |
|
3018 | 3020 | if constexpr (p_pass_mode == PASS_MODE_COLOR_TRANSPARENT) { |
3019 | | - scene_state.enable_gl_depth_test(shader->depth_test == GLES3::SceneShaderData::DEPTH_TEST_ENABLED); |
| 3021 | + scene_state.enable_gl_depth_test(shader->depth_test != GLES3::SceneShaderData::DEPTH_TEST_DISABLED); |
| 3022 | + } |
| 3023 | + |
| 3024 | + if (shader->depth_test == GLES3::SceneShaderData::DEPTH_TEST_ENABLED_INVERTED) { |
| 3025 | + scene_state.set_gl_depth_func(GL_LESS); |
| 3026 | + } else { |
| 3027 | + scene_state.set_gl_depth_func(GL_GEQUAL); |
3020 | 3028 | } |
3021 | 3029 |
|
3022 | 3030 | if constexpr (p_pass_mode != PASS_MODE_SHADOW) { |
@@ -3713,7 +3721,7 @@ void RasterizerSceneGLES3::render_particle_collider_heightfield(RID p_collider, |
3713 | 3721 | scene_state.reset_gl_state(); |
3714 | 3722 | scene_state.enable_gl_depth_test(true); |
3715 | 3723 | scene_state.enable_gl_depth_draw(true); |
3716 | | - glDepthFunc(GL_GREATER); |
| 3724 | + scene_state.set_gl_depth_func(GL_GREATER); |
3717 | 3725 |
|
3718 | 3726 | glDrawBuffers(0, nullptr); |
3719 | 3727 |
|
@@ -3759,7 +3767,7 @@ void RasterizerSceneGLES3::_render_uv2(const PagedArray<RenderGeometryInstance * |
3759 | 3767 | scene_state.reset_gl_state(); |
3760 | 3768 | scene_state.enable_gl_depth_test(true); |
3761 | 3769 | scene_state.enable_gl_depth_draw(true); |
3762 | | - glDepthFunc(GL_GREATER); |
| 3770 | + scene_state.set_gl_depth_func(GL_GREATER); |
3763 | 3771 |
|
3764 | 3772 | TightLocalVector<GLenum> draw_buffers; |
3765 | 3773 | draw_buffers.push_back(GL_COLOR_ATTACHMENT0); |
@@ -3852,7 +3860,7 @@ void RasterizerSceneGLES3::_render_buffers_debug_draw(Ref<RenderSceneBuffersGLES |
3852 | 3860 | glViewport(0, 0, shadow_atlas_size, shadow_atlas_size); |
3853 | 3861 | glActiveTexture(GL_TEXTURE0); |
3854 | 3862 | scene_state.enable_gl_depth_draw(true); |
3855 | | - glDepthFunc(GL_ALWAYS); |
| 3863 | + scene_state.set_gl_depth_func(GL_ALWAYS); |
3856 | 3864 | scene_state.set_gl_cull_mode(RS::CULL_MODE_DISABLED); |
3857 | 3865 |
|
3858 | 3866 | // Loop through quadrants and copy shadows over. |
|
0 commit comments