From 00dce71eab0775efb8c0aab456ee1b2bee67cf48 Mon Sep 17 00:00:00 2001 From: Maximilian Mader Date: Mon, 11 Mar 2024 16:40:23 +0100 Subject: [PATCH] Make shaders compatible with GLES 3.0 GLES, at least as used in WebGL 2, does not like mixing integers and floats, for example: > ERROR: 1:8: '*' : wrong operand types - no operation '*' exists that takes a left-hand operand of type 'mediump 2-component vector of float' and a right operand of type 'const int' (or there is no acceptable conversion) This patch converts those integer constants into floats. With this patch the shaders (apart from the master shader) can be used in WebGL contexts too. --- Shaders/AAScale4x.fsh | 4 +-- Shaders/CRT.fsh | 76 +++++++++++++++++++++---------------------- Shaders/LCD.fsh | 30 ++++++++--------- Shaders/MonoLCD.fsh | 10 +++--- Shaders/OmniScale.fsh | 42 ++++++++++++------------ Shaders/Scale4x.fsh | 4 +-- 6 files changed, 83 insertions(+), 83 deletions(-) diff --git a/Shaders/AAScale4x.fsh b/Shaders/AAScale4x.fsh index f8237c791..738a38ff9 100644 --- a/Shaders/AAScale4x.fsh +++ b/Shaders/AAScale4x.fsh @@ -33,8 +33,8 @@ STATIC vec4 scale2x(sampler2D image, vec2 position, vec2 input_resolution, vec2 } STATIC vec4 scale2x_wrapper(sampler2D t, vec2 pos, vec2 offset, vec2 input_resolution, vec2 output_resolution) { - vec2 origin = (floor(pos * input_resolution * 2)) + vec2(0.5, 0.5); - return scale2x(t, (origin + offset) / input_resolution / 2, input_resolution, output_resolution); + vec2 origin = (floor(pos * input_resolution * 2.0)) + vec2(0.5, 0.5); + return scale2x(t, (origin + offset) / input_resolution / 2.0, input_resolution, output_resolution); } STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) diff --git a/Shaders/CRT.fsh b/Shaders/CRT.fsh index bd8386bb9..154f0a2fd 100644 --- a/Shaders/CRT.fsh +++ b/Shaders/CRT.fsh @@ -7,23 +7,23 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) { /* Curve and pixel ratio */ - float y_curve = cos(position.x - 0.5) * CURVENESS + (1 - CURVENESS); + float y_curve = cos(position.x - 0.5) * CURVENESS + (1.0 - CURVENESS); float y_multiplier = 8.0 / 7.0 / y_curve; position.y *= y_multiplier; - position.y -= (y_multiplier - 1) / 2; + position.y -= (y_multiplier - 1.0) / 2.0; if (position.y < 0.0) return vec4(0,0,0,0); if (position.y > 1.0) return vec4(0,0,0,0); - float x_curve = cos(position.y - 0.5) * CURVENESS + (1 - CURVENESS); - float x_multiplier = 1/x_curve; + float x_curve = cos(position.y - 0.5) * CURVENESS + (1.0 - CURVENESS); + float x_multiplier = 1.0/x_curve; position.x *= x_multiplier; - position.x -= (x_multiplier - 1) / 2; + position.x -= (x_multiplier - 1.0) / 2.0; if (position.x < 0.0) return vec4(0,0,0,0); if (position.x > 1.0) return vec4(0,0,0,0); /* Setting up common vars */ vec2 pos = fract(position * input_resolution); - vec2 sub_pos = pos * 6; + vec2 sub_pos = pos * 6.0; vec4 center = texture_relative(image, position, vec2(0, 0)); vec4 left = texture_relative(image, position, vec2(-1, 0)); @@ -36,18 +36,18 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou right = mix(right, texture_relative(image, position, vec2( 1, -1)), 0.5 - sub_pos.y / 2.0); } else if (sub_pos.y > 5.0) { - center = mix(center, texture_relative(image, position, vec2( 0, 1)), (sub_pos.y - 5) / 2.0); - left = mix(left, texture_relative(image, position, vec2(-1, 1)), (sub_pos.y - 5) / 2.0); - right = mix(right, texture_relative(image, position, vec2( 1, 1)), (sub_pos.y - 5) / 2.0); + center = mix(center, texture_relative(image, position, vec2( 0, 1)), (sub_pos.y - 5.0) / 2.0); + left = mix(left, texture_relative(image, position, vec2(-1, 1)), (sub_pos.y - 5.0) / 2.0); + right = mix(right, texture_relative(image, position, vec2( 1, 1)), (sub_pos.y - 5.0) / 2.0); } /* Scanlines */ float scanline_multiplier; if (pos.y < 0.5) { - scanline_multiplier = (pos.y * 2) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + scanline_multiplier = (pos.y * 2.0) * SCANLINE_DEPTH + (1.0 - SCANLINE_DEPTH); } else { - scanline_multiplier = ((1 - pos.y) * 2) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + scanline_multiplier = ((1.0 - pos.y) * 2.0) * SCANLINE_DEPTH + (1.0 - SCANLINE_DEPTH); } center *= scanline_multiplier; @@ -63,15 +63,15 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou if (pos.y < 1.0 / 3.0) { float gradient_position = pos.y * 3.0; - center *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); - left *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); - right *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + center *= gradient_position * VERTICAL_BORDER_DEPTH + (1.0 - VERTICAL_BORDER_DEPTH); + left *= gradient_position * VERTICAL_BORDER_DEPTH + (1.0 - VERTICAL_BORDER_DEPTH); + right *= gradient_position * VERTICAL_BORDER_DEPTH + (1.0 - VERTICAL_BORDER_DEPTH); } else if (pos.y > 2.0 / 3.0) { - float gradient_position = (1 - pos.y) * 3.0; - center *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); - left *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); - right *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + float gradient_position = (1.0 - pos.y) * 3.0; + center *= gradient_position * VERTICAL_BORDER_DEPTH + (1.0 - VERTICAL_BORDER_DEPTH); + left *= gradient_position * VERTICAL_BORDER_DEPTH + (1.0 - VERTICAL_BORDER_DEPTH); + right *= gradient_position * VERTICAL_BORDER_DEPTH + (1.0 - VERTICAL_BORDER_DEPTH); } /* Blur the edges of the separators of adjacent columns */ @@ -82,26 +82,26 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou if (pos.y < 1.0 / 3.0) { float gradient_position = pos.y * 3.0; if (pos.x < 0.5) { - gradient_position = 1 - (1 - gradient_position) * (1 - (pos.x) * 6.0); + gradient_position = 1.0 - (1.0 - gradient_position) * (1.0 - (pos.x) * 6.0); } else { - gradient_position = 1 - (1 - gradient_position) * (1 - (1 - pos.x) * 6.0); + gradient_position = 1.0 - (1.0 - gradient_position) * (1.0 - (1.0 - pos.x) * 6.0); } - center *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); - left *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); - right *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + center *= gradient_position * VERTICAL_BORDER_DEPTH + (1.0 - VERTICAL_BORDER_DEPTH); + left *= gradient_position * VERTICAL_BORDER_DEPTH + (1.0 - VERTICAL_BORDER_DEPTH); + right *= gradient_position * VERTICAL_BORDER_DEPTH + (1.0 - VERTICAL_BORDER_DEPTH); } else if (pos.y > 2.0 / 3.0) { - float gradient_position = (1 - pos.y) * 3.0; + float gradient_position = (1.0 - pos.y) * 3.0; if (pos.x < 0.5) { - gradient_position = 1 - (1 - gradient_position) * (1 - (pos.x) * 6.0); + gradient_position = 1.0 - (1.0 - gradient_position) * (1.0 - (pos.x) * 6.0); } else { - gradient_position = 1 - (1 - gradient_position) * (1 - (1 - pos.x) * 6.0); + gradient_position = 1.0 - (1.0 - gradient_position) * (1.0 - (1.0 - pos.x) * 6.0); } - center *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); - left *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); - right *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + center *= gradient_position * VERTICAL_BORDER_DEPTH + (1.0 - VERTICAL_BORDER_DEPTH); + left *= gradient_position * VERTICAL_BORDER_DEPTH + (1.0 - VERTICAL_BORDER_DEPTH); + right *= gradient_position * VERTICAL_BORDER_DEPTH + (1.0 - VERTICAL_BORDER_DEPTH); } } @@ -120,41 +120,41 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou else if (sub_pos.x < 2.0) { ret = mix(vec4(COLOR_HIGH * center.r, COLOR_LOW * center.g, COLOR_LOW * left.b, 1), vec4(COLOR_HIGH * center.r, COLOR_HIGH * center.g, COLOR_LOW * midleft.b, 1), - sub_pos.x - 1); + sub_pos.x - 1.0); } else if (sub_pos.x < 3.0) { ret = mix(vec4(COLOR_HIGH * center.r , COLOR_HIGH * center.g, COLOR_LOW * midleft.b, 1), vec4(COLOR_LOW * midright.r, COLOR_HIGH * center.g, COLOR_LOW * center.b, 1), - sub_pos.x - 2); + sub_pos.x - 2.0); } else if (sub_pos.x < 4.0) { ret = mix(vec4(COLOR_LOW * midright.r, COLOR_HIGH * center.g , COLOR_LOW * center.b, 1), vec4(COLOR_LOW * right.r , COLOR_HIGH * center.g, COLOR_HIGH * center.b, 1), - sub_pos.x - 3); + sub_pos.x - 3.0); } else if (sub_pos.x < 5.0) { ret = mix(vec4(COLOR_LOW * right.r, COLOR_HIGH * center.g , COLOR_HIGH * center.b, 1), vec4(COLOR_LOW * right.r, COLOR_LOW * midright.g, COLOR_HIGH * center.b, 1), - sub_pos.x - 4); + sub_pos.x - 4.0); } else { ret = mix(vec4(COLOR_LOW * right.r, COLOR_LOW * midright.g, COLOR_HIGH * center.b, 1), vec4(COLOR_HIGH * right.r, COLOR_LOW * right.g , COLOR_HIGH * center.b, 1), - sub_pos.x - 5); + sub_pos.x - 5.0); } /* Anti alias the curve */ vec2 pixel_position = position * output_resolution; - if (pixel_position.x < 1) { + if (pixel_position.x < 1.0) { ret *= pixel_position.x; } - else if (pixel_position.x > output_resolution.x - 1) { + else if (pixel_position.x > output_resolution.x - 1.0) { ret *= output_resolution.x - pixel_position.x; } - if (pixel_position.y < 1) { + if (pixel_position.y < 1.0) { ret *= pixel_position.y; } - else if (pixel_position.y > output_resolution.y - 1) { + else if (pixel_position.y > output_resolution.y - 1.0) { ret *= output_resolution.y - pixel_position.y; } diff --git a/Shaders/LCD.fsh b/Shaders/LCD.fsh index 4c238863e..c8fde24fb 100644 --- a/Shaders/LCD.fsh +++ b/Shaders/LCD.fsh @@ -5,7 +5,7 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) { vec2 pos = fract(position * input_resolution); - vec2 sub_pos = pos * 6; + vec2 sub_pos = pos * 6.0; vec4 center = texture_relative(image, position, vec2(0, 0)); vec4 left = texture_relative(image, position, vec2(-1, 0)); @@ -15,17 +15,17 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou center = mix(center, texture_relative(image, position, vec2( 0, -1)), 0.5 - sub_pos.y / 2.0); left = mix(left, texture_relative(image, position, vec2(-1, -1)), 0.5 - sub_pos.y / 2.0); right = mix(right, texture_relative(image, position, vec2( 1, -1)), 0.5 - sub_pos.y / 2.0); - center *= sub_pos.y * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); - left *= sub_pos.y * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); - right *= sub_pos.y * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + center *= sub_pos.y * SCANLINE_DEPTH + (1.0 - SCANLINE_DEPTH); + left *= sub_pos.y * SCANLINE_DEPTH + (1.0 - SCANLINE_DEPTH); + right *= sub_pos.y * SCANLINE_DEPTH + (1.0 - SCANLINE_DEPTH); } else if (sub_pos.y > 5.0) { - center = mix(center, texture_relative(image, position, vec2( 0, 1)), (sub_pos.y - 5) / 2.0); - left = mix(left, texture_relative(image, position, vec2(-1, 1)), (sub_pos.y - 5) / 2.0); - right = mix(right, texture_relative(image, position, vec2( 1, 1)), (sub_pos.y - 5) / 2.0); - center *= (6.0 - sub_pos.y) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); - left *= (6.0 - sub_pos.y) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); - right *= (6.0 - sub_pos.y) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + center = mix(center, texture_relative(image, position, vec2( 0, 1)), (sub_pos.y - 5.0) / 2.0); + left = mix(left, texture_relative(image, position, vec2(-1, 1)), (sub_pos.y - 5.0) / 2.0); + right = mix(right, texture_relative(image, position, vec2( 1, 1)), (sub_pos.y - 5.0) / 2.0); + center *= (6.0 - sub_pos.y) * SCANLINE_DEPTH + (1.0 - SCANLINE_DEPTH); + left *= (6.0 - sub_pos.y) * SCANLINE_DEPTH + (1.0 - SCANLINE_DEPTH); + right *= (6.0 - sub_pos.y) * SCANLINE_DEPTH + (1.0 - SCANLINE_DEPTH); } @@ -41,27 +41,27 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou else if (sub_pos.x < 2.0) { ret = mix(vec4(COLOR_HIGH * center.r, COLOR_LOW * center.g, COLOR_LOW * left.b, 1), vec4(COLOR_HIGH * center.r, COLOR_HIGH * center.g, COLOR_LOW * midleft.b, 1), - sub_pos.x - 1); + sub_pos.x - 1.0); } else if (sub_pos.x < 3.0) { ret = mix(vec4(COLOR_HIGH * center.r , COLOR_HIGH * center.g, COLOR_LOW * midleft.b, 1), vec4(COLOR_LOW * midright.r, COLOR_HIGH * center.g, COLOR_LOW * center.b, 1), - sub_pos.x - 2); + sub_pos.x - 2.0); } else if (sub_pos.x < 4.0) { ret = mix(vec4(COLOR_LOW * midright.r, COLOR_HIGH * center.g , COLOR_LOW * center.b, 1), vec4(COLOR_LOW * right.r , COLOR_HIGH * center.g, COLOR_HIGH * center.b, 1), - sub_pos.x - 3); + sub_pos.x - 3.0); } else if (sub_pos.x < 5.0) { ret = mix(vec4(COLOR_LOW * right.r, COLOR_HIGH * center.g , COLOR_HIGH * center.b, 1), vec4(COLOR_LOW * right.r, COLOR_LOW * midright.g, COLOR_HIGH * center.b, 1), - sub_pos.x - 4); + sub_pos.x - 4.0); } else { ret = mix(vec4(COLOR_LOW * right.r, COLOR_LOW * midright.g, COLOR_HIGH * center.b, 1), vec4(COLOR_HIGH * right.r, COLOR_LOW * right.g , COLOR_HIGH * center.b, 1), - sub_pos.x - 5); + sub_pos.x - 5.0); } return ret; diff --git a/Shaders/MonoLCD.fsh b/Shaders/MonoLCD.fsh index 1a7fa26f0..61d878dc6 100644 --- a/Shaders/MonoLCD.fsh +++ b/Shaders/MonoLCD.fsh @@ -16,22 +16,22 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou vec4 r2 = mix(q12, q22, s.x); vec2 pos = fract(position * input_resolution); - vec2 sub_pos = pos * 6; + vec2 sub_pos = pos * 6.0; float multiplier = 1.0; if (sub_pos.y < 1.0) { - multiplier *= sub_pos.y * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + multiplier *= sub_pos.y * SCANLINE_DEPTH + (1.0 - SCANLINE_DEPTH); } else if (sub_pos.y > 5.0) { - multiplier *= (6.0 - sub_pos.y) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + multiplier *= (6.0 - sub_pos.y) * SCANLINE_DEPTH + (1.0 - SCANLINE_DEPTH); } if (sub_pos.x < 1.0) { - multiplier *= sub_pos.x * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + multiplier *= sub_pos.x * SCANLINE_DEPTH + (1.0 - SCANLINE_DEPTH); } else if (sub_pos.x > 5.0) { - multiplier *= (6.0 - sub_pos.x) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + multiplier *= (6.0 - sub_pos.x) * SCANLINE_DEPTH + (1.0 - SCANLINE_DEPTH); } vec4 pre_shadow = mix(texture(image, position) * multiplier, mix(r1, r2, s.y), BLOOM); diff --git a/Shaders/OmniScale.fsh b/Shaders/OmniScale.fsh index 28ce3211d..960d08f76 100644 --- a/Shaders/OmniScale.fsh +++ b/Shaders/OmniScale.fsh @@ -87,7 +87,7 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou if (P(0x2F,0x2F)) { float dist = length(p - vec2(0.5)); float pixel_size = length(1.0 / (output_resolution / input_resolution)); - if (dist < 0.5 - pixel_size / 2) { + if (dist < 0.5 - pixel_size / 2.0) { return w4; } vec4 r; @@ -98,40 +98,40 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou r = mix(mix(w1 * 0.375 + w0 * 0.25 + w3 * 0.375, w3, p.y * 2.0), w1, p.x * 2.0); } - if (dist > 0.5 + pixel_size / 2) { + if (dist > 0.5 + pixel_size / 2.0) { return r; } - return mix(w4, r, (dist - 0.5 + pixel_size / 2) / pixel_size); + return mix(w4, r, (dist - 0.5 + pixel_size / 2.0) / pixel_size); } if (P(0xBF,0x37) || P(0xDB,0x13)) { float dist = p.x - 2.0 * p.y; float pixel_size = length(1.0 / (output_resolution / input_resolution)) * sqrt(5.0); - if (dist > pixel_size / 2) { + if (dist > pixel_size / 2.0) { return w1; } vec4 r = mix(w3, w4, p.x + 0.5); - if (dist < -pixel_size / 2) { + if (dist < -pixel_size / 2.0) { return r; } - return mix(r, w1, (dist + pixel_size / 2) / pixel_size); + return mix(r, w1, (dist + pixel_size / 2.0) / pixel_size); } if (P(0xDB,0x49) || P(0xEF,0x6D)) { float dist = p.y - 2.0 * p.x; float pixel_size = length(1.0 / (output_resolution / input_resolution)) * sqrt(5.0); - if (p.y - 2.0 * p.x > pixel_size / 2) { + if (p.y - 2.0 * p.x > pixel_size / 2.0) { return w3; } vec4 r = mix(w1, w4, p.x + 0.5); - if (dist < -pixel_size / 2) { + if (dist < -pixel_size / 2.0) { return r; } - return mix(r, w3, (dist + pixel_size / 2) / pixel_size); + return mix(r, w3, (dist + pixel_size / 2.0) / pixel_size); } if (P(0xBF,0x8F) || P(0x7E,0x0E)) { float dist = p.x + 2.0 * p.y; float pixel_size = length(1.0 / (output_resolution / input_resolution)) * sqrt(5.0); - if (dist > 1.0 + pixel_size / 2) { + if (dist > 1.0 + pixel_size / 2.0) { return w4; } @@ -143,18 +143,18 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou r = mix(mix(w1 * 0.375 + w0 * 0.25 + w3 * 0.375, w3, p.y * 2.0), w1, p.x * 2.0); } - if (dist < 1.0 - pixel_size / 2) { + if (dist < 1.0 - pixel_size / 2.0) { return r; } - return mix(r, w4, (dist + pixel_size / 2 - 1.0) / pixel_size); + return mix(r, w4, (dist + pixel_size / 2.0 - 1.0) / pixel_size); } if (P(0x7E,0x2A) || P(0xEF,0xAB)) { float dist = p.y + 2.0 * p.x; float pixel_size = length(1.0 / (output_resolution / input_resolution)) * sqrt(5.0); - if (p.y + 2.0 * p.x > 1.0 + pixel_size / 2) { + if (p.y + 2.0 * p.x > 1.0 + pixel_size / 2.0) { return w4; } @@ -167,11 +167,11 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou r = mix(mix(w1 * 0.375 + w0 * 0.25 + w3 * 0.375, w3, p.y * 2.0), w1, p.x * 2.0); } - if (dist < 1.0 - pixel_size / 2) { + if (dist < 1.0 - pixel_size / 2.0) { return r; } - return mix(r, w4, (dist + pixel_size / 2 - 1.0) / pixel_size); + return mix(r, w4, (dist + pixel_size / 2.0 - 1.0) / pixel_size); } if (P(0x1B,0x03) || P(0x4F,0x43) || P(0x8B,0x83) || P(0x6B,0x43)) { @@ -193,7 +193,7 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou float dist = p.x + p.y; float pixel_size = length(1.0 / (output_resolution / input_resolution)); - if (dist > 0.5 + pixel_size / 2) { + if (dist > 0.5 + pixel_size / 2.0) { return w4; } @@ -205,11 +205,11 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou r = mix(mix(w1 * 0.375 + w0 * 0.25 + w3 * 0.375, w3, p.y * 2.0), w1, p.x * 2.0); } - if (dist < 0.5 - pixel_size / 2) { + if (dist < 0.5 - pixel_size / 2.0) { return r; } - return mix(r, w4, (dist + pixel_size / 2 - 0.5) / pixel_size); + return mix(r, w4, (dist + pixel_size / 2.0 - 0.5) / pixel_size); } if (P(0x0B,0x01)) { @@ -223,7 +223,7 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou float dist = p.x + p.y; float pixel_size = length(1.0 / (output_resolution / input_resolution)); - if (dist > 0.5 + pixel_size / 2) { + if (dist > 0.5 + pixel_size / 2.0) { return w4; } @@ -252,10 +252,10 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou if (diagonal_bias <= 0) { vec4 r = mix(w1, w3, p.y - p.x + 0.5); - if (dist < 0.5 - pixel_size / 2) { + if (dist < 0.5 - pixel_size / 2.0) { return r; } - return mix(r, w4, (dist + pixel_size / 2 - 0.5) / pixel_size); + return mix(r, w4, (dist + pixel_size / 2.0 - 0.5) / pixel_size); } return w4; diff --git a/Shaders/Scale4x.fsh b/Shaders/Scale4x.fsh index 93c4b2159..f76e0ece8 100644 --- a/Shaders/Scale4x.fsh +++ b/Shaders/Scale4x.fsh @@ -33,8 +33,8 @@ STATIC vec4 scale2x(sampler2D image, vec2 position, vec2 input_resolution, vec2 STATIC vec4 scale2x_wrapper(sampler2D t, vec2 pos, vec2 offset, vec2 input_resolution, vec2 output_resolution) { - vec2 origin = (floor(pos * input_resolution * 2)) + vec2(0.5, 0.5); - return scale2x(t, (origin + offset) / input_resolution / 2, input_resolution, output_resolution); + vec2 origin = (floor(pos * input_resolution * 2.0)) + vec2(0.5, 0.5); + return scale2x(t, (origin + offset) / input_resolution / 2.0, input_resolution, output_resolution); } STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution)