1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<HTML> 3<HEAD> 4<META http-equiv="Content-Type" content="text/html; charset=windows-1252"> 5<META name="GENERATOR" content="Microsoft FrontPage 5.0"> 6<META http-equiv="Content-Style-Type" content="text/css"> 7<LINK rel="stylesheet" type="text/css" href="../../CSS/revolution.css"> 8<TITLE>GXInit</TITLE> 9</HEAD> 10<BODY> 11<H1 align="left">GXInit</H1> 12<H2>C Specification</H2> 13<DL> 14 <DD> 15 <PRE><CODE>#include <revolution/gx.h></CODE></PRE> 16 <DD> 17 <PRE><CODE>GXFifoObj* GXInit( void* base, u32 size )</CODE></PRE> 18</DL> 19<H2>Arguments</H2> 20<DIV align="left"> 21<TABLE border="1" cellpadding="3" cellspacing="0.1"> 22 <TBODY> 23 <TR> 24<TD width="120" bgcolor="#ffffe8"><CODE><STRONG><EM>base</EM></STRONG></CODE></TD> 25<TD width="520">a pointer to the FIFO memory <BR>32-byte aligned</TD> 26 </TR> 27 <TR> 28<TD width="120" bgcolor="#ffffe8"><CODE><STRONG><EM>size</EM></STRONG></CODE></TD> 29<TD width="520">memory size in bytes <BR>in 32-byte multiples</TD> 30 </TR> 31 </TBODY> 32</TABLE> 33</DIV> 34<H2>Return Values</H2> 35<P>Returns a pointer to the initialized <A href="../Structures/GXFifoObj.html"><CODE>GXFifoObj</CODE></A> structure.</P> 36<H2>Description</H2> 37<P>This function sets the default state of the graphics processor (GP). It should be called before any other GX functions. It sets up an immediate-mode method of communicating graphics commands from the CPU to the GP. It initializes a FIFO and attaches it to both the CPU and GP. The CPU writes commands to the FIFO and the GP reads them. <code>GXInit()</font>returns a pointer to the initialized FIFO. The application must allocate the memory for the FIFO. The argument <CODE><STRONG><EM>base</EM></STRONG></CODE> is a pointer to the allocated main memory and must be 32-B aligned. The parameter <CODE><STRONG><EM>size</EM></STRONG></CODE> is the size of the FIFO in bytes; it must be a multiple of 32B. Refer to the additional notes in <CODE><a href="../GfxFIFO/GXInitFifoBase.html">GXInitFIFOBase</a></CODE> for more information on FIFO memory.</P> 38<P>It's possible to override the default immediate-mode format and instead buffer the graphics for frame <em>n+1</em> while the GP is reading the graphics for frame <em>n</em>. See <a href="../GfxFIFO/GXSetCPUFifo.html"><code>GXSetCPUFifo</code></a> and <a href="../GfxFIFO/GXSetGPFifo.html"><code>GXSetGPFifo</code></a> for further information.</P> 39<P><code>GXInit</code> also designates the calling thread as the default GX thread. That is, it assumes the calling thread is responsible for generating graphics data. This thread will be the one suspended when the FIFO gets full. The current GX thread can be changed by calling <code><a href="../GfxFIFO/GXSetCurrentGXThread.html">GXSetCurrentGXThread</a></code>.</P> 40<H3>GXInit State Settings</H3> 41<P>The following code fragment describes the default state settings after calling <code>GXInit</code>.</P> 42<BLOCKQUOTE> 43<PRE><CODE>// Color definitions 44 45#define GX_DEFAULT_BG {64, 64, 64, 255} 46#define BLACK {0, 0, 0, 0} 47#define WHITE {255, 255, 255, 255} 48 49// 50// Render Mode 51// 52// (set 'rmode' based upon VIGetTvFormat(); code not shown) 53 54// 55// Geometry and Vertex 56// 57GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); 58GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, GX_IDENTITY); 59GXSetTexCoordGen(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_TEX2, GX_IDENTITY); 60GXSetTexCoordGen(GX_TEXCOORD3, GX_TG_MTX2x4, GX_TG_TEX3, GX_IDENTITY); 61GXSetTexCoordGen(GX_TEXCOORD4, GX_TG_MTX2x4, GX_TG_TEX4, GX_IDENTITY); 62GXSetTexCoordGen(GX_TEXCOORD5, GX_TG_MTX2x4, GX_TG_TEX5, GX_IDENTITY); 63GXSetTexCoordGen(GX_TEXCOORD6, GX_TG_MTX2x4, GX_TG_TEX6, GX_IDENTITY); 64GXSetTexCoordGen(GX_TEXCOORD7, GX_TG_MTX2x4, GX_TG_TEX7, GX_IDENTITY); 65GXSetNumTexGens(1); 66GXClearVtxDesc(); 67GXInvalidateVtxCache(); 68 69GXSetLineWidth(6, GX_TO_ZERO); 70GXSetPointSize(6, GX_TO_ZERO); 71GXEnableTexOffsets( GX_TEXCOORD0, GX_DISABLE, GX_DISABLE ); 72GXEnableTexOffsets( GX_TEXCOORD1, GX_DISABLE, GX_DISABLE ); 73GXEnableTexOffsets( GX_TEXCOORD2, GX_DISABLE, GX_DISABLE ); 74GXEnableTexOffsets( GX_TEXCOORD3, GX_DISABLE, GX_DISABLE ); 75GXEnableTexOffsets( GX_TEXCOORD4, GX_DISABLE, GX_DISABLE ); 76GXEnableTexOffsets( GX_TEXCOORD5, GX_DISABLE, GX_DISABLE ); 77GXEnableTexOffsets( GX_TEXCOORD6, GX_DISABLE, GX_DISABLE ); 78GXEnableTexOffsets( GX_TEXCOORD7, GX_DISABLE, GX_DISABLE ); 79 80// 81// Transformation and Matrix 82// 83// (initialize 'identity_mtx' to identity; code not shown) 84 85// Note: projection matrix is not initialized! 86GXLoadPosMtxImm(identity_mtx, GX_PNMTX0); 87GXLoadNrmMtxImm(identity_mtx, GX_PNMTX0); 88GXSetCurrentMtx(GX_PNMTX0); 89GXLoadTexMtxImm(identity_mtx, GX_IDENTITY, GX_MTX3x4); 90GXLoadTexMtxImm(identity_mtx, GX_PTIDENTITY, GX_MTX3x4); 91GXSetViewport(0.0F, // left 920.0F, // top 93(float)rmode->fbWidth, // width 94(float)rmode->xfbHeight, // height 950.0F, // nearz 961.0F); // farz 97 98// 99// Clipping and Culling 100// 101GXSetCoPlanar(GX_DISABLE); 102GXSetCullMode(GX_CULL_BACK); 103GXSetClipMode(GX_CLIP_ENABLE); 104GXSetScissor(0, 0, (u32)rmode->fbWidth, (u32)rmode->efbHeight); 105GXSetScissorBoxOffset(0, 0); 106 107// 108// Lighting - pass vertex color through 109// 110GXSetNumChans(0); // no colors by default 111 112GXSetChanCtrl( 113GX_COLOR0A0, 114GX_DISABLE, 115GX_SRC_REG, 116GX_SRC_VTX, 117GX_LIGHT_NULL, 118GX_DF_NONE, 119GX_AF_NONE ); 120 121GXSetChanAmbColor(GX_COLOR0A0, BLACK); 122GXSetChanMatColor(GX_COLOR0A0, WHITE); 123 124GXSetChanCtrl( 125GX_COLOR1A1, 126GX_DISABLE, 127GX_SRC_REG, 128GX_SRC_VTX, 129GX_LIGHT_NULL, 130GX_DF_NONE, 131GX_AF_NONE ); 132 133GXSetChanAmbColor(GX_COLOR1A1, BLACK); 134GXSetChanMatColor(GX_COLOR1A1, WHITE); 135 136// 137// Texture 138// 139GXInvalidateTexAll(); 140 141// Allocate 8 32k caches for RGBA texture mipmaps. 142// Equal size caches to support 32b RGBA textures. 143// 144// (code not shown) 145 146// Allocate color index caches in low bank of TMEM. 147// Each cache is 32kB. 148// Even and odd regions should be allocated on different address. 149// 150// (code not shown) 151 152// Allocate TLUTs, 16 256-entry TLUTs and 4 1K-entry TLUTs. 153// 256-entry TLUTs are 8kB, 1k-entry TLUTs are 32kB. 154// 155// (code not shown) 156 157// 158// Set texture region and tlut region Callbacks 159// 160GXSetTexRegionCallback(__GXDefaultTexRegionCallback); 161GXSetTlutRegionCallback(__GXDefaultTlutRegionCallback); 162 163// 164// Texture Environment 165// 166GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); 167GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR0A0); 168GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD2, GX_TEXMAP2, GX_COLOR0A0); 169GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD3, GX_TEXMAP3, GX_COLOR0A0); 170GXSetTevOrder(GX_TEVSTAGE4, GX_TEXCOORD4, GX_TEXMAP4, GX_COLOR0A0); 171GXSetTevOrder(GX_TEVSTAGE5, GX_TEXCOORD5, GX_TEXMAP5, GX_COLOR0A0); 172GXSetTevOrder(GX_TEVSTAGE6, GX_TEXCOORD6, GX_TEXMAP6, GX_COLOR0A0); 173GXSetTevOrder(GX_TEVSTAGE7, GX_TEXCOORD7, GX_TEXMAP7, GX_COLOR0A0); 174GXSetTevOrder(GX_TEVSTAGE8, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); 175GXSetTevOrder(GX_TEVSTAGE9, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); 176GXSetTevOrder(GX_TEVSTAGE10,GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); 177GXSetTevOrder(GX_TEVSTAGE11,GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); 178GXSetTevOrder(GX_TEVSTAGE12,GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); 179GXSetTevOrder(GX_TEVSTAGE13,GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); 180GXSetTevOrder(GX_TEVSTAGE14,GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); 181GXSetTevOrder(GX_TEVSTAGE15,GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); 182GXSetNumTevStages(1); 183GXSetTevOp(GX_TEVSTAGE0, GX_REPLACE); 184GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0); 185GXSetZTexture(GX_ZT_DISABLE, GX_TF_Z8, 0); 186 187for (i = GX_TEVSTAGE0; i < GX_MAX_TEVSTAGE; i++) { 188GXSetTevKColorSel((GXTevStageID) i, GX_TEV_KCSEL_1_4 ); 189GXSetTevKAlphaSel((GXTevStageID) i, GX_TEV_KASEL_1 ); 190GXSetTevSwapMode ((GXTevStageID) i, GX_TEV_SWAP0, GX_TEV_SWAP0 ); 191} 192GXSetTevSwapModeTable(GX_TEV_SWAP0, 193GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA); 194GXSetTevSwapModeTable(GX_TEV_SWAP1, 195GX_CH_RED, GX_CH_RED, GX_CH_RED, GX_CH_ALPHA); 196GXSetTevSwapModeTable(GX_TEV_SWAP2, 197GX_CH_GREEN, GX_CH_GREEN, GX_CH_GREEN, GX_CH_ALPHA); 198GXSetTevSwapModeTable(GX_TEV_SWAP3, 199GX_CH_BLUE, GX_CH_BLUE, GX_CH_BLUE, GX_CH_ALPHA); 200 201// Indirect Textures. 202for (i = GX_TEVSTAGE0; i < GX_MAX_TEVSTAGE; i++) { 203GXSetTevDirect((GXTevStageID) i); 204} 205GXSetNumIndStages(0); 206GXSetIndTexCoordScale( GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1 ); 207GXSetIndTexCoordScale( GX_INDTEXSTAGE1, GX_ITS_1, GX_ITS_1 ); 208GXSetIndTexCoordScale( GX_INDTEXSTAGE2, GX_ITS_1, GX_ITS_1 ); 209GXSetIndTexCoordScale( GX_INDTEXSTAGE3, GX_ITS_1, GX_ITS_1 ); 210 211// 212// Pixel Processing 213// 214GXSetFog(GX_FOG_NONE, 0.0F, 1.0F, 0.1F, 1.0F, BLACK); 215GXSetFogRangeAdj( GX_DISABLE, 0, 0 ); 216GXSetBlendMode(GX_BM_NONE, 217GX_BL_SRCALPHA, // src factor 218GX_BL_INVSRCALPHA, // dst factor 219GX_LO_CLEAR); 220GXSetColorUpdate(GX_ENABLE); 221GXSetAlphaUpdate(GX_ENABLE); 222GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); 223GXSetZCompLoc(GX_TRUE); // before texture 224GXSetDither(GX_ENABLE); 225GXSetDstAlpha(GX_DISABLE, 0); 226GXSetPixelFmt(GX_PF_RGB8_Z24, GX_ZC_LINEAR); 227GXSetFieldMask( GX_ENABLE, GX_ENABLE ); 228GXSetFieldMode((GXBool)(rmode->field_rendering), 229((rmode->viHeight == 2*rmode->xfbHeight) ? 230GX_ENABLE : GX_DISABLE)); 231 232// 233// Frame buffer 234// 235GXSetCopyClear(GX_DEFAULT_BG, GX_MAX_Z24); 236GXSetDispCopySrc(0, 0, rmode->fbWidth, rmode->efbHeight); 237GXSetDispCopyDst(rmode->fbWidth, rmode->efbHeight); 238GXSetDispCopyYScale((f32)(rmode->xfbHeight) / (f32)(rmode->efbHeight)); 239GXSetCopyClamp((GXFBClamp)(GX_CLAMP_TOP | GX_CLAMP_BOTTOM)); 240GXSetCopyFilter(rmode->aa, rmode->sample_pattern, GX_TRUE, rmode->vfilter); 241GXSetDispCopyGamma( GX_GM_1_0 ); 242GXSetDispCopyFrame2Field(GX_COPY_PROGRESSIVE); 243GXClearBoundingBox(); 244 245// 246// CPU direct EFB access 247// 248GXPokeColorUpdate(GX_TRUE); 249GXPokeAlphaUpdate(GX_TRUE); 250GXPokeDither(GX_FALSE); 251GXPokeBlendMode(GX_BM_NONE, GX_BL_ZERO, GX_BL_ONE, GX_LO_SET); 252GXPokeAlphaMode(GX_ALWAYS, 0); 253GXPokeAlphaRead(GX_READ_FF); 254GXPokeDstAlpha(GX_DISABLE, 0); 255GXPokeZMode(GX_TRUE, GX_ALWAYS, GX_TRUE); 256 257// 258// Performance Counters 259// 260GXSetGPMetric(GX_PERF0_NONE, GX_PERF1_NONE); 261GXClearGPMetric();</CODE></PRE> 262</BLOCKQUOTE> 263 264 265<H2>See Also</H2> 266<P><CODE><A href="../GfxFIFO/GXInitFifoBase.html">GXInitFIFOBase</A>,</FONT><A href="../GfxFIFO/GXSetCPUFifo.html">GXSetCPUFifo</A>, <A href="../GfxFIFO/GXSetCPUFifo.html">GXSetGPFifo</A>, <A href="../GfxFIFO/GXSetCurrentGXThread.html">GXSetCurrentGXThread</A></CODE></P> 267<H2>Revision History</H2> 268<P>2006/03/01 Initial version.</P> 269<hr> 270<P>CONFIDENTIAL</p> 271</BODY> 272</HTML>