N64® Functions Menu
|
al - Audio Library Functions
gDP - DP GBI Macros
gdSP - General GBI Macros
gSP - SP GBI Macros
gt - Turbo Microcode RDP
gu - Graphics Utilities
Math - Math Functions
nuSys - NuSystem
os - N64 Operating System
sp - Sprite Library Functions
uh - Host to Target IO
64DD - N64 Disk Drive
|
|
gDPLoadTexture
and other texture loading macros
Format
#include "gbi.h"
gDPLoadTextureBlock(Gfx *gdl,
unsigned int timg,
unsigned int fmt,
unsigned int siz,
unsigned int width, height,
unsigned int pal,
unsigned int cms, cmt,
unsigned int masks, maskt,
unsigned int shifts, shiftt )
gDPLoadTextureBlock_4b(Gfx *gdl,
unsigned int timg,
unsigned int fmt,
unsigned int width, height,
unsigned int pal,
unsigned int cms, cmt,
unsigned int masks, maskt,
unsigned int shifts, shiftt )
gDPLoadTextureTile(Gfx *gdl,
unsigned int timg,
unsigned int fmt,
unsigned int siz,
unsigned int width, height,
unsigned int uls, ult, lrs, lrt,
unsigned int pal,
unsigned int cms, cmt,
unsigned int masks, maskt,
unsigned int shifts, shiftt )
gDPLoadTextureTile_4b(Gfx *gdl,
unsigned int timg,
unsigned int fmt,
unsigned int width, height,
unsigned int uls, ult, lrs, lrt,
unsigned int pal,
unsigned int cms, cmt,
unsigned int masks, maskt,
unsigned int shifts, shiftt )
gDPLoadBlock(Gfx *gdl,
unsigned int tile,
unsigned int uls,
unsigned int ult,
unsigned int lrs,
unsigned int dxt)
Arguments
- gdl is the pointer to the graphics display list
- timg is the location of the texture image in DRAM. It must be 64-bit aligned
- fmt is the texture image format (G_IM_FMT_RGBA, G_IM_FMT_YUV, G_IM_FMT_CI, G_IM_FMT_IA, G_IM_FMT_I)
- siz is the texel size (G_IM_SIZ_4b, G_IM_SIZ_8b, G_IM_SIZ_16b, G_IM_SIZ_32b)
- width, height specify the texture image width and height in texels. When you load a texture tile, specify the width and height of the original larger texture image in DRAM
- uls, ult specify the upper-left s and t coordinates of a texture tile in the source image
- lrs, lrt specify the lower-right s and t coordinates of a texture tile in the source image
- pal for indexed textures, this specifies which texture lookup table palette to use
- cms, cmt gives the clamp, wrap, and mirror flag for the s and t axis (G_TX_NOMIRROR, G_TX_WRAP, G_TX_MIRROR, G_TX_CLAMP)
- masks, maskt specify the mask for the s and t axis (G_TX_NOMASK or a number specifying where to wrap)
- shifts, shiftt gives the shift value for the s and t coordinates for lower level of detail textures. Use G_TX_NOLOD for no shifts
- tile is the tile number for gDPLoadBlock.
- dxt is the t increment value per scanline for gDPLoadBlock
What These Macros Do
These macros load texture images from DRAM to on-chip texture memory (TMEM) in the RDP. The following macros and macros are included:
- gDPLoadTextureBlock
- gDPLoadTextureBlock_4b
- gDPLoadTextureTile,
- gDPLoadTextureTile_4b
- gDPLoadBlock
In addition, there are is also a static version for each:
- gsDPLoadTextureBlock
- gsDPLoadTextureBlock_4b
- gsDPLoadTextureTile,
- gsDPLoadTextureTile_4b
- gsDPLoadBlock
The following Block macros load a texture image in a contiguous block of memory, which is the most efficient loading mechanism because DRAM transfers are most efficient in large blocks:
- gDPLoadTextureBlock, gsDPLoadTextureBlock
- gDPLoadTextureBlock_4b, gsDPLoadTextureBlock_4b
- gDPLoadBlock, gsDPLoadBlock
The following Tile macros load a subtile of a larger texture image from memory:
- gDPLoadTextureTile, gsDPLoadTextureTile
- gDPLoadTextureTile_4b, gsDPLoadTextureTile_4b
If you are counting GBI display list size to understand memory
requirements, you need to note that each of these macros is actually made up of several GBI commands. They are macros.
There are many texture image formats. The best choice depends on the
desired compression and on the content of the texture image. 4-bit, 8-bit,
16-bit, and 32-bit texel sizes are supported. Indexed 1/2/4 component textures are
supported. I is for intensity textures. IA is for intensity-alpha textures.
RGBA is for true-color textures. CI is for color-indexed textures.
When loading 4-bit textures, regardless of the type, use the macros that
have the suffix _4b. When using these macros, the size is implied and is
not included in the parameter list. 4-bit textures should be aligned on
byte boundaries.
The width and height are in texel space, indicating the size of the
source texture image in DRAM.
The upper-left and lower-right (s,t) coordinates are only used for tiled
texture loads. They specify (in texel space) the corners of the subtile to
load into TMEM.
The cms and cmt set clamp, mirror, and wrap flags for the s and t axes are bit OR'ed together to specify the desired texture
properties. Mirrored textures are useful on axial-aligned textures like
a tree. Clamped textures replicate the edge texel color when sampling
outside of the texture map. Wrapped textures require the proper mask be
set for wrapping. A number n in masks or maskt indicates (n) LSBs of the
s or t texel coordinate are used to sample the textures. If you have a
32x32 texture and want to wrap at the edge, use 5 for masks and maskt.
The shift values are used to shift s or t texel coordinates left or
right. This enables the proper sampling of lower LOD maps and detail
textures. There are many other steps necessary in making a MIP mapped
texture. Therefore, the shift values are often not used in these
macros.
There are alternative forms of the gDPLoadTextureBlock macros to support
the full range of possible widths and heights. These forms end in "S" to
indicate that the texture has been pre-swapped (that is, odd lines of
textures have been word swapped). See rgb2c for more information on the "S" flag.
When loading a texture tile, only the addresses of the four corner pixels of
the tile need to be byte-aligned. However, if the row width of the
tile is not 64-bit aligned, the hardware will automatically pad to 64-bit
alignment on the right of each row in the RDP on-chip texture memory. However, this
is only true for the LoadTextureTile macros.
The gDPLoadBlock and gsDPLoadBlock are low-level macros that usually should not
be used in programs. They load TMEM in a single transfer, but
have some restrictions. For example, the maximum number of texels that can be loaded
is 2048. T load all 4K of TMEM, you might need to load the texture as G_IM_SIZ_16b, and then change the tile to the proper texel size after the load. The gDPLoadTextureBlock macros already do this, but if you use this low-level macro directly, you will
need to handle the tile manipulation yourself.
The LoadBlock macros do not do any padding for you. You must pad the data
before doing the load block.
Additional texture macros are defined in the gbi.h header file; examine that file for details.
Caveats
See Appendix A of the Texture Mapping chapter in the N64 Programming
Manual for a list of restrictions on the gDPLoadTextureBlock macro that
you can easily work around by using the "S" form of these macros.
See Also
gDPLoadTLUT
guLoadTextureBlockMipMap
rgb2c
|
Nintendo® Confidential
Warning: all information in this document is confidential and covered by a non-disclosure agreement. You are responsible for keeping this information confidential and protected. Nintendo will vigorously enforce this responsibility.
Copyright © 1998
Nintendo of America Inc. All rights reserved Nintendo and N64 are registered trademarks of Nintendo
Last updated March 1998
|
|