int initView(int x, int y, int width, int height, int /* flag */, void *screen) { int i; const int BUFSIZE = 1024; char buf[BUFSIZE]; if (maxTextureUnits==0) { InitMultiTex(); } grWinx = x; grWiny = y; grWinw = width; grWinh = height; grMouseRatioX = width / 640.0; grMouseRatioY = height / 480.0; OldTime = GfTimeClock(); nFrame = 0; grFps = 0; snprintf(buf, BUFSIZE, "%s%s", GetLocalDir(), GR_PARAM_FILE); grHandle = GfParmReadFile(buf, GFPARM_RMODE_STD | GFPARM_RMODE_CREAT); for (i = 0; i < GR_NB_MAX_SCREEN; i++) { grScreens[i]->initBoard (); } GfuiAddSKey(screen, GLUT_KEY_HOME, "Zoom Maximum", (void*)GR_ZOOM_MAX, grSetZoom, NULL); GfuiAddSKey(screen, GLUT_KEY_END, "Zoom Minimum", (void*)GR_ZOOM_MIN, grSetZoom, NULL); GfuiAddKey(screen, '*', "Zoom Default", (void*)GR_ZOOM_DFLT, grSetZoom, NULL); GfuiAddSKey(screen, GLUT_KEY_PAGE_UP, "Select Previous Car", (void*)0, grPrevCar, NULL); GfuiAddSKey(screen, GLUT_KEY_PAGE_DOWN, "Select Next Car", (void*)0, grNextCar, NULL); GfuiAddSKey(screen, GLUT_KEY_F2, "Driver Views", (void*)0, grSelectCamera, NULL); GfuiAddSKey(screen, GLUT_KEY_F3, "Car Views", (void*)1, grSelectCamera, NULL); GfuiAddSKey(screen, GLUT_KEY_F4, "Side Car Views", (void*)2, grSelectCamera, NULL); GfuiAddSKey(screen, GLUT_KEY_F5, "Up Car View", (void*)3, grSelectCamera, NULL); GfuiAddSKey(screen, GLUT_KEY_F6, "Persp Car View", (void*)4, grSelectCamera, NULL); GfuiAddSKey(screen, GLUT_KEY_F7, "All Circuit Views", (void*)5, grSelectCamera, NULL); GfuiAddSKey(screen, GLUT_KEY_F8, "Track View", (void*)6, grSelectCamera, NULL); GfuiAddSKey(screen, GLUT_KEY_F9, "Track View Zoomed", (void*)7, grSelectCamera, NULL); GfuiAddSKey(screen, GLUT_KEY_F10, "Follow Car Zoomed", (void*)8, grSelectCamera, NULL); GfuiAddSKey(screen, GLUT_KEY_F11, "TV Director View", (void*)9, grSelectCamera, NULL); GfuiAddKey(screen, '5', "FPS Counter", (void*)3, grSelectBoard, NULL); GfuiAddKey(screen, '4', "G/Cmd Graph", (void*)4, grSelectBoard, NULL); GfuiAddKey(screen, '3', "Leaders Board", (void*)2, grSelectBoard, NULL); GfuiAddKey(screen, '2', "Driver Counters", (void*)1, grSelectBoard, NULL); GfuiAddKey(screen, '1', "Driver Board", (void*)0, grSelectBoard, NULL); GfuiAddKey(screen, '9', "Mirror", (void*)0, grSwitchMirror, NULL); GfuiAddKey(screen, '0', "Arcade Board", (void*)5, grSelectBoard, NULL); GfuiAddKey(screen, '>', "Zoom In", (void*)GR_ZOOM_IN, grSetZoom, NULL); GfuiAddKey(screen, '<', "Zoom Out", (void*)GR_ZOOM_OUT, grSetZoom, NULL); GfuiAddKey(screen, '[', "Split Screen", (void*)GR_SPLIT_ADD, grSplitScreen, NULL); GfuiAddKey(screen, ']', "UnSplit Screen", (void*)GR_SPLIT_REM, grSplitScreen, NULL); GfuiAddKey(screen, 'm', "Track Maps", (void*)0, grSelectTrackMap, NULL); grAdaptScreenSize(); grInitScene(); grLodFactorValue = GfParmGetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_LODFACTOR, NULL, 1.0); const char* wheelDetailOption = GfParmGetStr(grHandle, GR_SCT_GRAPHIC, GR_ATT_WHEELRENDERING, GR_ATT_WHEELRENDERING_DETAILED); if (strcmp(wheelDetailOption,GR_ATT_WHEELRENDERING_DETAILED ) == 0) { grUseDetailedWheels = DETAILED; } else if (strcmp(wheelDetailOption,GR_ATT_WHEELRENDERING_SIMPLE ) == 0) { grUseDetailedWheels = SIMPLE; } GfParmReleaseHandle(grHandle); return 0; }
int grLoadScene(tTrack *track) { void *hndl = grTrackHandle; char *acname; ssgEntity *desc; char buf[256]; if (maxTextureUnits==0) { InitMultiTex(); } ssgSetCurrentOptions(&options); ssgAddTextureFormat(".png", grLoadPngTexture); grRegisterCustomSGILoader(); grTrack = track; TheScene = new ssgRoot; /* Landscape */ LandAnchor = new ssgBranch; TheScene->addKid(LandAnchor); /* Pit stops walls */ PitsAnchor = new ssgBranch; TheScene->addKid(PitsAnchor); /* Skid Marks */ SkidAnchor = new ssgBranch; TheScene->addKid(SkidAnchor); /* Car shadows */ ShadowAnchor = new ssgBranch; TheScene->addKid(ShadowAnchor); /* Car lights */ CarlightAnchor = new ssgBranch; TheScene->addKid(CarlightAnchor); /* Cars */ CarsAnchor = new ssgBranch; TheScene->addKid(CarsAnchor); /* Smoke */ SmokeAnchor = new ssgBranch; TheScene->addKid(SmokeAnchor); /* Lens Flares */ SunAnchor = new ssgBranch; TheScene->addKid(SunAnchor); initBackground(); grWrldX = (int)(track->max.x - track->min.x + 1); grWrldY = (int)(track->max.y - track->min.y + 1); grWrldZ = (int)(track->max.z - track->min.z + 1); grWrldMaxSize = (int)(MAX(MAX(grWrldX, grWrldY), grWrldZ)); acname = GfParmGetStr(hndl, TRK_SECT_GRAPH, TRK_ATT_3DDESC, "track.ac"); if (strlen(acname) == 0) { return -1; } sprintf(buf, "tracks/%s/%s;data/textures;data/img;.", grTrack->category, grTrack->internalname); ssgTexturePath(buf); sprintf(buf, "tracks/%s/%s", grTrack->category, grTrack->internalname); ssgModelPath(buf); desc = grssgLoadAC3D(acname, NULL); LandAnchor->addKid(desc); return 0; }