/** * Initialize hardware vertex format. */ static void setupGrVertexLayout (void) { grReset(GR_VERTEX_PARAMETER); grCoordinateSpace(GR_WINDOW_COORDS); grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE); #if FX_PACKEDCOLOR grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PARGB_OFFSET << 2, GR_PARAM_ENABLE); #else /* !FX_PACKEDCOLOR */ grVertexLayout(GR_PARAM_RGB, GR_VERTEX_RGB_OFFSET << 2, GR_PARAM_ENABLE); grVertexLayout(GR_PARAM_A, GR_VERTEX_A_OFFSET << 2, GR_PARAM_ENABLE); #endif /* !FX_PACKEDCOLOR */ grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE); grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2, GR_PARAM_ENABLE); grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE); grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE); grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE); grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE); }
void main( int argc, char **argv) { char match; char **remArgs; int rv; GrScreenResolution_t resolution = GR_RESOLUTION_640x480; float scrWidth = 640.0f; float scrHeight = 480.0f; int frames = -1; FxBool scrgrab = FXFALSE; char filename[256]; FxU32 wrange[2]; /* Initialize Glide */ grGlideInit(); assert( hwconfig = tlVoodooType() ); /* Process Command Line Arguments */ while( rv = tlGetOpt( argc, argv, "nrd", &match, &remArgs ) ) { if ( rv == -1 ) { printf( "Unrecognized command line argument\n" ); printf( "%s %s\n", name, usage ); printf( "Available resolutions:\n%s\n", tlGetResolutionList() ); return; } switch( match ) { case 'n': frames = atoi( remArgs[0] ); break; case 'r': resolution = tlGetResolutionConstant( remArgs[0], &scrWidth, &scrHeight ); break; case 'd': scrgrab = FXTRUE; frames = 1; strcpy(filename, remArgs[0]); break; } } tlSetScreen( scrWidth, scrHeight ); version = grGetString( GR_VERSION ); printf( "%s:\n%s\n", name, purpose ); printf( "%s\n", version ); printf( "Resolution: %s\n", tlGetResolutionString( resolution ) ); if ( frames == -1 ) { printf( "Press A Key To Begin Test.\n" ); tlGetCH(); } grSstSelect( 0 ); assert( grSstWinOpen(tlGethWnd(), resolution, GR_REFRESH_60Hz, GR_COLORFORMAT_ABGR, GR_ORIGIN_UPPER_LEFT, 2, 1 ) ); grGet(GR_WDEPTH_MIN_MAX, 8, wrange); grVertexLayout(GR_PARAM_XY, 0, GR_PARAM_ENABLE); grVertexLayout(GR_PARAM_RGB, GR_VERTEX_R_OFFSET << 2, GR_PARAM_ENABLE); tlConSet( 0.0f, 0.0f, 1.0f, 1.0f, 60, 30, 0xffffff ); /* Set up Render State - gouraud shading */ grColorCombine( GR_COMBINE_FUNCTION_LOCAL, GR_COMBINE_FACTOR_NONE, GR_COMBINE_LOCAL_ITERATED, GR_COMBINE_OTHER_NONE, FXFALSE ); tlConOutput( "Press a key to quit\n" ); grCoordinateSpace(GR_CLIP_COORDS); while( frames-- && tlOkToRender()) { GrVertex vtxA, vtxB, vtxC; if (hwconfig == TL_VOODOORUSH) { tlGetDimsByConst(resolution, &scrWidth, &scrHeight ); grClipWindow(0, 0, (FxU32) scrWidth, (FxU32) scrHeight); } grBufferClear(0x00000000, 0, wrange[1]); vtxA.x = tlScaleX( 0.3f ), vtxA.y = tlScaleY( 0.3f ); vtxA.r = 255.0f, vtxA.g = 0.0f, vtxA.b = 0.0f; vtxB.x = tlScaleX( 0.8f ), vtxB.y = tlScaleY( 0.4f ); vtxB.r = 0.0f, vtxB.g = 255.0f, vtxB.b = 0.0f; vtxC.x = tlScaleX( 0.5f ), vtxC.y = tlScaleY( 0.8f ); vtxC.r = 0.0f, vtxC.g = 0.0f, vtxC.b = 255.0f; grDrawTriangle( &vtxA, &vtxB, &vtxC ); tlConRender(); grBufferSwap( 1 ); /* grab the frame buffer */ if (scrgrab) { if (!tlScreenDump(filename, (FxU16)scrWidth, (FxU16)scrHeight)) printf( "Cannot open %s\n", filename); scrgrab = FXFALSE; } if ( tlKbHit() ) frames = 0; } grGlideShutdown(); return; }