瀏覽代碼

Fix radiance for sky in GLES stereo rendering

(cherry picked from commit e06ac4d40cb6871a09adf76729b3f3a7c0e3714a)
Bastiaan Olij 1 年之前
父節點
當前提交
b05514dd0d
共有 2 個文件被更改,包括 12 次插入3 次删除
  1. 11 3
      drivers/gles3/rasterizer_scene_gles3.cpp
  2. 1 0
      drivers/gles3/storage/light_storage.cpp

+ 11 - 3
drivers/gles3/rasterizer_scene_gles3.cpp

@@ -958,10 +958,10 @@ void RasterizerSceneGLES3::_update_sky_radiance(RID p_env, const Projection &p_p
 		glDisable(GL_BLEND);
 		glDepthMask(GL_FALSE);
 		glDisable(GL_DEPTH_TEST);
+		scene_state.current_depth_test = GLES3::SceneShaderData::DEPTH_TEST_DISABLED;
 		glDisable(GL_SCISSOR_TEST);
-		glCullFace(GL_BACK);
-		glEnable(GL_CULL_FACE);
-		scene_state.cull_mode = GLES3::SceneShaderData::CULL_BACK;
+		glDisable(GL_CULL_FACE);
+		scene_state.cull_mode = GLES3::SceneShaderData::CULL_DISABLED;
 
 		for (int i = 0; i < 6; i++) {
 			Basis local_view = Basis::looking_at(view_normals[i], view_up[i]);
@@ -982,6 +982,14 @@ void RasterizerSceneGLES3::_update_sky_radiance(RID p_env, const Projection &p_p
 		sky->reflection_dirty = false;
 	} else {
 		if (sky_mode == RS::SKY_MODE_INCREMENTAL && sky->processing_layer < max_processing_layer) {
+			glDisable(GL_BLEND);
+			glDepthMask(GL_FALSE);
+			glDisable(GL_DEPTH_TEST);
+			scene_state.current_depth_test = GLES3::SceneShaderData::DEPTH_TEST_DISABLED;
+			glDisable(GL_SCISSOR_TEST);
+			glDisable(GL_CULL_FACE);
+			scene_state.cull_mode = GLES3::SceneShaderData::CULL_DISABLED;
+
 			_filter_sky_radiance(sky, sky->processing_layer);
 			sky->processing_layer++;
 		}

+ 1 - 0
drivers/gles3/storage/light_storage.cpp

@@ -1019,6 +1019,7 @@ void LightStorage::update_directional_shadow_atlas() {
 
 		glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, directional_shadow.depth, 0);
 	}
+	glUseProgram(0);
 	glDepthMask(GL_TRUE);
 	glBindFramebuffer(GL_FRAMEBUFFER, directional_shadow.fbo);
 	RasterizerGLES3::clear_depth(1.0);