Browse Source

Fix fragcolor write locations in scene shaders

lawnjelly 1 year ago
parent
commit
ecd0680b11
2 changed files with 9 additions and 5 deletions
  1. 7 3
      drivers/gles2/shaders/scene.glsl
  2. 2 2
      drivers/gles3/shaders/scene.glsl

+ 7 - 3
drivers/gles2/shaders/scene.glsl

@@ -2467,6 +2467,12 @@ FRAGMENT_SHADER_CODE
 	frag_color.rgb = mix(pow((frag_color.rgb + vec3(0.055)) * (1.0 / (1.0 + 0.055)), vec3(2.4)), frag_color.rgb * (1.0 / 12.92), vec3(lessThan(frag_color.rgb, vec3(0.04045))));
 #endif
 
+	// Write to the final output once and only once.
+	// Use a temporary in the rest of the shader.
+	// This is for drivers that have a performance drop
+	// when the output is read during the shader.
+	gl_FragColor = frag_color;
+
 #else // not RENDER_DEPTH
 //depth render
 #ifdef USE_RGBA_SHADOWS
@@ -2474,10 +2480,8 @@ FRAGMENT_SHADER_CODE
 	highp float depth = ((position_interp.z / position_interp.w) + 1.0) * 0.5 + 0.0; // bias
 	highp vec4 comp = fract(depth * vec4(255.0 * 255.0 * 255.0, 255.0 * 255.0, 255.0, 1.0));
 	comp -= comp.xxyz * vec4(0.0, 1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0);
-	frag_color = comp;
+	gl_FragColor = comp;
 
 #endif
 #endif
-
-	gl_FragColor = frag_color;
 }

+ 2 - 2
drivers/gles3/shaders/scene.glsl

@@ -2453,13 +2453,13 @@ FRAGMENT_SHADER_CODE
 #endif //ubershader-runtime
 #endif //SHADELESS //ubershader-runtime
 
+#endif //USE_MULTIPLE_RENDER_TARGETS //ubershader-runtime
+
 	// Write to the final output once and only once.
 	// Use a temporary in the rest of the shader.
 	// This is for drivers that have a performance drop
 	// when the output is read during the shader.
 	frag_color_final = frag_color;
 
-#endif //USE_MULTIPLE_RENDER_TARGETS //ubershader-runtime
-
 #endif //RENDER_DEPTH //ubershader-runtime
 }