core | glapi | vbo | math | shader | swrast | swrast_setup | tnl | tnl_dd

s_texfilter.c File Reference

#include "main/glheader.h"
#include "main/context.h"
#include "main/colormac.h"
#include "main/imports.h"
#include "main/texformat.h"
#include "s_context.h"
#include "s_texfilter.h"

Defines

#define FRAC(f)   ((f) - IFLOOR(f))
#define LERP(T, A, B)   ( (A) + (T) * ((B) - (A)) )
 Linear interpolation macro.
#define REMAINDER(A, B)   (((A) + (B) * 1024) % (B))
 If A is a signed integer, A % B doesn't give the right value for A < 0 (in terms of texture repeat).
#define I0BIT   1
#define I1BIT   2
#define J0BIT   4
#define J1BIT   8
#define K0BIT   16
#define K1BIT   32

Functions

static INLINE GLfloat lerp_2d (GLfloat a, GLfloat b, GLfloat v00, GLfloat v10, GLfloat v01, GLfloat v11)
 Do 2D/biliner interpolation of float values.
static INLINE GLfloat lerp_3d (GLfloat a, GLfloat b, GLfloat c, GLfloat v000, GLfloat v100, GLfloat v010, GLfloat v110, GLfloat v001, GLfloat v101, GLfloat v011, GLfloat v111)
 Do 3D/trilinear interpolation of float values.
static INLINE void lerp_rgba (GLfloat result[4], GLfloat t, const GLfloat a[4], const GLfloat b[4])
 Do linear interpolation of colors.
static INLINE void lerp_rgba_2d (GLfloat result[4], GLfloat a, GLfloat b, const GLfloat t00[4], const GLfloat t10[4], const GLfloat t01[4], const GLfloat t11[4])
 Do bilinear interpolation of colors.
static INLINE void lerp_rgba_3d (GLfloat result[4], GLfloat a, GLfloat b, GLfloat c, const GLfloat t000[4], const GLfloat t100[4], const GLfloat t010[4], const GLfloat t110[4], const GLfloat t001[4], const GLfloat t101[4], const GLfloat t011[4], const GLfloat t111[4])
 Do trilinear interpolation of colors.
static INLINE void linear_texel_locations (GLenum wrapMode, const struct gl_texture_image *img, GLint size, GLfloat s, GLint *i0, GLint *i1, GLfloat *weight)
 Used to compute texel locations for linear sampling.
static INLINE GLint nearest_texel_location (GLenum wrapMode, const struct gl_texture_image *img, GLint size, GLfloat s)
 Used to compute texel location for nearest sampling.
static INLINE void linear_repeat_texel_location (GLuint size, GLfloat s, GLint *i0, GLint *i1, GLfloat *weight)
static INLINE GLint clamp_rect_coord_nearest (GLenum wrapMode, GLfloat coord, GLint max)
 Do clamp/wrap for a texture rectangle coord, GL_NEAREST filter mode.
static INLINE void clamp_rect_coord_linear (GLenum wrapMode, GLfloat coord, GLint max, GLint *i0out, GLint *i1out, GLfloat *weight)
 As above, but GL_LINEAR filtering.
static INLINE void nearest_texcoord (const struct gl_texture_object *texObj, const GLfloat texcoord[4], GLint *i, GLint *j, GLint *k)
 Compute nearest integer texcoords for given texobj and coordinate.
static INLINE void linear_texcoord (const struct gl_texture_object *texObj, const GLfloat texcoord[4], GLint *i0, GLint *i1, GLint *j0, GLint *j1, GLint *slice, GLfloat *wi, GLfloat *wj)
 Compute linear integer texcoords for given texobj and coordinate.
static INLINE GLint linear_mipmap_level (const struct gl_texture_object *tObj, GLfloat lambda)
 For linear interpolation between mipmap levels N and N+1, this function computes N.
static INLINE GLint nearest_mipmap_level (const struct gl_texture_object *tObj, GLfloat lambda)
 Compute the nearest mipmap level to take texels from.
static INLINE void compute_min_mag_ranges (const struct gl_texture_object *tObj, GLuint n, const GLfloat lambda[], GLuint *minStart, GLuint *minEnd, GLuint *magStart, GLuint *magEnd)
 The lambda[] array values are always monotonic.
static INLINE void get_border_color (const struct gl_texture_object *tObj, const struct gl_texture_image *img, GLfloat rgba[4])
 When we sample the border color, it must be interpreted according to the base texture format.
static INLINE void sample_1d_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], GLfloat rgba[4])
 Return the texture sample for coordinate (s) using GL_NEAREST filter.
static INLINE void sample_1d_linear (GLcontext *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], GLfloat rgba[4])
 Return the texture sample for coordinate (s) using GL_LINEAR filter.
static void sample_1d_nearest_mipmap_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_1d_linear_mipmap_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_1d_nearest_mipmap_linear (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_1d_linear_mipmap_linear (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_nearest_1d (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 1D texture, nearest filtering for both min/magnification.
static void sample_linear_1d (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 1D texture, linear filtering for both min/magnification.
static void sample_lambda_1d (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 1D texture, using lambda to choose between min/magnification.
static INLINE void sample_2d_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], GLfloat rgba[])
 Return the texture sample for coordinate (s,t) using GL_NEAREST filter.
static INLINE void sample_2d_linear (GLcontext *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], GLfloat rgba[])
 Return the texture sample for coordinate (s,t) using GL_LINEAR filter.
static INLINE void sample_2d_linear_repeat (GLcontext *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], GLfloat rgba[])
 As above, but we know WRAP_S == REPEAT and WRAP_T == REPEAT.
static void sample_2d_nearest_mipmap_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_2d_linear_mipmap_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_2d_nearest_mipmap_linear (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_2d_linear_mipmap_linear (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_2d_linear_mipmap_linear_repeat (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_nearest_2d (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 2D texture, nearest filtering for both min/magnification.
static void sample_linear_2d (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 2D texture, linear filtering for both min/magnification.
static void opt_sample_rgb_2d (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Optimized 2-D texture sampling: S and T wrap mode == GL_REPEAT GL_NEAREST min/mag filter No border, RowStride == Width, Format = GL_RGB.
static void opt_sample_rgba_2d (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Optimized 2-D texture sampling: S and T wrap mode == GL_REPEAT GL_NEAREST min/mag filter No border RowStride == Width, Format = GL_RGBA.
static void sample_lambda_2d (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 2D texture, using lambda to choose between min/magnification.
static INLINE void sample_3d_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], GLfloat rgba[4])
 Return the texture sample for coordinate (s,t,r) using GL_NEAREST filter.
static void sample_3d_linear (GLcontext *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], GLfloat rgba[4])
 Return the texture sample for coordinate (s,t,r) using GL_LINEAR filter.
static void sample_3d_nearest_mipmap_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_3d_linear_mipmap_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_3d_nearest_mipmap_linear (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_3d_linear_mipmap_linear (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_nearest_3d (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 3D texture, nearest filtering for both min/magnification.
static void sample_linear_3d (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 3D texture, linear filtering for both min/magnification.
static void sample_lambda_3d (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 3D texture, using lambda to choose between min/magnification.
static struct gl_texture_image ** choose_cube_face (const struct gl_texture_object *texObj, const GLfloat texcoord[4], GLfloat newCoord[4])
 Choose one of six sides of a texture cube map given the texture coord (rx,ry,rz).
static void sample_nearest_cube (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_linear_cube (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_cube_nearest_mipmap_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_cube_linear_mipmap_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_cube_nearest_mipmap_linear (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_cube_linear_mipmap_linear (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_lambda_cube (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample cube texture, using lambda to choose between min/magnification.
static void sample_nearest_rect (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_linear_rect (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_lambda_rect (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample Rect texture, using lambda to choose between min/magnification.
static void sample_2d_array_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], GLfloat rgba[4])
 Return the texture sample for coordinate (s,t,r) using GL_NEAREST filter.
static void sample_2d_array_linear (GLcontext *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], GLfloat rgba[4])
 Return the texture sample for coordinate (s,t,r) using GL_LINEAR filter.
static void sample_2d_array_nearest_mipmap_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_2d_array_linear_mipmap_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_2d_array_nearest_mipmap_linear (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_2d_array_linear_mipmap_linear (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_nearest_2d_array (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 2D Array texture, nearest filtering for both min/magnification.
static void sample_linear_2d_array (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 2D Array texture, linear filtering for both min/magnification.
static void sample_lambda_2d_array (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 2D Array texture, using lambda to choose between min/magnification.
static void sample_1d_array_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], GLfloat rgba[4])
 Return the texture sample for coordinate (s,t,r) using GL_NEAREST filter.
static void sample_1d_array_linear (GLcontext *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], GLfloat rgba[4])
 Return the texture sample for coordinate (s,t,r) using GL_LINEAR filter.
static void sample_1d_array_nearest_mipmap_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_1d_array_linear_mipmap_nearest (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_1d_array_nearest_mipmap_linear (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_1d_array_linear_mipmap_linear (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4])
static void sample_nearest_1d_array (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 1D Array texture, nearest filtering for both min/magnification.
static void sample_linear_1d_array (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 1D Array texture, linear filtering for both min/magnification.
static void sample_lambda_1d_array (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 Sample 1D Array texture, using lambda to choose between min/magnification.
static INLINE GLfloat shadow_compare (GLenum function, GLfloat coord, GLfloat depthSample, GLfloat ambient)
 Compare texcoord against depth sample.
static INLINE GLfloat shadow_compare4 (GLenum function, GLfloat coord, GLfloat depth00, GLfloat depth01, GLfloat depth10, GLfloat depth11, GLfloat ambient, GLfloat wi, GLfloat wj)
 Compare texcoord against four depth samples.
static void sample_depth_texture (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat texel[][4])
 Sample a shadow/depth texture.
static void null_sample_func (GLcontext *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4])
 We use this function when a texture object is in an "incomplete" state.
texture_sample_func _swrast_choose_texture_sample_func (GLcontext *ctx, const struct gl_texture_object *t)
 Choose the texture sampling function for the given texture object.


Define Documentation

#define FRAC (  )     ((f) - IFLOOR(f))

#define I0BIT   1

#define I1BIT   2

#define J0BIT   4

#define J1BIT   8

#define K0BIT   16

#define K1BIT   32

#define LERP ( T,
A,
 )     ( (A) + (T) * ((B) - (A)) )

Linear interpolation macro.

#define REMAINDER ( A,
 )     (((A) + (B) * 1024) % (B))

If A is a signed integer, A % B doesn't give the right value for A < 0 (in terms of texture repeat).

Just casting to unsigned fixes that.


Function Documentation

texture_sample_func _swrast_choose_texture_sample_func ( GLcontext ctx,
const struct gl_texture_object t 
)

Choose the texture sampling function for the given texture object.

static struct gl_texture_image** choose_cube_face ( const struct gl_texture_object texObj,
const GLfloat  texcoord[4],
GLfloat  newCoord[4] 
) [static, read]

Choose one of six sides of a texture cube map given the texture coord (rx,ry,rz).

Return pointer to corresponding array of texture images.

static INLINE void clamp_rect_coord_linear ( GLenum  wrapMode,
GLfloat  coord,
GLint  max,
GLint *  i0out,
GLint *  i1out,
GLfloat *  weight 
) [static]

As above, but GL_LINEAR filtering.

static INLINE GLint clamp_rect_coord_nearest ( GLenum  wrapMode,
GLfloat  coord,
GLint  max 
) [static]

Do clamp/wrap for a texture rectangle coord, GL_NEAREST filter mode.

static INLINE void compute_min_mag_ranges ( const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  lambda[],
GLuint *  minStart,
GLuint *  minEnd,
GLuint *  magStart,
GLuint *  magEnd 
) [static]

The lambda[] array values are always monotonic.

Either the whole span will be minified, magnified, or split between the two. This function determines the subranges in [0, n-1] that are to be minified or magnified.

static INLINE void get_border_color ( const struct gl_texture_object tObj,
const struct gl_texture_image img,
GLfloat  rgba[4] 
) [static]

When we sample the border color, it must be interpreted according to the base texture format.

Ex: if the texture base format it GL_ALPHA, we return (0,0,0,BorderAlpha).

static INLINE GLfloat lerp_2d ( GLfloat  a,
GLfloat  b,
GLfloat  v00,
GLfloat  v10,
GLfloat  v01,
GLfloat  v11 
) [static]

Do 2D/biliner interpolation of float values.

v00, v10, v01 and v11 are typically four texture samples in a square/box. a and b are the horizontal and vertical interpolants. It's important that this function is inlined when compiled with optimization! If we find that's not true on some systems, convert to a macro.

static INLINE GLfloat lerp_3d ( GLfloat  a,
GLfloat  b,
GLfloat  c,
GLfloat  v000,
GLfloat  v100,
GLfloat  v010,
GLfloat  v110,
GLfloat  v001,
GLfloat  v101,
GLfloat  v011,
GLfloat  v111 
) [static]

Do 3D/trilinear interpolation of float values.

See also:
lerp_2d

static INLINE void lerp_rgba ( GLfloat  result[4],
GLfloat  t,
const GLfloat  a[4],
const GLfloat  b[4] 
) [static]

Do linear interpolation of colors.

static INLINE void lerp_rgba_2d ( GLfloat  result[4],
GLfloat  a,
GLfloat  b,
const GLfloat  t00[4],
const GLfloat  t10[4],
const GLfloat  t01[4],
const GLfloat  t11[4] 
) [static]

Do bilinear interpolation of colors.

static INLINE void lerp_rgba_3d ( GLfloat  result[4],
GLfloat  a,
GLfloat  b,
GLfloat  c,
const GLfloat  t000[4],
const GLfloat  t100[4],
const GLfloat  t010[4],
const GLfloat  t110[4],
const GLfloat  t001[4],
const GLfloat  t101[4],
const GLfloat  t011[4],
const GLfloat  t111[4] 
) [static]

Do trilinear interpolation of colors.

static INLINE GLint linear_mipmap_level ( const struct gl_texture_object tObj,
GLfloat  lambda 
) [static]

For linear interpolation between mipmap levels N and N+1, this function computes N.

static INLINE void linear_repeat_texel_location ( GLuint  size,
GLfloat  s,
GLint *  i0,
GLint *  i1,
GLfloat *  weight 
) [static]

static INLINE void linear_texcoord ( const struct gl_texture_object texObj,
const GLfloat  texcoord[4],
GLint *  i0,
GLint *  i1,
GLint *  j0,
GLint *  j1,
GLint *  slice,
GLfloat *  wi,
GLfloat *  wj 
) [static]

Compute linear integer texcoords for given texobj and coordinate.

static INLINE void linear_texel_locations ( GLenum  wrapMode,
const struct gl_texture_image img,
GLint  size,
GLfloat  s,
GLint *  i0,
GLint *  i1,
GLfloat *  weight 
) [static]

Used to compute texel locations for linear sampling.

Input: wrapMode = GL_REPEAT, GL_CLAMP, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_BORDER s = texcoord in [0,1] size = width (or height or depth) of texture Output: i0, i1 = returns two nearest texel indexes weight = returns blend factor between texels

static INLINE GLint nearest_mipmap_level ( const struct gl_texture_object tObj,
GLfloat  lambda 
) [static]

Compute the nearest mipmap level to take texels from.

static INLINE void nearest_texcoord ( const struct gl_texture_object texObj,
const GLfloat  texcoord[4],
GLint *  i,
GLint *  j,
GLint *  k 
) [static]

Compute nearest integer texcoords for given texobj and coordinate.

static INLINE GLint nearest_texel_location ( GLenum  wrapMode,
const struct gl_texture_image img,
GLint  size,
GLfloat  s 
) [static]

Used to compute texel location for nearest sampling.

static void null_sample_func ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

We use this function when a texture object is in an "incomplete" state.

When a fragment program attempts to sample an incomplete texture we return black (see issue 23 in GL_ARB_fragment_program spec). Note: fragment programs don't observe the texture enable/disable flags.

static void opt_sample_rgb_2d ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Optimized 2-D texture sampling: S and T wrap mode == GL_REPEAT GL_NEAREST min/mag filter No border, RowStride == Width, Format = GL_RGB.

static void opt_sample_rgba_2d ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Optimized 2-D texture sampling: S and T wrap mode == GL_REPEAT GL_NEAREST min/mag filter No border RowStride == Width, Format = GL_RGBA.

static void sample_1d_array_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
const struct gl_texture_image img,
const GLfloat  texcoord[4],
GLfloat  rgba[4] 
) [static]

Return the texture sample for coordinate (s,t,r) using GL_LINEAR filter.

static void sample_1d_array_linear_mipmap_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_1d_array_linear_mipmap_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_1d_array_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
const struct gl_texture_image img,
const GLfloat  texcoord[4],
GLfloat  rgba[4] 
) [static]

Return the texture sample for coordinate (s,t,r) using GL_NEAREST filter.

static void sample_1d_array_nearest_mipmap_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_1d_array_nearest_mipmap_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static INLINE void sample_1d_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
const struct gl_texture_image img,
const GLfloat  texcoord[4],
GLfloat  rgba[4] 
) [static]

Return the texture sample for coordinate (s) using GL_LINEAR filter.

static void sample_1d_linear_mipmap_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_1d_linear_mipmap_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static INLINE void sample_1d_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
const struct gl_texture_image img,
const GLfloat  texcoord[4],
GLfloat  rgba[4] 
) [static]

Return the texture sample for coordinate (s) using GL_NEAREST filter.

static void sample_1d_nearest_mipmap_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_1d_nearest_mipmap_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_2d_array_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
const struct gl_texture_image img,
const GLfloat  texcoord[4],
GLfloat  rgba[4] 
) [static]

Return the texture sample for coordinate (s,t,r) using GL_LINEAR filter.

static void sample_2d_array_linear_mipmap_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_2d_array_linear_mipmap_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_2d_array_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
const struct gl_texture_image img,
const GLfloat  texcoord[4],
GLfloat  rgba[4] 
) [static]

Return the texture sample for coordinate (s,t,r) using GL_NEAREST filter.

static void sample_2d_array_nearest_mipmap_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_2d_array_nearest_mipmap_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static INLINE void sample_2d_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
const struct gl_texture_image img,
const GLfloat  texcoord[4],
GLfloat  rgba[] 
) [static]

Return the texture sample for coordinate (s,t) using GL_LINEAR filter.

New sampling code contributed by Lynn Quam <quam@ai.sri.com>.

static void sample_2d_linear_mipmap_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_2d_linear_mipmap_linear_repeat ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_2d_linear_mipmap_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static INLINE void sample_2d_linear_repeat ( GLcontext ctx,
const struct gl_texture_object tObj,
const struct gl_texture_image img,
const GLfloat  texcoord[4],
GLfloat  rgba[] 
) [static]

As above, but we know WRAP_S == REPEAT and WRAP_T == REPEAT.

We don't have to worry about the texture border.

static INLINE void sample_2d_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
const struct gl_texture_image img,
const GLfloat  texcoord[4],
GLfloat  rgba[] 
) [static]

Return the texture sample for coordinate (s,t) using GL_NEAREST filter.

static void sample_2d_nearest_mipmap_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_2d_nearest_mipmap_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_3d_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
const struct gl_texture_image img,
const GLfloat  texcoord[4],
GLfloat  rgba[4] 
) [static]

Return the texture sample for coordinate (s,t,r) using GL_LINEAR filter.

static void sample_3d_linear_mipmap_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_3d_linear_mipmap_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static INLINE void sample_3d_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
const struct gl_texture_image img,
const GLfloat  texcoord[4],
GLfloat  rgba[4] 
) [static]

Return the texture sample for coordinate (s,t,r) using GL_NEAREST filter.

static void sample_3d_nearest_mipmap_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_3d_nearest_mipmap_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_cube_linear_mipmap_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_cube_linear_mipmap_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_cube_nearest_mipmap_linear ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_cube_nearest_mipmap_nearest ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoord[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_depth_texture ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  texel[][4] 
) [static]

Sample a shadow/depth texture.

static void sample_lambda_1d ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 1D texture, using lambda to choose between min/magnification.

static void sample_lambda_1d_array ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 1D Array texture, using lambda to choose between min/magnification.

static void sample_lambda_2d ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 2D texture, using lambda to choose between min/magnification.

static void sample_lambda_2d_array ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 2D Array texture, using lambda to choose between min/magnification.

static void sample_lambda_3d ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 3D texture, using lambda to choose between min/magnification.

static void sample_lambda_cube ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample cube texture, using lambda to choose between min/magnification.

static void sample_lambda_rect ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample Rect texture, using lambda to choose between min/magnification.

static void sample_linear_1d ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 1D texture, linear filtering for both min/magnification.

static void sample_linear_1d_array ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 1D Array texture, linear filtering for both min/magnification.

static void sample_linear_2d ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 2D texture, linear filtering for both min/magnification.

static void sample_linear_2d_array ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 2D Array texture, linear filtering for both min/magnification.

static void sample_linear_3d ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 3D texture, linear filtering for both min/magnification.

static void sample_linear_cube ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_linear_rect ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_nearest_1d ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 1D texture, nearest filtering for both min/magnification.

static void sample_nearest_1d_array ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 1D Array texture, nearest filtering for both min/magnification.

static void sample_nearest_2d ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 2D texture, nearest filtering for both min/magnification.

static void sample_nearest_2d_array ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 2D Array texture, nearest filtering for both min/magnification.

static void sample_nearest_3d ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

Sample 3D texture, nearest filtering for both min/magnification.

static void sample_nearest_cube ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static void sample_nearest_rect ( GLcontext ctx,
const struct gl_texture_object tObj,
GLuint  n,
const GLfloat  texcoords[][4],
const GLfloat  lambda[],
GLfloat  rgba[][4] 
) [static]

static INLINE GLfloat shadow_compare ( GLenum  function,
GLfloat  coord,
GLfloat  depthSample,
GLfloat  ambient 
) [static]

Compare texcoord against depth sample.

Return 1.0 or the ambient value.

static INLINE GLfloat shadow_compare4 ( GLenum  function,
GLfloat  coord,
GLfloat  depth00,
GLfloat  depth01,
GLfloat  depth10,
GLfloat  depth11,
GLfloat  ambient,
GLfloat  wi,
GLfloat  wj 
) [static]

Compare texcoord against four depth samples.


Generated on Sun Sep 27 06:48:05 2009 for Mesa Software Rasterization (swrast) by  doxygen 1.5.4