2
0
Эх сурвалжийг харах

Fix fog in GLES2 by using epic hack, closes #25410

Juan Linietsky 6 жил өмнө
parent
commit
4af8009b9d

+ 10 - 0
drivers/gles2/shaders/scene.glsl

@@ -2049,7 +2049,13 @@ FRAGMENT_SHADER_CODE
 
 
 #if defined(USE_VERTEX_LIGHTING)
 #if defined(USE_VERTEX_LIGHTING)
 
 
+#if defined(BASE_PASS)
 	gl_FragColor.rgb = mix(gl_FragColor.rgb, fog_interp.rgb, fog_interp.a);
 	gl_FragColor.rgb = mix(gl_FragColor.rgb, fog_interp.rgb, fog_interp.a);
+#else
+	gl_FragColor.rgb *= (1.0 - fog_interp.a);
+#endif // BASE_PASS
+
+
 #else //pixel based fog
 #else //pixel based fog
 	float fog_amount = 0.0;
 	float fog_amount = 0.0;
 
 
@@ -2083,7 +2089,11 @@ FRAGMENT_SHADER_CODE
 	}
 	}
 #endif
 #endif
 
 
+#if defined(BASE_PASS)
 	gl_FragColor.rgb = mix(gl_FragColor.rgb, fog_color, fog_amount);
 	gl_FragColor.rgb = mix(gl_FragColor.rgb, fog_color, fog_amount);
+#else
+	gl_FragColor.rgb *= (1.0 - fog_amount);
+#endif // BASE_PASS
 
 
 #endif //use vertex lit
 #endif //use vertex lit
 
 

+ 2 - 0
drivers/gles3/rasterizer_canvas_gles3.cpp

@@ -1704,6 +1704,8 @@ void RasterizerCanvasGLES3::canvas_debug_viewport_shadows(Light *p_lights_with_s
 
 
 		light = light->shadows_next_ptr;
 		light = light->shadows_next_ptr;
 	}
 	}
+
+	canvas_end();
 }
 }
 
 
 void RasterizerCanvasGLES3::canvas_light_shadow_buffer_update(RID p_buffer, const Transform2D &p_light_xform, int p_light_mask, float p_near, float p_far, LightOccluderInstance *p_occluders, CameraMatrix *p_xform_cache) {
 void RasterizerCanvasGLES3::canvas_light_shadow_buffer_update(RID p_buffer, const Transform2D &p_light_xform, int p_light_mask, float p_near, float p_far, LightOccluderInstance *p_occluders, CameraMatrix *p_xform_cache) {