X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=resample_effect.h;h=cf5f3bbd74e83aedccfa939dd5c82ad3d8919e13;hp=1822a3ea6b261fa833d59c4e4e2e0e276b83ca4b;hb=c79d94d05d560fa59b23d542bca6d7a94b907b6f;hpb=1cf2cadebbffbef8c98e493cd53805b70f0fd564 diff --git a/resample_effect.h b/resample_effect.h index 1822a3e..cf5f3bb 100644 --- a/resample_effect.h +++ b/resample_effect.h @@ -44,7 +44,7 @@ struct ScalingWeights { std::unique_ptr[]> bilinear_weights_fp16; std::unique_ptr[]> bilinear_weights_fp32; }; -ScalingWeights calculate_scaling_weights(unsigned src_size, unsigned dst_size, float zoom, float offset); +ScalingWeights calculate_bilinear_scaling_weights(unsigned src_size, unsigned dst_size, float zoom, float offset); // A simple manager for support data stored in a 2D texture. // Consider moving it to a shared location of more classes @@ -70,11 +70,6 @@ public: std::string effect_type_id() const override { return "ResampleEffect"; } - // We want this for the same reason as ResizeEffect; we could end up scaling - // down quite a lot. - bool needs_texture_bounce() const override { return true; } - bool needs_srgb_primaries() const override { return false; } - void inform_input_size(unsigned input_num, unsigned width, unsigned height) override; std::string output_fragment_shader() override { @@ -93,8 +88,8 @@ private: // Both of these are owned by us if owns_effects is true (before finalize()), // and otherwise owned by the EffectChain. - bool owns_effects; - SingleResamplePassEffect *hpass, *vpass; + std::unique_ptr hpass_owner, vpass_owner; + SingleResamplePassEffect *hpass = nullptr, *vpass = nullptr; int input_width, input_height, output_width, output_height; float offset_x, offset_y; @@ -117,6 +112,10 @@ public: bool needs_srgb_primaries() const override { return false; } AlphaHandling alpha_handling() const override { return INPUT_PREMULTIPLIED_ALPHA_KEEP_BLANK; } + // We specifically do not want mipmaps on the input texture; + // they break minification. + MipmapRequirements needs_mipmaps() const override { return CANNOT_ACCEPT_MIPMAPS; } + void inform_added(EffectChain *chain) override { this->chain = chain; } void inform_input_size(unsigned input_num, unsigned width, unsigned height) override { if (parent != nullptr) {