| |
| 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. |