gSPObjRenderMode [Macro]
Function
gSPObjRenderMode
Changes the object rendering mode in the RSP
Syntax
#include <ultra64.h> /* gs2dex.h */
gSPObjRenderMode(Gfx *gdl, u32 mode)
gsSPObjRenderMode( u32 mode)
Arguments
- gdl
- the pointer to the display list.
- mode
- the object rendering mode:
- G_OBJRM_NOTXCLAMP (Do not perform clamping)
- G_OBJRM_BILERP (Correct when bilinear interpolation is performed)
- G_OBJRM_SHRINKSIZE_1 (Trim 0.5 texel off drawn image)
- G_OBJRM_SHRINKSIZE_2 (Trim 1.0 texel off drawn image)
- G_OBJRM_WIDEN (Enlarge drawn image by 3/8 texel)
Description
Changes the object rendering mode in the RSP. Normally, the object rendering mode is set according to the screen mode. The RDP has various rendering modes for drawing sprites or backgrounds (BG). For information about these object rendering modes, refer to the "4.4 Object render mode settings" in the Readme file of the latest version of the S2DEX microcode.
Multiple modes can be specified for mode with a bit sum of the following flags. However, note that G_OBJRM_SHRINKSIZE_1 and G_OBJRM_SHRINKSIZE2 cannot be specified at the same time.
- G_OBJRM_NOTXCLAMP
- Specifies that no clamping be performed in the RSP. When a texture is fixed to a sprite, the following relationships hold for the texture size (imageW, imageH), scale values (scaleW, scaleH) and sprite size (objW, objH)
-
- objW = imageW / scaleW;
- objH = imageH / scaleH;
-
- When the texture is fixed to the sprite, the region of the texture from texture coordinates (0, 0) to (imageW-1, imageH-1) is drawn on the sprite. However, due to calculation errors, a little texture outside of this range may be displayed at the periphery of the sprite. To prevent this, the RSP performs clamping outside of the range where the texture is to be drawn. For information about clamping, see Section 13 "Texture Mapping" in the N64 Programming Manual.
- G_OBJRM_BILERP
- Corrects for the 0.5 slippage of the texture that occurs when bilinear interpolation is performed. When clamping is turned on, the RSP uses the bilinear interpolation feature and supports subpixel-unit movements of the internal images. This enables a sprite to be moved in 1/4-pixel units.
- G_OBJRM_SHRINKSIZE_1
- Draws texture image for which the perimeter has been pared down by 0.5 texel. When a number of bilinearly interpolated sprites are to be aligned and handled as one large bilinearly interpolated sprite, the continuity of the image at the boundaries becomes a problem. To ensure image continuity, you must overlap the textures of the individual sprites by one line each. This makes the 0.5 texel at the periphery (the colored portion in the figure below) unnecessary because the neighboring sprite takes care of this part. Although each texture image is reduced in size by 0.5 texel, the upper-left screen coordinate does not change, and the drawing result will be as shown in the figure below.
- G_OBJRM_SHRINKSIZE_2
- This mode works the same as G_OBJRM_SHRINKSIZE_1, but doubles the scale of image reduction (pares 1 texel around the periphery). It is used when the texels of adjacent sprites are overlapped by two lines each to maintain continuity when subpixel processing is performed.
- G_OBJRM_WIDEN
- Enlarges the drawn image by 3/8 pixel in the positive S and T directions. This mode is used to prevent blank space from opening up at the seams when a large rotating object is displayed from texture memory (TMEM) by combining sprites. This mode is effective when combining and drawing opaque sprites. It is unnecessary for translucent sprites because the seams are filled by processing by the blender (BL).
Note
When drawing sprites, use the following RDP rendering modes:
- * When antialiasing is off:
- <Opaque sprites>
- G_RM_SPRITE
- G_RM_SPRITE2
- <Translucent>
- G_RM_XLU_SPRITE
- G_RM_XLU_SPRITE2
- * When antialiasing is on:
- <Opaque sprites>
- G_RM_AA_SPRITE/G_RM_RA_SPRITE
- G_RM_AA_SPRITE2/G_RM_RA_SPRITE2
- <Translucent>
- G_RM_AA_XLU_SPRITE
- G_RM_AA_XLU_SPRITE2
When two sprites overlap, the edge of the bottom sprite may affect the edge of the top sprite. Since this cannot be avoided, use G_RM_XLU_SPRITE if this bothers you.
See Also
gDPSetRenderMode
Revision History
02/01/99 Entirely revised.