Explorar o código

Merge pull request #75968 from clayjohn/GL-depth-write

Ensure that depth write state is updated before transparent pass in OpenGL3 renderer
Rémi Verschelde %!s(int64=2) %!d(string=hai) anos
pai
achega
6e0c7d6a98
Modificáronse 1 ficheiros con 5 adicións e 7 borrados
  1. 5 7
      drivers/gles3/rasterizer_scene_gles3.cpp

+ 5 - 7
drivers/gles3/rasterizer_scene_gles3.cpp

@@ -1948,7 +1948,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
 	glDepthFunc(GL_LEQUAL);
 	glDepthFunc(GL_LEQUAL);
 	glDepthMask(GL_TRUE);
 	glDepthMask(GL_TRUE);
 	scene_state.current_depth_test = GLES3::SceneShaderData::DEPTH_TEST_ENABLED;
 	scene_state.current_depth_test = GLES3::SceneShaderData::DEPTH_TEST_ENABLED;
-	scene_state.current_depth_draw = GLES3::SceneShaderData::DEPTH_DRAW_OPAQUE;
+	scene_state.current_depth_draw = GLES3::SceneShaderData::DEPTH_DRAW_ALWAYS;
 
 
 	if (!fb_cleared) {
 	if (!fb_cleared) {
 		glClearDepth(1.0f);
 		glClearDepth(1.0f);
@@ -1976,19 +1976,17 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
 
 
 	_render_list_template<PASS_MODE_COLOR>(&render_list_params, &render_data, 0, render_list[RENDER_LIST_OPAQUE].elements.size());
 	_render_list_template<PASS_MODE_COLOR>(&render_list_params, &render_data, 0, render_list[RENDER_LIST_OPAQUE].elements.size());
 
 
+	glDepthMask(GL_FALSE);
+	scene_state.current_depth_draw = GLES3::SceneShaderData::DEPTH_DRAW_DISABLED;
+
 	if (draw_sky) {
 	if (draw_sky) {
 		RENDER_TIMESTAMP("Render Sky");
 		RENDER_TIMESTAMP("Render Sky");
-		if (scene_state.current_depth_test != GLES3::SceneShaderData::DEPTH_TEST_ENABLED) {
-			glEnable(GL_DEPTH_TEST);
-			scene_state.current_depth_test = GLES3::SceneShaderData::DEPTH_TEST_ENABLED;
-		}
+
 		glEnable(GL_DEPTH_TEST);
 		glEnable(GL_DEPTH_TEST);
-		glDepthMask(GL_FALSE);
 		glDisable(GL_BLEND);
 		glDisable(GL_BLEND);
 		glEnable(GL_CULL_FACE);
 		glEnable(GL_CULL_FACE);
 		glCullFace(GL_BACK);
 		glCullFace(GL_BACK);
 		scene_state.current_depth_test = GLES3::SceneShaderData::DEPTH_TEST_ENABLED;
 		scene_state.current_depth_test = GLES3::SceneShaderData::DEPTH_TEST_ENABLED;
-		scene_state.current_depth_draw = GLES3::SceneShaderData::DEPTH_DRAW_DISABLED;
 		scene_state.cull_mode = GLES3::SceneShaderData::CULL_BACK;
 		scene_state.cull_mode = GLES3::SceneShaderData::CULL_BACK;
 
 
 		_draw_sky(render_data.environment, render_data.cam_projection, render_data.cam_transform, sky_energy_multiplier, p_camera_data->view_count > 1, flip_y);
 		_draw_sky(render_data.environment, render_data.cam_projection, render_data.cam_transform, sky_energy_multiplier, p_camera_data->view_count > 1, flip_y);