diff options
Diffstat (limited to 'video/out')
-rw-r--r-- | video/out/gl_video.c | 8 | ||||
-rw-r--r-- | video/out/gl_video_shaders.glsl | 5 |
2 files changed, 11 insertions, 2 deletions
diff --git a/video/out/gl_video.c b/video/out/gl_video.c index f43ad71858..6cff529843 100644 --- a/video/out/gl_video.c +++ b/video/out/gl_video.c @@ -829,8 +829,8 @@ static void shader_setup_scaler(char **shader, struct scaler *scaler, int pass) int xx = x > 0 ? x-1 : x; double d = sqrt(xx*xx + yy*yy); - // Samples outside the radius are unnecessary - if (d < radius) { + if (d < radius - 1) { + // Samples definitely inside the main ring APPENDF(shader, "SAMPLE_POLAR_%s(LUT, %f, %d, %d) \\\n ", // The center 4 coefficients are the primary // contributors, used to clamp the result for @@ -838,6 +838,10 @@ static void shader_setup_scaler(char **shader, struct scaler *scaler, int pass) (x >= 0 && y >= 0 && x <= 1 && y <= 1) ? "PRIMARY" : "HELPER", (double)radius, x, y); + } else if (d < radius) { + // Samples on the edge, these are potential values + APPENDF(shader, "SAMPLE_POLAR_POTENTIAL(LUT, %f, %d, %d) \\\n ", + (double)radius, x, y); } } } diff --git a/video/out/gl_video_shaders.glsl b/video/out/gl_video_shaders.glsl index f8aef48b9b..b95953bfa6 100644 --- a/video/out/gl_video_shaders.glsl +++ b/video/out/gl_video_shaders.glsl @@ -312,6 +312,11 @@ float[6] weights6(sampler2D lookup, float f) { lo = min(lo, c); \ hi = max(hi, c); +#define SAMPLE_POLAR_POTENTIAL(LUT, R, X, Y) \ + if (length(vec2(X, Y) - fcoord)/R < 1.0) { \ + SAMPLE_POLAR_HELPER(LUT, R, X, Y) \ + } + #define SAMPLE_CONVOLUTION_POLAR_R(NAME, R, LUT, WEIGHTS_FN, ANTIRING) \ vec4 NAME(VIDEO_SAMPLER tex, vec2 texsize, vec2 texcoord) { \ vec2 pt = vec2(1.0) / texsize; \ |