X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=resample_effect.cpp;h=10dc59c5a2dbab0a0533629b801357636ad31ef0;hp=6c490f141bc1a87b9f86db44b90b5d64f75d0dd7;hb=aa3e630eb0c455921c721f9ccd84e872bc9757bc;hpb=2b6a8585772bf9ae742a2ee36144a0cdd5ba0524 diff --git a/resample_effect.cpp b/resample_effect.cpp index 6c490f1..10dc59c 100644 --- a/resample_effect.cpp +++ b/resample_effect.cpp @@ -299,11 +299,18 @@ void SingleResamplePassEffect::update_texture(GLuint glsl_program_num, const str int base_src_y = lrintf(center_src_y); // Now sample pixels on each side around that point. + double sum = 0.0; for (int i = 0; i < src_samples; ++i) { int src_y = base_src_y + i - int_radius; float weight = lanczos_weight(radius_scaling_factor * (src_y - center_src_y), LANCZOS_RADIUS); weights[(y * src_samples + i) * 2 + 0] = weight * radius_scaling_factor; weights[(y * src_samples + i) * 2 + 1] = (src_y + 0.5) / float(src_size); + sum += weights[(y * src_samples + i) * 2 + 0]; + } + + // Normalize so that the sum becomes one. + for (int i = 0; i < src_samples; ++i) { + weights[(y * src_samples + i) * 2 + 0] /= sum; } }