Browse Source

Vulkan: Fix false positive in ninepatch axis stretch code

Adapted from e4907e50feab1af05f514a66adc0086d1c141885,
supersedes and closes #34704.
Rémi Verschelde 5 years ago
parent
commit
6310354cde
1 changed files with 13 additions and 10 deletions
  1. 13 10
      servers/visual/rasterizer_rd/shaders/canvas.glsl

+ 13 - 10
servers/visual/rasterizer_rd/shaders/canvas.glsl

@@ -283,26 +283,29 @@ float map_ninepatch_axis(float pixel, float draw_size, float tex_pixel_size, flo
 			draw_center--;
 		}
 
-		if (np_repeat == 0) { //stretch
-			//convert to ratio
+		// np_repeat is passed as uniform using NinePatchRect::AxisStretchMode enum.
+		if (np_repeat == 0) { // Stretch.
+			// Convert to ratio.
 			float ratio = (pixel - margin_begin) / (draw_size - margin_begin - margin_end);
-			//scale to source texture
+			// Scale to source texture.
 			return (margin_begin + ratio * (tex_size - margin_begin - margin_end)) * tex_pixel_size;
-		} else if (np_repeat == 1) { //tile
-			//convert to ratio
+		} else if (np_repeat == 1) { // Tile.
+			// Convert to offset.
 			float ofs = mod((pixel - margin_begin), tex_size - margin_begin - margin_end);
-			//scale to source texture
+			// Scale to source texture.
 			return (margin_begin + ofs) * tex_pixel_size;
-		} else if (np_repeat == 2) { //tile fit
-			//convert to ratio
+		} else if (np_repeat == 2) { // Tile Fit.
+			// Calculate scale.
 			float src_area = draw_size - margin_begin - margin_end;
 			float dst_area = tex_size - margin_begin - margin_end;
 			float scale = max(1.0, floor(src_area / max(dst_area, 0.0000001) + 0.5));
-
-			//convert to ratio
+			// Convert to ratio.
 			float ratio = (pixel - margin_begin) / src_area;
 			ratio = mod(ratio * scale, 1.0);
+			// Scale to source texture.
 			return (margin_begin + ratio * dst_area) * tex_pixel_size;
+		} else { // Shouldn't happen, but silences compiler warning.
+			return 0.0;
 		}
 	}
 }