TORCS  1.3.9
The Open Racing Car Simulator
grmain.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 
3  file : grmain.cpp
4  created : Thu Aug 17 23:23:49 CEST 2000
5  copyright : (C) 2013 by Eric Espie, Bernhard Wymann
6  email : torcs@free.fr
7  version : $Id$
8 
9  ***************************************************************************/
10 
11 /***************************************************************************
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * *
18  ***************************************************************************/
19 
20 #include <time.h>
21 #include <stdlib.h>
22 #include <stdio.h>
23 #ifdef WIN32
24 #include <windows.h>
25 #endif
26 #include <GL/glut.h>
27 #include <plib/ssg.h>
28 
29 #include <tgfclient.h>
30 #include <portability.h>
31 #include <graphic.h>
32 
33 #include "grmain.h"
34 #include "grshadow.h"
35 #include "grskidmarks.h"
36 #include "grsmoke.h"
37 #include "grcar.h"
38 #include "grscreen.h"
39 #include "grcam.h"
40 #include "grscene.h"
41 #include "grsound.h"
42 #include "grboard.h"
43 #include "grutil.h"
44 #include "grtrackmap.h"
45 #include "grcarlight.h"
46 #include <glfeatures.h>
47 
49 static double OldTime;
50 static int nFrame;
51 float grFps;
52 double grCurTime;
53 double grDeltaTime;
54 int segIndice = 0;
55 
56 tdble grMaxDammage = 10000.0;
57 int grNbCars = 0;
58 
59 void *grHandle = NULL;
60 void *grTrackHandle = NULL;
61 
63 
65 
67 ssgContext grContext;
68 class cGrScreen *grScreens[GR_NB_MAX_SCREEN] = {NULL, NULL, NULL, NULL};
69 int grNbScreen = 1;
72 
73 #ifdef WIN32
74 #include <GL/glext.h>
75 PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB = NULL;
76 PFNGLMULTITEXCOORD2FVARBPROC glMultiTexCoord2fvARB = NULL;
77 PFNGLACTIVETEXTUREARBPROC glActiveTextureARB = NULL;
78 PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB = NULL;
79 #endif
80 
81 
82 // InitMultiTex
83 // desc: sets up OpenGL for multitexturing support
84 bool InitMultiTex(void)
85 {
86  if (GetSingleTextureMode ()) {
87  maxTextureUnits = 1;
88  return true;
89  } else {
90  // list of available extensions
91  char *extensionStr = (char*)glGetString(GL_EXTENSIONS);
92  if (extensionStr == NULL)
93  return false;
94 
95  if (strstr(extensionStr, "GL_ARB_multitexture")) {
96  // retrieve the maximum number of texture units allowed
97  glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &maxTextureUnits);
98 #ifdef WIN32
99  // retrieve addresses of multitexturing functions
100  glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) wglGetProcAddress("glMultiTexCoord2fARB");
101  glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress("glActiveTextureARB");
102  glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC) wglGetProcAddress("glClientActiveTextureARB");
103  glMultiTexCoord2fvARB = (PFNGLMULTITEXCOORD2FVARBPROC) wglGetProcAddress("glMultiTexCoord2fvARB");
104 #endif
105  return true;
106  } else {
107  return false;
108  }
109  }
110 }
111 
112 
113 static void grAdaptScreenSize(void)
114 {
115  switch (grNbScreen) {
116  case 0:
117  case 1:
119  grScreens[1]->desactivate();
120  grScreens[2]->desactivate();
121  grScreens[3]->desactivate();
122  break;
123  case 2:
124  grScreens[0]->activate(grWinx, grWiny + grWinh / 2, grWinw, grWinh / 2);
126  grScreens[2]->desactivate();
127  grScreens[3]->desactivate();
128  break;
129  case 3:
130  grScreens[0]->activate(grWinx, grWiny + grWinh / 2, grWinw / 2, grWinh / 2);
131  grScreens[1]->activate(grWinx + grWinw / 2, grWiny + grWinh / 2, grWinw / 2, grWinh / 2);
132  grScreens[2]->activate(grWinx + grWinw / 4, grWiny, grWinw / 2, grWinh / 2);
133  grScreens[3]->desactivate();
134  break;
135  case 4:
136  grScreens[0]->activate(grWinx, grWiny + grWinh / 2, grWinw / 2, grWinh / 2);
137  grScreens[1]->activate(grWinx + grWinw / 2, grWiny + grWinh / 2, grWinw / 2, grWinh / 2);
138  grScreens[2]->activate(grWinx, grWiny, grWinw / 2, grWinh / 2);
139  grScreens[3]->activate(grWinx + grWinw / 2, grWiny, grWinw / 2, grWinh / 2);
140  break;
141  }
142 }
143 
144 static void
145 grSplitScreen(void *vp)
146 {
147  long p = (long)vp;
148 
149  switch (p) {
150  case GR_SPLIT_ADD:
151  grNbScreen++;
154  }
155  break;
156  case GR_SPLIT_REM:
157  grNbScreen--;
158  if (grNbScreen < 1) {
159  grNbScreen = 1;
160  }
161  break;
162  }
164  GfParmWriteFile(NULL, grHandle, "Graph");
166 }
167 
168 static class cGrScreen *
170 {
171  tMouseInfo *mouse;
172  int i;
173  int x, y;
174 
175  mouse = GfuiMouseInfo();
176  x = (int)(mouse->X * grMouseRatioX);
177  y = (int)(mouse->Y * grMouseRatioY);
178  for (i = 0; i < GR_NB_MAX_SCREEN; i++) {
179  if (grScreens[i]->isInScreen(x, y)) {
180  return grScreens[i];
181  }
182  }
183  return grScreens[0];
184 }
185 
186 static void
187 grSetZoom(void *vp)
188 {
189  grGetcurrentScreen()->setZoom((long)vp);
190 }
191 
192 static void
193 grSelectCamera(void *vp)
194 {
195  grGetcurrentScreen()->selectCamera((long)vp);
196 }
197 
198 static void
199 grSelectBoard(void *vp)
200 {
201  grGetcurrentScreen()->selectBoard((long)vp);
202 }
203 
204 static void
205 grSelectTrackMap(void * /* vp */)
206 {
208 }
209 
210 static void
211 grPrevCar(void * /* dummy */)
212 {
214 }
215 
216 static void
217 grNextCar(void * /* dummy */)
218 {
220 }
221 
222 static void
223 grSwitchMirror(void * /* dummy */)
224 {
226 }
227 
228 int
229 initView(int x, int y, int width, int height, int /* flag */, void *screen)
230 {
231  int i;
232  const int BUFSIZE = 1024;
233  char buf[BUFSIZE];
234 
235  if (maxTextureUnits==0) {
236  InitMultiTex();
237  }
238 
239  grWinx = x;
240  grWiny = y;
241  grWinw = width;
242  grWinh = height;
243 
244  grMouseRatioX = width / 640.0;
245  grMouseRatioY = height / 480.0;
246 
247  OldTime = GfTimeClock();
248  nFrame = 0;
249  grFps = 0;
250 
251  snprintf(buf, BUFSIZE, "%s%s", GetLocalDir(), GR_PARAM_FILE);
253 
254  for (i = 0; i < GR_NB_MAX_SCREEN; i++) {
255  grScreens[i]->initBoard ();
256  }
257 
258  GfuiAddSKey(screen, GLUT_KEY_HOME, "Zoom Maximum", (void*)GR_ZOOM_MAX, grSetZoom, NULL);
259  GfuiAddSKey(screen, GLUT_KEY_END, "Zoom Minimum", (void*)GR_ZOOM_MIN, grSetZoom, NULL);
260  GfuiAddKey(screen, '*', "Zoom Default", (void*)GR_ZOOM_DFLT, grSetZoom, NULL);
261 
262  GfuiAddSKey(screen, GLUT_KEY_PAGE_UP, "Select Previous Car", (void*)0, grPrevCar, NULL);
263  GfuiAddSKey(screen, GLUT_KEY_PAGE_DOWN, "Select Next Car", (void*)0, grNextCar, NULL);
264 
265  GfuiAddSKey(screen, GLUT_KEY_F2, "Driver Views", (void*)0, grSelectCamera, NULL);
266  GfuiAddSKey(screen, GLUT_KEY_F3, "Car Views", (void*)1, grSelectCamera, NULL);
267  GfuiAddSKey(screen, GLUT_KEY_F4, "Side Car Views", (void*)2, grSelectCamera, NULL);
268  GfuiAddSKey(screen, GLUT_KEY_F5, "Up Car View", (void*)3, grSelectCamera, NULL);
269  GfuiAddSKey(screen, GLUT_KEY_F6, "Persp Car View", (void*)4, grSelectCamera, NULL);
270  GfuiAddSKey(screen, GLUT_KEY_F7, "All Circuit Views", (void*)5, grSelectCamera, NULL);
271  GfuiAddSKey(screen, GLUT_KEY_F8, "Track View", (void*)6, grSelectCamera, NULL);
272  GfuiAddSKey(screen, GLUT_KEY_F9, "Track View Zoomed", (void*)7, grSelectCamera, NULL);
273  GfuiAddSKey(screen, GLUT_KEY_F10, "Follow Car Zoomed", (void*)8, grSelectCamera, NULL);
274  GfuiAddSKey(screen, GLUT_KEY_F11, "TV Director View", (void*)9, grSelectCamera, NULL);
275 
276  GfuiAddKey(screen, '5', "FPS Counter", (void*)3, grSelectBoard, NULL);
277  GfuiAddKey(screen, '4', "G/Cmd Graph", (void*)4, grSelectBoard, NULL);
278  GfuiAddKey(screen, '3', "Leaders Board", (void*)2, grSelectBoard, NULL);
279  GfuiAddKey(screen, '2', "Driver Counters", (void*)1, grSelectBoard, NULL);
280  GfuiAddKey(screen, '1', "Driver Board", (void*)0, grSelectBoard, NULL);
281  GfuiAddKey(screen, '9', "Mirror", (void*)0, grSwitchMirror, NULL);
282  GfuiAddKey(screen, '0', "Arcade Board", (void*)5, grSelectBoard, NULL);
283  GfuiAddKey(screen, '>', "Zoom In", (void*)GR_ZOOM_IN, grSetZoom, NULL);
284  GfuiAddKey(screen, '<', "Zoom Out", (void*)GR_ZOOM_OUT, grSetZoom, NULL);
285  GfuiAddKey(screen, '[', "Split Screen", (void*)GR_SPLIT_ADD, grSplitScreen, NULL);
286  GfuiAddKey(screen, ']', "UnSplit Screen", (void*)GR_SPLIT_REM, grSplitScreen, NULL);
287  GfuiAddKey(screen, 'm', "Track Maps", (void*)0, grSelectTrackMap, NULL);
288 
290 
291  grInitScene();
292 
294 
296  if (strcmp(wheelDetailOption,GR_ATT_WHEELRENDERING_DETAILED ) == 0) {
298  } else if (strcmp(wheelDetailOption,GR_ATT_WHEELRENDERING_SIMPLE ) == 0) {
300  }
301 
303 
304  return 0;
305 }
306 
307 
308 int
310 {
311  int i;
312 
313  START_PROFILE("refresh");
314 
315  nFrame++;
318  if ((grCurTime - OldTime) > 1.0) {
319  /* The Frames Per Second (FPS) display is refreshed every second */
321  nFrame = 0;
322  OldTime = grCurTime;
323  }
324 
325  TRACE_GL("refresh: start");
326 
327  START_PROFILE("grRefreshSound*");
329  STOP_PROFILE("grRefreshSound*");
330 
331  START_PROFILE("grDrawBackground/glClear");
332  glDepthFunc(GL_LEQUAL);
333  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
334  STOP_PROFILE("grDrawBackground/glClear");
335 
336  for (i = 0; i < GR_NB_MAX_SCREEN; i++) {
337  grScreens[i]->update(s, grFps);
338  }
339 
341 
342  STOP_PROFILE("refresh");
343  return 0;
344 }
345 
346 int
348 {
349  const int IDXSIZE = 16;
350  char idx[IDXSIZE];
351  int index;
352  int i;
353  tCarElt *elt;
354  void *hdle;
355  const int BUFSIZE = 1024;
356  char buf[1024];
357 
358  TRACE_GL("initCars: start");
359 
360  snprintf(buf, BUFSIZE, "%s%s", GetLocalDir(), GR_PARAM_FILE);
362 
364  grInitCarlight(s->_ncars);
365  grMaxDammage = (tdble)s->_maxDammage;
366  grNbCars = s->_ncars;
367 
368  grCustomizePits();
369 
370  grCarInfo = (tgrCarInfo*)calloc(s->_ncars, sizeof(tgrCarInfo));
371 
372  for (i = 0; i < s->_ncars; i++) {
373  elt = s->cars[i];
374  /* Shadow init (Should be done before the cars for display order) */
375  grInitShadow(elt);
376  /* Skidmarks init */
377  grInitSkidmarks(elt);
378  }
379 
380  grNbScreen = 0;
381  for (i = 0; i < s->_ncars; i++) {
382  elt = s->cars[i];
383  index = elt->index;
384  hdle = elt->_paramsHandle;
385  snprintf(idx, IDXSIZE, "Robots/index/%d", elt->_driverIndex);
386  grCarInfo[index].iconColor[0] = GfParmGetNum(hdle, idx, "red", (char*)NULL, 0);
387  grCarInfo[index].iconColor[1] = GfParmGetNum(hdle, idx, "green", (char*)NULL, 0);
388  grCarInfo[index].iconColor[2] = GfParmGetNum(hdle, idx, "blue", (char*)NULL, 0);
389  grCarInfo[index].iconColor[3] = 1.0;
390  grInitCar(elt);
391  if ((elt->_driverType == RM_DRV_HUMAN) && (grNbScreen < GR_NB_MAX_SCREEN)) {
393  grNbScreen++;
394  }
395  }
396 
397  if (grNbScreen == 0) {
399  }
400 
401  for (i = 0; i < GR_NB_MAX_SCREEN; i++) {
402  grScreens[i]->initCams(s);
403  }
404 
405  TRACE_GL("initCars: end");
406 
407  grInitSmoke(s->_ncars);
408  grInitSound(s, s->_ncars);
409 
411 
412  return 0;
413 }
414 
415 void
417 {
418  int i;
419 
420  GfOut("-- shutdownCars\n");
422  if (grNbCars) {
425  grShutdownSmoke();
427  /* Delete ssg objects */
428  CarsAnchor->removeAllKids();
429  ShadowAnchor->removeAllKids();
430  for (i = 0; i < grNbCars; i++) {
431  ssgDeRefDelete(grCarInfo[i].envSelector);
432  ssgDeRefDelete(grCarInfo[i].shadowBase);
433  ssgDeRefDelete(grCarInfo[i].wheelTexture);
434  if (grCarInfo[i].driverSelectorinsg == false) {
435  delete grCarInfo[i].driverSelector;
436  }
437  }
438 
439  PitsAnchor->removeAllKids();
440  ThePits = 0;
441  free(grCarInfo);
442  }
443 
445 
446  for (i = 0; i < GR_NB_MAX_SCREEN; i++) {
447  grScreens[i]->setCurrentCar(NULL);
448  }
449 }
450 
451 int
453 {
454  int i;
455 
456  // The inittrack does as well init the context, that is highly inconsistent, IMHO.
457  // TODO: Find a solution to init the graphics first independent of objects.
458  grContext.makeCurrent();
459 
462 
463  for (i = 0; i < GR_NB_MAX_SCREEN; i++) {
464  grScreens[i] = new cGrScreen(i);
465  }
466 
467  return 0;
468 }
469 
470 
471 void
473 {
474  int i;
475 
476  grShutdownScene();
477  grShutdownState();
478 
479  for (i = 0; i < GR_NB_MAX_SCREEN; i++) {
480  if (grScreens[i] != NULL) {
481  delete grScreens[i];
482  grScreens[i] = NULL;
483  }
484  }
485 
487 }
488 
489 /*void bendCar (int index, sgVec3 poc, sgVec3 force, int cnt)
490 {
491  if (grCarInfo)
492  grPropagateDamage (grCarInfo[index].carEntity, poc, force, cnt);
493 }*/
494 
495 
496 void muteForMenu(void)
497 {
498  grMuteForMenu();
499 }
500 
int initView(int x, int y, int width, int height, int, void *screen)
Definition: grmain.cpp:229
int initCars(tSituation *s)
Definition: grmain.cpp:347
int grWiny
Definition: grmain.cpp:62
void grShutdownScene(void)
Definition: grscene.cpp:252
static void grNextCar(void *)
Definition: grmain.cpp:217
#define GR_ATT_WHEELRENDERING_DETAILED
Definition: graphic.h:58
double currentTime
current time in sec since the beginning of the simulation
Definition: raceman.h:88
static void grSelectCamera(void *vp)
Definition: grmain.cpp:193
void grInitShadow(tCarElt *car)
Definition: grcar.cpp:416
void * GfParmReadFile(const char *file, int mode)
Read parameter set from file and return handle to parameter set.
Definition: params.cpp:1157
cars situation used to inform the GUI and the drivers
Definition: raceman.h:85
void desactivate(void)
Definition: grscreen.cpp:133
#define GR_ZOOM_MAX
Definition: grcam.h:269
int grNbCars
Definition: grmain.cpp:57
tgrCarInfo * grCarInfo
Definition: grmain.cpp:66
static void grSwitchMirror(void *)
Definition: grmain.cpp:223
#define TRACE_GL(msg)
Definition: grutil.h:28
#define GFPARM_RMODE_STD
if handle already openned return it
Definition: tgf.h:265
tCarElt ** cars
list of cars
Definition: raceman.h:90
void grInitSkidmarks(tCarElt *car)
initialize the skidmak structure for a car
Definition: grskidmarks.cpp:59
void grMuteForMenu(void)
Definition: grsound.cpp:250
void selectCamera(long cam)
Definition: grscreen.cpp:198
#define RM_DRV_HUMAN
Definition: car.h:122
double grDeltaTime
Definition: grmain.cpp:53
void grInitCarlight(int index)
Definition: grcarlight.cpp:225
Car structure (tCarElt).
Definition: car.h:455
char * GetLocalDir(void)
Definition: tgf.cpp:231
void GfParmReleaseHandle(void *parmHandle)
Release given parameter set handle parmHandle.
Definition: params.cpp:1834
void GfuiAddKey(void *scr, unsigned char key, const char *descr, void *userData, tfuiCallback onKeyPressed, tfuiCallback onKeyReleased)
Add a Keyboard callback to a screen.
Definition: gui.cpp:742
void grInitSound(tSituation *s, int ncars)
Definition: grsound.cpp:45
int initTrack(tTrack *track)
Definition: grmain.cpp:452
Track structure.
Definition: track.h:502
void grShutdownSound(int ncars)
Definition: grsound.cpp:172
void initBoard(void)
Definition: grscreen.cpp:507
EWheelDetail grUseDetailedWheels
Definition: grmain.cpp:71
ssgBranch * ThePits
Definition: grscene.cpp:79
float iconColor[4]
Definition: grcar.h:43
tdble grMaxDammage
Definition: grmain.cpp:56
int GfParmWriteFile(const char *file, void *parmHandle, const char *name)
Write parameter set into file.
Definition: params.cpp:1610
void update(tSituation *s, float Fps)
Definition: grscreen.cpp:303
static class cGrScreen * grGetcurrentScreen(void)
Definition: grmain.cpp:169
#define STOP_PROFILE(a)
Definition: tgf.h:598
const char * GfParmGetStr(void *parmHandle, const char *path, const char *key, const char *deflt)
Get a string parameter from the parameter set handle.
Definition: params.cpp:2311
#define START_PROFILE(a)
Definition: tgf.h:597
The Gaming Framework API (client part).
bool InitMultiTex(void)
Definition: grmain.cpp:84
ssgContext grContext
Definition: grmain.cpp:67
int grWinh
Definition: grmain.cpp:62
void grShudownCarlight(void)
Definition: grcarlight.cpp:317
void grInitSmoke(int index)
Definition: grsmoke.cpp:68
void initCams(tSituation *s)
Definition: grscreen.cpp:454
#define GR_ATT_WHEELRENDERING_SIMPLE
Definition: graphic.h:59
int grInitScene(void)
Definition: grscene.cpp:93
void grInitCar(tCarElt *car)
Definition: grcar.cpp:513
int refresh(tSituation *s)
Definition: grmain.cpp:309
void grCustomizePits(void)
Definition: grscene.cpp:618
void grInitCommonState(void)
Definition: grcar.cpp:64
void grShutdownSmoke()
remove the smoke information for a car
Definition: grsmoke.cpp:429
static void grSplitScreen(void *vp)
Definition: grmain.cpp:145
ssgSelector * driverSelector
Definition: grcar.h:49
void grUpdateSmoke(double t)
update if necessary the smoke for a car
Definition: grsmoke.cpp:148
int grWinx
Definition: grmain.cpp:62
tdble grLodFactorValue
Definition: grmain.cpp:70
float tdble
Floating point type used in TORCS.
Definition: tgf.h:48
void selectNextCar(void)
Definition: grscreen.cpp:144
#define GR_ZOOM_DFLT
Definition: grcam.h:271
#define GfOut
Definition: tgf.h:373
void setCurrentCar(tCarElt *newCurCar)
Definition: grscreen.cpp:107
float grFps
Definition: grmain.cpp:51
#define GR_ATT_WHEELRENDERING
Definition: graphic.h:57
void selectTrackMap()
Definition: grscreen.cpp:159
ssgBranch * CarsAnchor
Definition: grscene.cpp:72
#define GR_ZOOM_MIN
Definition: grcam.h:270
static Point p[4]
Definition: Convex.cpp:54
#define GR_SPLIT_REM
Definition: grmain.h:70
tMouseInfo * GfuiMouseInfo(void)
Get the mouse information (position and buttons)
Definition: gui.cpp:380
static float grMouseRatioY
Definition: grmain.cpp:64
Graphic Module Interface Definition.
#define GR_SCT_GRAPHIC
Definition: graphic.h:82
void grShutdownBoardCar(void)
Definition: grboard.cpp:1052
float grRefreshSound(tSituation *s, cGrCamera *camera)
Definition: grsound.cpp:204
int grNbScreen
Definition: grmain.cpp:69
void shutdownCars(void)
Definition: grmain.cpp:416
int index
car index
Definition: car.h:457
void GfuiAddSKey(void *scr, int key, const char *descr, void *userData, tfuiCallback onKeyPressed, tfuiCallback onKeyReleased)
Add a Special Keyboard shortcut to the screen.
Definition: gui.cpp:816
#define GR_SCT_DISPMODE
Definition: graphic.h:63
int segIndice
Definition: grmain.cpp:54
void * grTrackHandle
Definition: grmain.cpp:60
#define GR_PARAM_FILE
Definition: graphic.h:42
int GfParmSetNum(void *handle, const char *path, const char *key, const char *unit, tdble val)
Set a numerical parameter in the parameter set handle.
Definition: params.cpp:2586
cGrCamera * getCurCamera(void)
Definition: grscreen.h:83
ssgBranch * ShadowAnchor
Definition: grscene.cpp:73
cGrScreen(int id)
Definition: grscreen.cpp:41
static void grSelectTrackMap(void *)
Definition: grmain.cpp:205
void selectBoard(long brd)
Definition: grscreen.cpp:154
#define GR_SPLIT_ADD
Definition: grmain.h:69
#define GR_NB_MAX_SCREEN
Definition: grmain.h:72
tdble GfParmGetNum(void *handle, const char *path, const char *key, const char *unit, tdble deflt)
Get a numerical parameter from the parameter set handle.
Definition: params.cpp:2392
double GfTimeClock(void)
Get the time in seconds.
Definition: os.cpp:50
void activate(int x, int y, int w, int h)
Definition: grscreen.cpp:113
int track(tModInfo *modInfo)
Definition: trackitf.cpp:85
static Vector y[4]
Definition: Convex.cpp:56
void selectPrevCar(void)
Definition: grscreen.cpp:149
static void grPrevCar(void *)
Definition: grmain.cpp:211
void grShutdownSkidmarks(void)
remove the skidmarks information for a car
Definition: grmain.h:77
int grLoadScene(tTrack *track)
Definition: grscene.cpp:168
EWheelDetail
Definition: grmain.h:77
static void grSetZoom(void *vp)
Definition: grmain.cpp:187
static double OldTime
Definition: grmain.cpp:49
void muteForMenu(void)
Definition: grmain.cpp:496
void grShutdownState(void)
Definition: grutil.cpp:182
#define GR_ZOOM_OUT
Definition: grcam.h:268
class cGrScreen * grScreens[GR_NB_MAX_SCREEN]
Definition: grmain.cpp:68
void * grHandle
Definition: grmain.cpp:59
static int nFrame
Definition: grmain.cpp:50
int maxTextureUnits
Definition: grmain.cpp:48
static void grAdaptScreenSize(void)
Definition: grmain.cpp:113
void switchMirror(void)
Definition: grscreen.cpp:179
void shutdownTrack(void)
Definition: grmain.cpp:472
double grCurTime
Definition: grmain.cpp:52
static void grSelectBoard(void *vp)
Definition: grmain.cpp:199
int grWinw
Definition: grmain.cpp:62
#define GR_ATT_LODFACTOR
Definition: graphic.h:91
ssgBranch * PitsAnchor
Definition: grscene.cpp:74
#define GR_ATT_NB_SCREENS
Definition: graphic.h:93
int GetSingleTextureMode(void)
Definition: tgf.cpp:273
#define GFPARM_RMODE_CREAT
Create the file if doesn&#39;t exist.
Definition: tgf.h:267
static float grMouseRatioX
Definition: grmain.cpp:64
int isInScreen(int x, int y)
Definition: grscreen.cpp:90
void setZoom(long zoom)
Definition: grscreen.cpp:139
#define GR_ZOOM_IN
Definition: grcam.h:267