//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // void SortData::DrawTriIndexedList() { Start_Timer(GOS_Draw_Time); #ifdef LAB_ONLY if(dontSeeMe == true) #endif { WORD newIndicies[4096]; long startIndex = 0; GOSVertex *v = (GOSVertex *)vertices; for (long i=0;i<numIndices;i+=3) { if (((v[indices[i]].z >= 0.0f) && (v[indices[i]].z < 1.0f)) && ((v[indices[i+1]].z >= 0.0f) && (v[indices[i+1]].z < 1.0f)) && ((v[indices[i+2]].z >= 0.0f) && (v[indices[i+2]].z < 1.0f))) { //Copy these indicies to new array. newIndicies[startIndex] = indices[i]; newIndicies[startIndex+1] = indices[i+1]; newIndicies[startIndex+2] = indices[i+2]; startIndex += 3; } } if (startIndex) { if(texture2==0) { gos_RenderIndexedArray( (GOSVertex *)vertices, numVertices, newIndicies, startIndex); } else { gos_RenderIndexedArray( (GOSVertex2UV *)vertices, numVertices, indices, numIndices); } } } Stop_Timer(GOS_Draw_Time); }
//---------------------------------------------------------------------- // Draws all textures with isTerrain set that are solid first, // then draws all alpha with isTerrain set. void MC_TextureManager::renderLists (void) { if (Environment.Renderer == 3) { gos_SetRenderState( gos_State_AlphaMode, gos_Alpha_OneZero); gos_SetRenderState( gos_State_ShadeMode, gos_ShadeFlat); gos_SetRenderState( gos_State_MonoEnable, 1); gos_SetRenderState( gos_State_Perspective, 0); gos_SetRenderState( gos_State_Clipping, 1); gos_SetRenderState( gos_State_AlphaTest, 0); gos_SetRenderState( gos_State_Specular, 0); gos_SetRenderState( gos_State_Dither, 0); gos_SetRenderState( gos_State_TextureMapBlend, gos_BlendDecal); gos_SetRenderState( gos_State_Filter, gos_FilterNone); gos_SetRenderState( gos_State_TextureAddress, gos_TextureClamp ); gos_SetRenderState( gos_State_ZCompare, 1); gos_SetRenderState( gos_State_ZWrite, 1); } else { gos_SetRenderState( gos_State_AlphaMode, gos_Alpha_OneZero); gos_SetRenderState( gos_State_ShadeMode, gos_ShadeGouraud); gos_SetRenderState( gos_State_MonoEnable, 0); gos_SetRenderState( gos_State_Perspective, 1); gos_SetRenderState( gos_State_Clipping, 1); gos_SetRenderState( gos_State_AlphaTest, 0); gos_SetRenderState( gos_State_Specular, 1); gos_SetRenderState( gos_State_Dither, 1); gos_SetRenderState( gos_State_TextureMapBlend, gos_BlendModulate); gos_SetRenderState( gos_State_Filter, gos_FilterBiLinear); gos_SetRenderState( gos_State_TextureAddress, gos_TextureClamp ); gos_SetRenderState( gos_State_ZCompare, 1); gos_SetRenderState( gos_State_ZWrite, 1); } DWORD fogColor = eye->fogColor; //----------------------------------------------------- // FOG time. Set Render state to FOG on! if (useFog) { gos_SetRenderState( gos_State_Fog, (int)&fogColor); } else { gos_SetRenderState( gos_State_Fog, 0); } for (long i=0;i<nextAvailableVertexNode;i++) { if ((masterVertexNodes[i].flags & MC2_DRAWSOLID) && (masterVertexNodes[i].vertices)) { if (masterVertexNodes[i].flags & MC2_ISTERRAIN) gos_SetRenderState( gos_State_TextureAddress, gos_TextureClamp ); else gos_SetRenderState( gos_State_TextureAddress, gos_TextureWrap ); DWORD totalVertices = masterVertexNodes[i].numVertices; if (masterVertexNodes[i].currentVertex != (masterVertexNodes[i].vertices + masterVertexNodes[i].numVertices)) { totalVertices = masterVertexNodes[i].currentVertex - masterVertexNodes[i].vertices; } if (totalVertices && (totalVertices < MAX_SENDDOWN)) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); gos_RenderIndexedArray( masterVertexNodes[i].vertices, totalVertices, indexArray, totalVertices ); } else if (totalVertices > MAX_SENDDOWN) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); //Must divide up vertices into batches of 10,000 each to send down. // Somewhere around 20000 to 30000 it really gets screwy!!! long currentVertices = 0; while (currentVertices < totalVertices) { gos_VERTEX *v = masterVertexNodes[i].vertices + currentVertices; long tVertices = totalVertices - currentVertices; if (tVertices > MAX_SENDDOWN) tVertices = MAX_SENDDOWN; gos_RenderIndexedArray(v, tVertices, indexArray, tVertices ); currentVertices += tVertices; } } //Reset the list to zero length to avoid drawing more then once! //Also comes in handy if gameLogic is not called. masterVertexNodes[i].currentVertex = masterVertexNodes[i].vertices; } } if (Environment.Renderer == 3) { //Do NOT draw the water as transparent in software gos_SetRenderState( gos_State_TextureAddress, gos_TextureWrap ); } else { gos_SetRenderState( gos_State_AlphaMode, gos_Alpha_AlphaInvAlpha); gos_SetRenderState( gos_State_AlphaTest, 1); gos_SetRenderState( gos_State_TextureAddress, gos_TextureWrap ); } for (i=0;i<nextAvailableVertexNode;i++) { if ((masterVertexNodes[i].flags & MC2_ISTERRAIN) && (masterVertexNodes[i].flags & MC2_DRAWALPHA) && !(masterVertexNodes[i].flags & MC2_ISCRATERS) && (masterVertexNodes[i].vertices)) { DWORD totalVertices = masterVertexNodes[i].numVertices; if (masterVertexNodes[i].currentVertex != (masterVertexNodes[i].vertices + masterVertexNodes[i].numVertices)) { totalVertices = masterVertexNodes[i].currentVertex - masterVertexNodes[i].vertices; } if (totalVertices && (totalVertices < MAX_SENDDOWN)) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); gos_RenderIndexedArray( masterVertexNodes[i].vertices, totalVertices, indexArray, totalVertices ); } else if (totalVertices > MAX_SENDDOWN) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); //Must divide up vertices into batches of 10,000 each to send down. // Somewhere around 20000 to 30000 it really gets screwy!!! long currentVertices = 0; while (currentVertices < totalVertices) { gos_VERTEX *v = masterVertexNodes[i].vertices + currentVertices; long tVertices = totalVertices - currentVertices; if (tVertices > MAX_SENDDOWN) tVertices = MAX_SENDDOWN; gos_RenderIndexedArray(v, tVertices, indexArray, tVertices ); currentVertices += tVertices; } } //Reset the list to zero length to avoid drawing more then once! //Also comes in handy if gameLogic is not called. masterVertexNodes[i].currentVertex = masterVertexNodes[i].vertices; } } if (Environment.Renderer == 3) { gos_SetRenderState( gos_State_AlphaMode, gos_Alpha_AlphaInvAlpha); gos_SetRenderState( gos_State_AlphaTest, 1); gos_SetRenderState( gos_State_ShadeMode, gos_ShadeFlat); } gos_SetRenderState( gos_State_TextureAddress, gos_TextureClamp ); gos_SetRenderState( gos_State_ZWrite, 0); gos_SetRenderState( gos_State_ShadeMode, gos_ShadeFlat); //Draw the Craters after the detail textures on the terrain. There should never be anything here in the OLD universe. // DO NOT draw craters or footprints in software if (Environment.Renderer != 3) { for (i=0;i<nextAvailableVertexNode;i++) { if (!(masterVertexNodes[i].flags & MC2_ISTERRAIN) && (masterVertexNodes[i].flags & MC2_DRAWALPHA) && (masterVertexNodes[i].flags & MC2_ISCRATERS) && (masterVertexNodes[i].vertices)) { DWORD totalVertices = masterVertexNodes[i].numVertices; if (masterVertexNodes[i].currentVertex != (masterVertexNodes[i].vertices + masterVertexNodes[i].numVertices)) { totalVertices = masterVertexNodes[i].currentVertex - masterVertexNodes[i].vertices; } if (totalVertices && (totalVertices < MAX_SENDDOWN)) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); gos_RenderIndexedArray( masterVertexNodes[i].vertices, totalVertices, indexArray, totalVertices ); } else if (totalVertices > MAX_SENDDOWN) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); //Must divide up vertices into batches of 10,000 each to send down. // Somewhere around 20000 to 30000 it really gets screwy!!! long currentVertices = 0; while (currentVertices < totalVertices) { gos_VERTEX *v = masterVertexNodes[i].vertices + currentVertices; long tVertices = totalVertices - currentVertices; if (tVertices > MAX_SENDDOWN) tVertices = MAX_SENDDOWN; gos_RenderIndexedArray(v, tVertices, indexArray, tVertices ); currentVertices += tVertices; } } //Reset the list to zero length to avoid drawing more then once! //Also comes in handy if gameLogic is not called. masterVertexNodes[i].currentVertex = masterVertexNodes[i].vertices; } } } if (Environment.Renderer != 3) { gos_SetRenderState( gos_State_ShadeMode, gos_ShadeGouraud); gos_SetRenderState( gos_State_ZWrite, 1); } //Draw the Overlays after the detail textures on the terrain. There should never be anything here in the OLD universe. for (i=0;i<nextAvailableVertexNode;i++) { if ((masterVertexNodes[i].flags & MC2_ISTERRAIN) && (masterVertexNodes[i].flags & MC2_DRAWALPHA) && (masterVertexNodes[i].flags & MC2_ISCRATERS) && (masterVertexNodes[i].vertices)) { DWORD totalVertices = masterVertexNodes[i].numVertices; if (masterVertexNodes[i].currentVertex != (masterVertexNodes[i].vertices + masterVertexNodes[i].numVertices)) { totalVertices = masterVertexNodes[i].currentVertex - masterVertexNodes[i].vertices; } if (totalVertices && (totalVertices < MAX_SENDDOWN)) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); gos_RenderIndexedArray( masterVertexNodes[i].vertices, totalVertices, indexArray, totalVertices ); } else if (totalVertices > MAX_SENDDOWN) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); //Must divide up vertices into batches of 10,000 each to send down. // Somewhere around 20000 to 30000 it really gets screwy!!! long currentVertices = 0; while (currentVertices < totalVertices) { gos_VERTEX *v = masterVertexNodes[i].vertices + currentVertices; long tVertices = totalVertices - currentVertices; if (tVertices > MAX_SENDDOWN) tVertices = MAX_SENDDOWN; gos_RenderIndexedArray(v, tVertices, indexArray, tVertices ); currentVertices += tVertices; } } //Reset the list to zero length to avoid drawing more then once! //Also comes in handy if gameLogic is not called. masterVertexNodes[i].currentVertex = masterVertexNodes[i].vertices; } } if (Environment.Renderer == 3) { gos_SetRenderState( gos_State_TextureAddress, gos_TextureWrap ); gos_SetRenderState( gos_State_ShadeMode, gos_ShadeFlat); gos_SetRenderState( gos_State_ZWrite, 1); gos_SetRenderState( gos_State_ZCompare, 2); } else { gos_SetRenderState( gos_State_TextureAddress, gos_TextureWrap ); gos_SetRenderState( gos_State_ShadeMode, gos_ShadeFlat); gos_SetRenderState( gos_State_MonoEnable, 1); gos_SetRenderState( gos_State_Perspective, 0); gos_SetRenderState( gos_State_Specular, 1); gos_SetRenderState( gos_State_ZWrite, 1); gos_SetRenderState( gos_State_ZCompare, 2); } //NEVER draw shadows in Software. if (Environment.Renderer != 3) { for (i=0;i<nextAvailableVertexNode;i++) { if ((masterVertexNodes[i].flags & MC2_ISSHADOWS) && (masterVertexNodes[i].flags & MC2_DRAWALPHA) && (masterVertexNodes[i].vertices)) { DWORD totalVertices = masterVertexNodes[i].numVertices; if (masterVertexNodes[i].currentVertex != (masterVertexNodes[i].vertices + masterVertexNodes[i].numVertices)) { totalVertices = masterVertexNodes[i].currentVertex - masterVertexNodes[i].vertices; } if (totalVertices && (totalVertices < MAX_SENDDOWN)) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); gos_RenderIndexedArray( masterVertexNodes[i].vertices, totalVertices, indexArray, totalVertices ); } else if (totalVertices > MAX_SENDDOWN) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); //Must divide up vertices into batches of 10,000 each to send down. // Somewhere around 20000 to 30000 it really gets screwy!!! long currentVertices = 0; while (currentVertices < totalVertices) { gos_VERTEX *v = masterVertexNodes[i].vertices + currentVertices; long tVertices = totalVertices - currentVertices; if (tVertices > MAX_SENDDOWN) tVertices = MAX_SENDDOWN; gos_RenderIndexedArray(v, tVertices, indexArray, tVertices ); currentVertices += tVertices; } } //Reset the list to zero length to avoid drawing more then once! //Also comes in handy if gameLogic is not called. masterVertexNodes[i].currentVertex = masterVertexNodes[i].vertices; } } } gos_SetRenderState( gos_State_ZCompare, 1); if (Environment.Renderer != 3) { gos_SetRenderState( gos_State_ShadeMode, gos_ShadeGouraud); gos_SetRenderState( gos_State_ZWrite, 1); } for (i=0;i<nextAvailableVertexNode;i++) { if (!(masterVertexNodes[i].flags & MC2_ISTERRAIN) && !(masterVertexNodes[i].flags & MC2_ISSHADOWS) && !(masterVertexNodes[i].flags & MC2_ISCOMPASS) && !(masterVertexNodes[i].flags & MC2_ISCRATERS) && (masterVertexNodes[i].flags & MC2_DRAWALPHA) && (masterVertexNodes[i].vertices)) { DWORD totalVertices = masterVertexNodes[i].numVertices; if (masterVertexNodes[i].currentVertex != (masterVertexNodes[i].vertices + masterVertexNodes[i].numVertices)) { totalVertices = masterVertexNodes[i].currentVertex - masterVertexNodes[i].vertices; } if (totalVertices && (totalVertices < MAX_SENDDOWN)) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); gos_RenderIndexedArray( masterVertexNodes[i].vertices, totalVertices, indexArray, totalVertices ); } else if (totalVertices > MAX_SENDDOWN) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); //Must divide up vertices into batches of 10,000 each to send down. // Somewhere around 20000 to 30000 it really gets screwy!!! long currentVertices = 0; while (currentVertices < totalVertices) { gos_VERTEX *v = masterVertexNodes[i].vertices + currentVertices; long tVertices = totalVertices - currentVertices; if (tVertices > MAX_SENDDOWN) tVertices = MAX_SENDDOWN; gos_RenderIndexedArray(v, tVertices, indexArray, tVertices ); currentVertices += tVertices; } } //Reset the list to zero length to avoid drawing more then once! //Also comes in handy if gameLogic is not called. masterVertexNodes[i].currentVertex = masterVertexNodes[i].vertices; } } if (Environment.Renderer == 3) { gos_SetRenderState( gos_State_ShadeMode, gos_ShadeGouraud); gos_SetRenderState( gos_State_ZCompare, 1); gos_SetRenderState( gos_State_Fog, 0); gos_SetRenderState( gos_State_AlphaMode, gos_Alpha_OneOne); gos_SetRenderState( gos_State_TextureMapBlend, gos_BlendModulateAlpha); gos_SetRenderState( gos_State_ZWrite, 0); gos_SetRenderState( gos_State_MonoEnable, 1); } else { gos_SetRenderState( gos_State_ShadeMode, gos_ShadeGouraud); gos_SetRenderState( gos_State_Perspective, 1); gos_SetRenderState( gos_State_ZCompare, 1); gos_SetRenderState( gos_State_Fog, 0); gos_SetRenderState( gos_State_Specular, 0); gos_SetRenderState( gos_State_AlphaMode, gos_Alpha_OneOne); gos_SetRenderState( gos_State_TextureMapBlend, gos_BlendModulateAlpha); gos_SetRenderState( gos_State_ZWrite, 0); gos_SetRenderState( gos_State_MonoEnable, 0); } for (i=0;i<nextAvailableVertexNode;i++) { if ((masterVertexNodes[i].flags & MC2_ISEFFECTS) && (masterVertexNodes[i].vertices)) { DWORD totalVertices = masterVertexNodes[i].numVertices; if (masterVertexNodes[i].currentVertex != (masterVertexNodes[i].vertices + masterVertexNodes[i].numVertices)) { totalVertices = masterVertexNodes[i].currentVertex - masterVertexNodes[i].vertices; } if (totalVertices && (totalVertices < MAX_SENDDOWN)) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); gos_RenderIndexedArray( masterVertexNodes[i].vertices, totalVertices, indexArray, totalVertices ); } else if (totalVertices > MAX_SENDDOWN) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); //Must divide up vertices into batches of 10,000 each to send down. // Somewhere around 20000 to 30000 it really gets screwy!!! long currentVertices = 0; while (currentVertices < totalVertices) { gos_VERTEX *v = masterVertexNodes[i].vertices + currentVertices; long tVertices = totalVertices - currentVertices; if (tVertices > MAX_SENDDOWN) tVertices = MAX_SENDDOWN; gos_RenderIndexedArray(v, tVertices, indexArray, tVertices ); currentVertices += tVertices; } } //Reset the list to zero length to avoid drawing more then once! //Also comes in handy if gameLogic is not called. masterVertexNodes[i].currentVertex = masterVertexNodes[i].vertices; } } gos_SetRenderState( gos_State_ZWrite, 1); for (i=0;i<nextAvailableVertexNode;i++) { if ((masterVertexNodes[i].flags & MC2_ISSPOTLGT) && (masterVertexNodes[i].vertices)) { DWORD totalVertices = masterVertexNodes[i].numVertices; if (masterVertexNodes[i].currentVertex != (masterVertexNodes[i].vertices + masterVertexNodes[i].numVertices)) { totalVertices = masterVertexNodes[i].currentVertex - masterVertexNodes[i].vertices; } if (totalVertices && (totalVertices < MAX_SENDDOWN)) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); gos_RenderIndexedArray( masterVertexNodes[i].vertices, totalVertices, indexArray, totalVertices ); } else if (totalVertices > MAX_SENDDOWN) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); //Must divide up vertices into batches of 10,000 each to send down. // Somewhere around 20000 to 30000 it really gets screwy!!! long currentVertices = 0; while (currentVertices < totalVertices) { gos_VERTEX *v = masterVertexNodes[i].vertices + currentVertices; long tVertices = totalVertices - currentVertices; if (tVertices > MAX_SENDDOWN) tVertices = MAX_SENDDOWN; gos_RenderIndexedArray(v, tVertices, indexArray, tVertices ); currentVertices += tVertices; } } //Reset the list to zero length to avoid drawing more then once! //Also comes in handy if gameLogic is not called. masterVertexNodes[i].currentVertex = masterVertexNodes[i].vertices; } } gos_SetRenderState( gos_State_ZWrite, 0); gos_SetRenderState( gos_State_ZCompare, 0); gos_SetRenderState( gos_State_Perspective, 1); gos_SetRenderState( gos_State_AlphaMode, gos_Alpha_AlphaInvAlpha); gos_SetRenderState( gos_State_AlphaTest, 1); for (i=0;i<nextAvailableVertexNode;i++) { if ((masterVertexNodes[i].flags & MC2_ISCOMPASS) && (masterVertexNodes[i].vertices)) { DWORD totalVertices = masterVertexNodes[i].numVertices; if (masterVertexNodes[i].currentVertex != (masterVertexNodes[i].vertices + masterVertexNodes[i].numVertices)) { totalVertices = masterVertexNodes[i].currentVertex - masterVertexNodes[i].vertices; } if (totalVertices && (totalVertices < MAX_SENDDOWN)) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); gos_RenderIndexedArray( masterVertexNodes[i].vertices, totalVertices, indexArray, totalVertices ); } else if (totalVertices > MAX_SENDDOWN) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); //Must divide up vertices into batches of 10,000 each to send down. // Somewhere around 20000 to 30000 it really gets screwy!!! long currentVertices = 0; while (currentVertices < totalVertices) { gos_VERTEX *v = masterVertexNodes[i].vertices + currentVertices; long tVertices = totalVertices - currentVertices; if (tVertices > MAX_SENDDOWN) tVertices = MAX_SENDDOWN; gos_RenderIndexedArray(v, tVertices, indexArray, tVertices ); currentVertices += tVertices; } } //Reset the list to zero length to avoid drawing more then once! //Also comes in handy if gameLogic is not called. masterVertexNodes[i].currentVertex = masterVertexNodes[i].vertices; } } gos_SetRenderState( gos_State_Filter, gos_FilterNone); for (i=0;i<nextAvailableVertexNode;i++) { if ((masterVertexNodes[i].flags & MC2_ISHUDLMNT) && (masterVertexNodes[i].vertices)) { DWORD totalVertices = masterVertexNodes[i].numVertices; if (masterVertexNodes[i].currentVertex != (masterVertexNodes[i].vertices + masterVertexNodes[i].numVertices)) { totalVertices = masterVertexNodes[i].currentVertex - masterVertexNodes[i].vertices; } if (totalVertices && (totalVertices < MAX_SENDDOWN)) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); gos_RenderIndexedArray( masterVertexNodes[i].vertices, totalVertices, indexArray, totalVertices ); } else if (totalVertices > MAX_SENDDOWN) { gos_SetRenderState( gos_State_Texture, masterTextureNodes[masterVertexNodes[i].textureIndex].get_gosTextureHandle()); //Must divide up vertices into batches of 10,000 each to send down. // Somewhere around 20000 to 30000 it really gets screwy!!! long currentVertices = 0; while (currentVertices < totalVertices) { gos_VERTEX *v = masterVertexNodes[i].vertices + currentVertices; long tVertices = totalVertices - currentVertices; if (tVertices > MAX_SENDDOWN) tVertices = MAX_SENDDOWN; gos_RenderIndexedArray(v, tVertices, indexArray, tVertices ); currentVertices += tVertices; } } //Reset the list to zero length to avoid drawing more then once! //Also comes in handy if gameLogic is not called. masterVertexNodes[i].currentVertex = masterVertexNodes[i].vertices; } } //Must turn zCompare back on for FXs gos_SetRenderState( gos_State_ZCompare, 1 ); }