X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=resample_effect.cpp;h=c0afe0b1964ec06c2ab757883327c6a13570276a;hp=a176074ad9ced7344a368e9257a8c3b2ccb088a1;hb=17195eb5da34f03778cde297eb77c486fa0c51bc;hpb=1a06994ccdeedba95a1bdd2c3c12bb54a7a897f9 diff --git a/resample_effect.cpp b/resample_effect.cpp index a176074..c0afe0b 100644 --- a/resample_effect.cpp +++ b/resample_effect.cpp @@ -54,6 +54,7 @@ unsigned combine_samples(float *src, float *dst, unsigned num_src_samples, unsig // Last sample; cannot combine. continue; } + assert(num_samples_saved <= max_samples_saved); if (num_samples_saved == max_samples_saved) { // We could maybe save more here, but other rows can't, so don't bother. continue; @@ -70,8 +71,14 @@ unsigned combine_samples(float *src, float *dst, unsigned num_src_samples, unsig float pos2 = src[(i + 1) * 2 + 1]; assert(pos2 > pos1); - float offset, total_weight; - combine_two_samples(w1, w2, &offset, &total_weight); + float offset, total_weight, sum_sq_error; + combine_two_samples(w1, w2, &offset, &total_weight, &sum_sq_error); + + // If the interpolation error is larger than that of one level + // at 8-bit precision, don't combine. + if (sum_sq_error > 1.0f / (256.0f * 256.0f)) { + continue; + } // OK, we can combine this and the next sample. if (dst != NULL) { @@ -327,7 +334,7 @@ void SingleResamplePassEffect::update_texture(GLuint glsl_program_num, const std check_error(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); check_error(); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RG32F, src_bilinear_samples, dst_samples, 0, GL_RG, GL_FLOAT, bilinear_weights); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RG16F, src_bilinear_samples, dst_samples, 0, GL_RG, GL_FLOAT, bilinear_weights); check_error(); delete[] weights;