TEV Configuration Guide

Here are some sample Texture Environment (TEV) settings.

One Rasterized Color

Polygons and Vertex Lighting with Applied Vertex Colors

This configuration passes rasterized color channel directly with the PASSCLR operation. No texture is used.

// One Rasterized Color
// The channel COLOR0A0 is supposed to have lit color.

GXSetNumTevStages(1);
GXSetTevOrder(
    GX_TEVSTAGE0,
    GX_TEXCOORD_NULL,
    GX_TEXMAP_NULL,
    GX_COLOR0A0 );
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);

One Texture

Simple Texture Mapping

This configuration is used for displaying texture color directly. No rasterized color can be used.

// One Texture
// A texture should be loaded to GX_TEXMAP0.
// An appropriate texcoord generation should be set to GX_TEXCOORD0.

GXSetNumTevStages(1);
GXSetTevOrder(
    GX_TEVSTAGE0,
    GX_TEXCOORD0,
    GX_TEXMAP0,
    GX_COLOR_NULL );
GXSetTevOp(GX_TEVSTAGE0, GX_REPLACE);

One Texture Modified by Rasterized Color

Applying Lighting to Material Textures

This configuration uses the MODULATE operation.

// One Texture Modulated by Rasterized Color
// The channel COLOR0A0 is supposed to have lit color.
// A texture should be loaded to GX_TEXMAP0.
// An appropriate texcoord generation should be set to GX_TEXCOORD0.

GXSetNumTevStages(1);
GXSetTevOrder(
    GX_TEVSTAGE0,
    GX_TEXCOORD0,
    GX_TEXMAP0,
    GX_COLOR0A0 );
GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE);

One Texture Overlaid on Rasterized Color

Highlight Map with a Diffuse Lit Surface
Projected Shadow Map on Lit Surface

This configuration uses the DECAL operation. The texture should contain an alpha value which will be used for blending.

// One Texture Modulated by Rasterized Color
// The channel COLOR0A0 is supposed to have lit color.
// A texture should be loaded to GX_TEXMAP0.
// An appropriate texcoord generation should be set to GX_TEXCOORD0.

GXSetNumTevStages(1);
GXSetTevOrder(
    GX_TEVSTAGE0,
    GX_TEXCOORD0,
    GX_TEXMAP0,
    GX_COLOR0A0 );
GXSetTevOp(GX_TEVSTAGE0, GX_DECAL);

Constant Color

This configuration uses neither the output from lighting unit nor any texture.

// Constant color from TEV register

GXSetNumTevStages(1);
GXSetTevOrder(
    GX_TEVSTAGE0,
    GX_TEXCOORD_NULL,
    GX_TEXMAP_NULL,
    GX_COLOR_NULL );
GXSetTevColorIn(  // output = Register0
    GX_TEVSTAGE0,
    GX_CC_ZERO,
    GX_CC_ZERO,
    GX_CC_ZERO,
    GX_CC_C0 );
GXSetTevColorOp(
    GX_TEVSTAGE0,
    GX_TEV_ADD,
    GX_TB_ZERO,
    GX_CS_SCALE_1,
    GX_DISABLE,
    GX_TEVPREV );
GXSetTevColor(GX_TEVREG0, constColor);

Add Two Rasterized Colors

Diffuse Lit Color + Specular Lit Color

No texture is used. The first stage passes the first rasterized color with the PASSCLR operation. The second stage adds two colors where a detailed setting is required.

// Add Two Rasterized Colors
// Two Color channels COLOR0/COLOR1 will be used.

GXSetNumTevStages(2);

// Stage0 simply passes the rasterized color.
GXSetTevOrder(
    GX_TEVSTAGE0,
    GX_TEXCOORD_NULL,
    GX_TEXMAP_NULL,
    GX_COLOR0A0 );
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);

// Stage1 adds the second color and output from previous stage.
GXSetTevOrder(
    GX_TEVSTAGE1,
    GX_TEXCOORD_NULL,
    GX_TEXMAP_NULL,
    GX_COLOR1A1);
GXSetTevColorIn(  // output = RASC + CPREV
    GX_TEVSTAGE1,
    GX_CC_ZERO,
    GX_CC_RASC,
    GX_CC_ONE,
    GX_CC_CPREV );
GXSetTevColorOp(
    GX_TEVSTAGE1,
    GX_TEV_ADD,
    GX_TB_ZERO,
    GX_CS_SCALE_1,
    GX_ENABLE,
    GX_TEVPREV );

Add Rasterized Color and Alpha

Diffuse Lit Color + Specular Lit Color with Alpha Channel Processing

If the specular color is white, the alpha channel can be used as a specular lit color which will be broadcasted to each RGB component for a TEV stage. Since it requires only one stage, better fill-rates are possible than when using two channels. This method is only available if the alpha is not reserved for another purpose.

// Add Rasterized Color and Alpha
// Color0/Alpha0 may be processed independently.

GXSetNumTevStages(1);
GXSetTevOrder(
    GX_TEVSTAGE0,
    GX_TEXCOORD_NULL,
    GX_TEXMAP_NULL,
    GX_COLOR0A0 );
GXSetTevColorIn(  // output = RASC + RASA
    GX_TEVSTAGE0,
    GX_CC_ZERO,
    GX_CC_RASA,
    GX_CC_ONE,
    GX_CC_RASC );
GXSetTevColorOp(
    GX_TEVSTAGE0,
    GX_TEV_ADD,
    GX_TB_ZERO,
    GX_CS_SCALE_1,
    GX_ENABLE,
    GX_TEVPREV );

Revision History

03/01/2006 Initial version.