Blame | Last modification | View Log | RSS feed
NOTE:
These files are incomplete. They do not yet form a working
implementation of hte concepts discused below.
OVERVIEW
The t_dd_imm_* files form a set of templates to produce driver -
specific software tnl modules for a small subset of transformation and
lighting states.
The approach is quite different to the large vertex buffers of the
src/tnl module, and is based around a cache of four recent vertices
and a 'current' vertex which is updated directly from the Color,
Normal, Texcoord, SecondaryColor and Fog entrypoints.
The current vertex is actually a composite of the ctx->Current values
and a partial hardware vertex maintained where the hardware values
differ from those in ctx->Current. For example, clamped color values
are kept in the hardware vertex, while texcoords remain in
ctx->Current.
A crude diagram:
+--------------+ +-------------------+
| ctx->Current | | Current-HW-vertex |
+--------------+ +-------------------+
\ /
\ /
\ /
\ /
--------- --------
| |
v v
+--------+ +--------+ +--------+ +--------+
| vert-0 | | vert-1 | | vert-2 | | vert-3 |
+--------+ +--------+ +--------+ +--------+
|
|
v
DMA
Here values from ctx->Current and current-HW-vertex are merged to
build vert-2, which is then dumped to hardware (DMA). A state machine
determines which vertex is built in turn, and how the vertices are
used to present primitives to hardware. These actions all occur
during a call to Vertex{234}f{v}.
Each vert-n includes clip coordinates and a clipmask in addition to
the hardware (window) coordinates. This information allows clipping
to take place directly on these vertices, if need be.
t_dd_imm_capi.h
Color{34}{fub}{v}() implementations. These update both
ctx->Current (unclamped float colors) and current-HW-vertex
with hardware-specific color values (typically unsigned
bytes).
When lighting is enabled, the functions from src/api_noop.c
should be used, which just update ctx->Current. (The
current-hw-vertex colors are produced from lighting, which is
keyed to Normal3f).
t_dd_imm_vb.c
Support functions for clipping and fallback. See
t_dd_imm_primtmp.h.
t_dd_imm_napi.c
t_dd_imm_napi.h
Versions of Normal3f{v} to perform lighting with one or more
infinite lights. Updates ctx->Current.Normal and the current
HW colors.
When lighting is disabled, use the functions from api_noop.c
instead.
t_dd_imm_primtmp.h
State machine to control emission of vertices and primitives
to hardware. Called indirectly from Vertex{234}f{v}. Capable
of supporting hardware strip and fan primitives, and of
decomposing to discreet primitives for clipping or fallback,
or where the native primitive is unavailable.
t_dd_imm_tapi.h
Implementations of TexCoord{v} and MultiTexCoord4f{v}ARB to
fire a callback when transitioning to projective texture.
Most drivers will need to change vertex format at this point,
some may need to enable a software rasterization fallback.
t_dd_imm_vapi.h
Implementations of Vertex{234}f{v}. These perform
transformation and cliptesting on their arguments, then jump
into the state machine implemented in primtmp.h.
t_dd_imm_vertex.h
Support functions for building and clip-interpolating hardware
vertices. Called from primtmp.h.
Keith Whitwell, June 2001.