Browse Source

Fix 2D normals for transposed texture

kleonc 1 year ago
parent
commit
0fe7eead02

+ 3 - 0
drivers/gles3/shaders/canvas.glsl

@@ -587,6 +587,9 @@ void main() {
 
 
 	if (normal_used || (using_light && bool(read_draw_data_flags & FLAGS_DEFAULT_NORMAL_MAP_USED))) {
 	if (normal_used || (using_light && bool(read_draw_data_flags & FLAGS_DEFAULT_NORMAL_MAP_USED))) {
 		normal.xy = texture(normal_texture, uv).xy * vec2(2.0, -2.0) - vec2(1.0, -1.0);
 		normal.xy = texture(normal_texture, uv).xy * vec2(2.0, -2.0) - vec2(1.0, -1.0);
+		if (bool(read_draw_data_flags & FLAGS_TRANSPOSE_RECT)) {
+			normal.xy = normal.yx;
+		}
 		if (bool(read_draw_data_flags & FLAGS_FLIP_H)) {
 		if (bool(read_draw_data_flags & FLAGS_FLIP_H)) {
 			normal.x = -normal.x;
 			normal.x = -normal.x;
 		}
 		}

+ 3 - 0
servers/rendering/renderer_rd/shaders/canvas.glsl

@@ -516,6 +516,9 @@ void main() {
 
 
 	if (normal_used || (using_light && bool(draw_data.flags & FLAGS_DEFAULT_NORMAL_MAP_USED))) {
 	if (normal_used || (using_light && bool(draw_data.flags & FLAGS_DEFAULT_NORMAL_MAP_USED))) {
 		normal.xy = texture(sampler2D(normal_texture, texture_sampler), uv).xy * vec2(2.0, -2.0) - vec2(1.0, -1.0);
 		normal.xy = texture(sampler2D(normal_texture, texture_sampler), uv).xy * vec2(2.0, -2.0) - vec2(1.0, -1.0);
+		if (bool(draw_data.flags & FLAGS_TRANSPOSE_RECT)) {
+			normal.xy = normal.yx;
+		}
 		if (bool(draw_data.flags & FLAGS_FLIP_H)) {
 		if (bool(draw_data.flags & FLAGS_FLIP_H)) {
 			normal.x = -normal.x;
 			normal.x = -normal.x;
 		}
 		}