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

s_blend.c File Reference


Detailed Description

software blending.

Author:
Brian Paul
Only a few blend modes have been optimized (min, max, transparency, add) more optimized cases can easily be added if needed. Celestia uses glBlendFunc(GL_SRC_ALPHA, GL_ONE), for example.

#include "main/glheader.h"
#include "main/context.h"
#include "main/colormac.h"
#include "main/macros.h"
#include "s_blend.h"
#include "s_context.h"
#include "s_span.h"

Defines

#define _BLENDAPI
#define DIV255(X)   (divtemp = (X), ((divtemp << 8) + divtemp + 256) >> 16)
 Integer divide by 255 Declare "int divtemp" before using.

Functions

static void _BLENDAPI blend_noop (GLcontext *ctx, GLuint n, const GLubyte mask[], GLvoid *src, const GLvoid *dst, GLenum chanType)
 Special case for glBlendFunc(GL_ZERO, GL_ONE).
static void _BLENDAPI blend_replace (GLcontext *ctx, GLuint n, const GLubyte mask[], GLvoid *src, const GLvoid *dst, GLenum chanType)
 Special case for glBlendFunc(GL_ONE, GL_ZERO) Any chanType ok.
static void _BLENDAPI blend_transparency_ubyte (GLcontext *ctx, GLuint n, const GLubyte mask[], GLvoid *src, const GLvoid *dst, GLenum chanType)
 Common transparency blending mode: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA).
static void _BLENDAPI blend_transparency_ushort (GLcontext *ctx, GLuint n, const GLubyte mask[], GLvoid *src, const GLvoid *dst, GLenum chanType)
static void _BLENDAPI blend_transparency_float (GLcontext *ctx, GLuint n, const GLubyte mask[], GLvoid *src, const GLvoid *dst, GLenum chanType)
static void _BLENDAPI blend_add (GLcontext *ctx, GLuint n, const GLubyte mask[], GLvoid *src, const GLvoid *dst, GLenum chanType)
 Add src and dest: glBlendFunc(GL_ONE, GL_ONE).
static void _BLENDAPI blend_min (GLcontext *ctx, GLuint n, const GLubyte mask[], GLvoid *src, const GLvoid *dst, GLenum chanType)
 Blend min function.
static void _BLENDAPI blend_max (GLcontext *ctx, GLuint n, const GLubyte mask[], GLvoid *src, const GLvoid *dst, GLenum chanType)
 Blend max function.
static void _BLENDAPI blend_modulate (GLcontext *ctx, GLuint n, const GLubyte mask[], GLvoid *src, const GLvoid *dst, GLenum chanType)
 Modulate: result = src * dest Any chanType ok.
static void blend_general_float (GLcontext *ctx, GLuint n, const GLubyte mask[], GLfloat rgba[][4], GLfloat dest[][4], GLenum chanType)
 Do any blending operation, using floating point.
static void blend_general (GLcontext *ctx, GLuint n, const GLubyte mask[], void *src, const void *dst, GLenum chanType)
 Do any blending operation, any chanType.
void _swrast_choose_blend_func (GLcontext *ctx, GLenum chanType)
 Analyze current blending parameters to pick fastest blending function.
void _swrast_blend_span (GLcontext *ctx, struct gl_renderbuffer *rb, SWspan *span)
 Apply the blending operator to a span of pixels.


Define Documentation

#define _BLENDAPI

#define DIV255 (  )     (divtemp = (X), ((divtemp << 8) + divtemp + 256) >> 16)

Integer divide by 255 Declare "int divtemp" before using.

This satisfies Glean and should be reasonably fast. Contributed by Nathan Hand.


Function Documentation

void _swrast_blend_span ( GLcontext ctx,
struct gl_renderbuffer rb,
SWspan span 
)

Apply the blending operator to a span of pixels.

We can handle horizontal runs of pixels (spans) or arrays of x/y pixel coordinates.

void _swrast_choose_blend_func ( GLcontext ctx,
GLenum  chanType 
)

Analyze current blending parameters to pick fastest blending function.

Result: the ctx->Color.BlendFunc pointer is updated.

static void _BLENDAPI blend_add ( GLcontext ctx,
GLuint  n,
const GLubyte  mask[],
GLvoid *  src,
const GLvoid *  dst,
GLenum  chanType 
) [static]

Add src and dest: glBlendFunc(GL_ONE, GL_ONE).

Any chanType ok.

static void blend_general ( GLcontext ctx,
GLuint  n,
const GLubyte  mask[],
void *  src,
const void *  dst,
GLenum  chanType 
) [static]

Do any blending operation, any chanType.

static void blend_general_float ( GLcontext ctx,
GLuint  n,
const GLubyte  mask[],
GLfloat  rgba[][4],
GLfloat  dest[][4],
GLenum  chanType 
) [static]

Do any blending operation, using floating point.

Parameters:
n number of pixels
mask fragment writemask array
rgba array of incoming (and modified) pixels
dest array of pixels from the dest color buffer

static void _BLENDAPI blend_max ( GLcontext ctx,
GLuint  n,
const GLubyte  mask[],
GLvoid *  src,
const GLvoid *  dst,
GLenum  chanType 
) [static]

Blend max function.

Any chanType ok.

static void _BLENDAPI blend_min ( GLcontext ctx,
GLuint  n,
const GLubyte  mask[],
GLvoid *  src,
const GLvoid *  dst,
GLenum  chanType 
) [static]

Blend min function.

Any chanType ok.

static void _BLENDAPI blend_modulate ( GLcontext ctx,
GLuint  n,
const GLubyte  mask[],
GLvoid *  src,
const GLvoid *  dst,
GLenum  chanType 
) [static]

Modulate: result = src * dest Any chanType ok.

static void _BLENDAPI blend_noop ( GLcontext ctx,
GLuint  n,
const GLubyte  mask[],
GLvoid *  src,
const GLvoid *  dst,
GLenum  chanType 
) [static]

Special case for glBlendFunc(GL_ZERO, GL_ONE).

No-op means the framebuffer values remain unchanged. Any chanType ok.

static void _BLENDAPI blend_replace ( GLcontext ctx,
GLuint  n,
const GLubyte  mask[],
GLvoid *  src,
const GLvoid *  dst,
GLenum  chanType 
) [static]

Special case for glBlendFunc(GL_ONE, GL_ZERO) Any chanType ok.

static void _BLENDAPI blend_transparency_float ( GLcontext ctx,
GLuint  n,
const GLubyte  mask[],
GLvoid *  src,
const GLvoid *  dst,
GLenum  chanType 
) [static]

static void _BLENDAPI blend_transparency_ubyte ( GLcontext ctx,
GLuint  n,
const GLubyte  mask[],
GLvoid *  src,
const GLvoid *  dst,
GLenum  chanType 
) [static]

Common transparency blending mode: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA).

static void _BLENDAPI blend_transparency_ushort ( GLcontext ctx,
GLuint  n,
const GLubyte  mask[],
GLvoid *  src,
const GLvoid *  dst,
GLenum  chanType 
) [static]


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