Blender V5.0
BLI_math_interp.hh File Reference

Go to the source code of this file.

Namespaces

namespace  blender
namespace  blender::math

Macros

#define EWA_MAXIDX   255

Typedefs

using ewa_filter_read_pixel_cb = void (*)(void *userdata, int x, int y, float result[4])

Enumerations

enum class  blender::math::InterpWrapMode { blender::math::Extend , blender::math::Repeat , blender::math::Border }

Functions

void blender::math::interpolate_nearest_border_byte (const uchar *buffer, uchar *output, int width, int height, float u, float v)
uchar4 blender::math::interpolate_nearest_border_byte (const uchar *buffer, int width, int height, float u, float v)
void blender::math::interpolate_nearest_border_fl (const float *buffer, float *output, int width, int height, int components, float u, float v)
float4 blender::math::interpolate_nearest_border_fl (const float *buffer, int width, int height, float u, float v)
void blender::math::interpolate_nearest_byte (const uchar *buffer, uchar *output, int width, int height, float u, float v)
uchar4 blender::math::interpolate_nearest_byte (const uchar *buffer, int width, int height, float u, float v)
void blender::math::interpolate_nearest_fl (const float *buffer, float *output, int width, int height, int components, float u, float v)
float4 blender::math::interpolate_nearest_fl (const float *buffer, int width, int height, float u, float v)
void blender::math::interpolate_nearest_wrap_byte (const uchar *buffer, uchar *output, int width, int height, float u, float v)
uchar4 blender::math::interpolate_nearest_wrap_byte (const uchar *buffer, int width, int height, float u, float v)
void blender::math::interpolate_nearest_wrap_fl (const float *buffer, float *output, int width, int height, int components, float u, float v)
float4 blender::math::interpolate_nearest_wrap_fl (const float *buffer, int width, int height, float u, float v)
void blender::math::interpolate_nearest_wrapmode_fl (const float *buffer, float *output, int width, int height, int components, float u, float v, InterpWrapMode wrap_u, InterpWrapMode wrap_v)
uchar4 blender::math::interpolate_bilinear_border_byte (const uchar *buffer, int width, int height, float u, float v)
float4 blender::math::interpolate_bilinear_border_fl (const float *buffer, int width, int height, float u, float v)
void blender::math::interpolate_bilinear_border_fl (const float *buffer, float *output, int width, int height, int components, float u, float v)
uchar4 blender::math::interpolate_bilinear_byte (const uchar *buffer, int width, int height, float u, float v)
float4 blender::math::interpolate_bilinear_fl (const float *buffer, int width, int height, float u, float v)
void blender::math::interpolate_bilinear_fl (const float *buffer, float *output, int width, int height, int components, float u, float v)
uchar4 blender::math::interpolate_bilinear_wrap_byte (const uchar *buffer, int width, int height, float u, float v)
float4 blender::math::interpolate_bilinear_wrap_fl (const float *buffer, int width, int height, float u, float v)
void blender::math::interpolate_bilinear_wrapmode_fl (const float *buffer, float *output, int width, int height, int components, float u, float v, InterpWrapMode wrap_u, InterpWrapMode wrap_v)
uchar4 blender::math::interpolate_cubic_bspline_byte (const uchar *buffer, int width, int height, float u, float v)
float4 blender::math::interpolate_cubic_bspline_fl (const float *buffer, int width, int height, float u, float v)
void blender::math::interpolate_cubic_bspline_fl (const float *buffer, float *output, int width, int height, int components, float u, float v)
void blender::math::interpolate_cubic_bspline_wrapmode_fl (const float *buffer, float *output, int width, int height, int components, float u, float v, InterpWrapMode wrap_u, InterpWrapMode wrap_v)
uchar4 blender::math::interpolate_cubic_mitchell_byte (const uchar *buffer, int width, int height, float u, float v)
float4 blender::math::interpolate_cubic_mitchell_fl (const float *buffer, int width, int height, float u, float v)
void blender::math::interpolate_cubic_mitchell_fl (const float *buffer, float *output, int width, int height, int components, float u, float v)
void BLI_ewa_imp2radangle (float A, float B, float C, float F, float *a, float *b, float *th, float *ecc)
void BLI_ewa_filter (int width, int height, bool intpol, bool use_alpha, const float uv[2], const float du[2], const float dv[2], ewa_filter_read_pixel_cb read_pixel_cb, void *userdata, float result[4])

Variables

const float EWA_WTS [EWA_MAXIDX+1]

Detailed Description

2D image sampling with filtering functions.

All functions take (u, v) texture coordinate, non-normalized (i.e. ranging from (0,0) to (width,height) over the image).

Any filtering done on texel values just blends them without color space or gamma conversions.

For sampling float images, there are "fully generic" functions that take arbitrary image channel counts, and arbitrary texture coordinate wrapping modes. However if you do not need full flexibility, use less generic functions, they will be faster (e.g. #interpolate_nearest_border_fl is faster than #interpolate_nearest_wrapmode_fl).

Definition in file BLI_math_interp.hh.

Macro Definition Documentation

◆ EWA_MAXIDX

#define EWA_MAXIDX   255

Definition at line 354 of file BLI_math_interp.hh.

Referenced by BLI_ewa_filter().

Typedef Documentation

◆ ewa_filter_read_pixel_cb

using ewa_filter_read_pixel_cb = void (*)(void *userdata, int x, int y, float result[4])

Definition at line 357 of file BLI_math_interp.hh.

Function Documentation

◆ BLI_ewa_filter()

void BLI_ewa_filter ( int width,
int height,
bool intpol,
bool use_alpha,
const float uv[2],
const float du[2],
const float dv[2],
ewa_filter_read_pixel_cb read_pixel_cb,
void * userdata,
float result[4] )

TODO(sergey): Consider making this function inlined, so the pixel read callback could also be inlined in order to avoid per-pixel function calls.

Definition at line 848 of file math_interp.cc.

References A, B, b, BLI_ewa_imp2radangle(), C, ceilf, EWA_MAXIDX, EWA_WTS, F, float, floorf, madd_v3_v3fl(), mul_v3_fl(), radangle2imp(), result, sqrtf, U, UNUSED_VARS, V, v, v2, and zero_v4().

Referenced by ewa_eval(), blender::compositor::Result::sample_ewa_extended(), and blender::compositor::Result::sample_ewa_zero().

◆ BLI_ewa_imp2radangle()

void BLI_ewa_imp2radangle ( float A,
float B,
float C,
float F,
float * a,
float * b,
float * th,
float * ecc )

Definition at line 818 of file math_interp.cc.

References A, atan2f, B, b, C, F, float, M_PI, and sqrtf.

Referenced by BLI_ewa_filter().

Variable Documentation

◆ EWA_WTS

const float EWA_WTS[EWA_MAXIDX+1]
extern

Definition at line 767 of file math_interp.cc.

Referenced by BLI_ewa_filter().