TORCS  1.3.10
The Open Racing Car Simulator
Loading...
Searching...
No Matches
grvtxtable.cpp
Go to the documentation of this file.
1/***************************************************************************
2
3 file : grvtxtable.cpp
4 created : Fri Mar 22 23:16:44 CET 2002
5 copyright : (C) 2001 by Christophe Guionneau
6 version : $Id$
7
8 ***************************************************************************/
9
10/***************************************************************************
11 * *
12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. *
16 * *
17 ***************************************************************************/
18
19#include <plib/ssg.h>
20#include "grvtxtable.h"
21#include "grmain.h"
22#include "grcam.h"
23#include "grshadow.h"
24#include "grskidmarks.h"
25#ifdef DMALLOC
26#include "dmalloc.h"
27#endif
28#ifdef WIN32
29#include <GL/glext.h>
30#endif
31#include "grscene.h"
32#include "grcar.h"
33#include "grutil.h"
34#include <GL/glu.h>
35
36/* from grloadac.cpp (beuark!) */
37extern double shad_xmax;
38extern double shad_ymax;
39extern double shad_xmin;
40extern double shad_ymin;
41
42
43void grVtxTable::copy_from (grVtxTable *src, int clone_flags)
44{
45 ssgVtxTable::copy_from (src, clone_flags);
46 if (src->texcoords1 != NULL && (clone_flags & SSG_CLONE_GEOMETRY)) {
47 texcoords1 = (ssgTexCoordArray *)(src->texcoords1->clone(clone_flags));
48 } else {
49 texcoords1 = src->texcoords1;
50 }
51
52 if (src->texcoords2 != NULL && (clone_flags & SSG_CLONE_GEOMETRY)) {
53 texcoords2 = (ssgTexCoordArray *)(src->texcoords2->clone(clone_flags));
54 } else {
56 }
57
58 if (src->texcoords3 != NULL && (clone_flags & SSG_CLONE_GEOMETRY)) {
59 texcoords3 = (ssgTexCoordArray *)(src->texcoords3->clone(clone_flags));
60 } else {
62 }
63
67
68 if (src->internalType == ARRAY) {
70 ssgDeRefDelete(indices);
71 if (src->indices != NULL && (clone_flags & SSG_CLONE_GEOMETRY)) {
72 indices = (ssgIndexArray *)(src->indices->clone(clone_flags));
73 } else {
74 indices = src->indices;
75 }
76
77 if (indices != NULL) {
78 indices->ref();
79 }
80
81 ssgDeRefDelete(stripes);
82 if (src->stripes != NULL && (clone_flags & SSG_CLONE_GEOMETRY)) {
83 stripes = (ssgIndexArray *)(src->stripes->clone(clone_flags));
84 } else {
85 stripes = src->stripes;
86 }
87
88 if (stripes != NULL) {
89 stripes->ref();
90 }
91 }
92}
93
94
95ssgBase *grVtxTable::clone (int clone_flags)
96{
97 grVtxTable *b = new grVtxTable(1, LEVEL0);
98 b->copy_from(this, clone_flags);
99 return b;
100}
101
102
103grVtxTable::grVtxTable (int _numMapLevel,int _mapLevel)
104{
105 numMapLevel = _numMapLevel;
106 mapLevelBitmap = _mapLevel;
107 indexCar = -1;
108 texcoords1 = NULL;
109 texcoords2 = NULL;
110 texcoords3 = NULL;
111 state1 = state2 = state3 = NULL;
113 numStripes = 0;
114 ssgVtxTable();
115}
116
117
118grVtxTable::grVtxTable (GLenum ty, ssgVertexArray *vl,
119 ssgIndexArray * stripeIndex,
120 int _numstripes,
121 ssgIndexArray *il,
122 ssgNormalArray *nl,
123 ssgTexCoordArray *tl,
124 ssgTexCoordArray *tl1,
125 ssgTexCoordArray *tl2,
126 ssgTexCoordArray *tl3,
127 int _numMapLevel,
128 int _mapLevel,
129 ssgColourArray *cl,
130 int _indexCar) : ssgVtxTable(ty, vl, nl, tl, cl)
131{
132 type = ssgTypeVtxTable();
133 numMapLevel = _numMapLevel;
134 mapLevelBitmap =_mapLevel;
135 indexCar = _indexCar;
136 texcoords1 = (tl1!=NULL) ? tl1 : new ssgTexCoordArray();
137 texcoords2 = (tl2!=NULL) ? tl2 : new ssgTexCoordArray();
138 texcoords3 = (tl3!=NULL) ? tl3 : new ssgTexCoordArray();
139 texcoords1->ref();
140 texcoords2->ref();
141 texcoords3->ref();
142 state1 = state2 = state3 = NULL;
144 indices = (il != NULL) ? il : new ssgIndexArray();
145 indices->ref();
146 stripes = (stripeIndex!=NULL) ? stripeIndex : new ssgIndexArray();
147 stripes->ref();
148 numStripes = _numstripes;
149}
150
151
152grVtxTable::grVtxTable (GLenum ty, ssgVertexArray *vl,
153 ssgNormalArray *nl,
154 ssgTexCoordArray *tl,
155 ssgTexCoordArray *tl1,
156 ssgTexCoordArray *tl2,
157 ssgTexCoordArray *tl3,
158 int _numMapLevel,
159 int _mapLevel,
160 ssgColourArray *cl,
161 int _indexCar) : ssgVtxTable(ty, vl, nl, tl, cl)
162{
163 type = ssgTypeVtxTable ();
164 numMapLevel = _numMapLevel;
165 mapLevelBitmap = _mapLevel;
166 indexCar = _indexCar;
167 texcoords1 = (tl1!=NULL) ? tl1 : new ssgTexCoordArray();
168 texcoords2 = (tl2!=NULL) ? tl2 : new ssgTexCoordArray();
169 texcoords3 = (tl3!=NULL) ? tl3 : new ssgTexCoordArray();
170 texcoords1->ref();
171 texcoords2->ref();
172 texcoords3->ref();
173 state1 = state2 = state3 = NULL;
175 numStripes = 0;
176}
177
178
180{
181 ssgDeRefDelete (texcoords1);
182 ssgDeRefDelete (texcoords2);
183 ssgDeRefDelete (texcoords3);
184
185 if(internalType==ARRAY) {
186 ssgDeRefDelete(indices);
187 ssgDeRefDelete(stripes);
188 }
189
190 ssgDeRefDelete(state1);
191 ssgDeRefDelete(state2);
192 ssgDeRefDelete(state3);
193}
194
195
196void grVtxTable::setState1 (ssgState *st)
197{
198 ssgDeRefDelete (state1);
199
200 state1 = (grMultiTexState *)st;
201
202 if (state1 != NULL) {
203 state1->ref();
204 }
205}
206
207
208void grVtxTable::setState2 (ssgState *st)
209{
210 ssgDeRefDelete (state2);
211
212 state2 = (grMultiTexState *)st;
213
214 if (state2 != NULL) {
215 state2->ref();
216 }
217}
218
219
220void grVtxTable::setState3 (ssgState *st)
221{
222 ssgDeRefDelete (state3);
223
224 state3 = (grMultiTexState *)st;
225
226 if (state3 != NULL) {
227 state3->ref();
228 }
229}
230
231
233{
234 if (!preDraw()) {
235 return;
236 }
237
238 if (hasState()) {
239 getState()->apply();
240 }
241
242#ifdef _SSG_USE_DLIST
243 if (dlist)
244 glCallList(dlist);
245 else
246#endif
247
248 if(internalType==TABLE) {
250 ssgVtxTable::draw_geometry ();
251 } else if (mapLevelBitmap < 0) {
253 } else {
255 }
256 } else {
259 } else if (mapLevelBitmap < 0) {
261 } else {
263 }
264 }
265
266 if (postDrawCB != NULL) {
267 (*postDrawCB)(this);
268 }
269}
270
272{
273 if (numMapLevel > 1) {
274 state1->apply(1);
275 }
276
277 if (numMapLevel > 2) {
278 state2->apply(2);
279 }
280
281 int num_colours = getNumColours ();
282 int num_normals = getNumNormals ();
283 int num_vertices = getNumVertices ();
284 int num_texcoords = getNumTexCoords ();
285
286 sgVec3 *vx = (sgVec3 *) vertices->get(0);
287 sgVec3 *nm = (sgVec3 *) normals->get(0);
288 sgVec2 *tx = (sgVec2 *) texcoords->get(0);
289 sgVec2 *tx1 = (sgVec2 *) texcoords1->get(0);
290 sgVec2 *tx2 = (sgVec2 *) texcoords2->get(0);
291 sgVec4 *cl = (sgVec4 *) colours->get(0);
292
293 TRACE_GL("draw_geometry_multi: start");
294 glBegin (gltype);
295
296 if (num_colours == 0) {
297 glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
298 }
299
300 if (num_colours == 1){
301 glColor4fv(cl[0]);
302 }
303
304 if (num_normals == 1) {
305 glNormal3fv(nm[0]);
306 }
307
308 for (int i = 0; i < num_vertices; i++) {
309 if (num_normals > 1) {
310 glNormal3fv(nm[i]);
311 }
312
313 if (num_texcoords > 1){
314 glTexCoord2fv (tx [ i ]);
315 glMultiTexCoord2fvARB(GL_TEXTURE0_ARB, tx[i]);
316 if (numMapLevel > 1) {
317 glMultiTexCoord2fvARB(GL_TEXTURE1_ARB, tx1[i]);
318 }
319
320 if (numMapLevel > 2) {
321 glMultiTexCoord2fvARB(GL_TEXTURE2_ARB, tx2[i]);
322 }
323 }
324 glVertex3fv(vx[i]);
325 }
326 glEnd ();
327
328 if (numMapLevel > 1) {
329 glActiveTextureARB(GL_TEXTURE1_ARB);
330 glDisable(GL_TEXTURE_2D);
331 }
332
333 if (numMapLevel > 2) {
334 glActiveTextureARB(GL_TEXTURE2_ARB);
335 glDisable(GL_TEXTURE_2D);
336 }
337
338 if (maxTextureUnits > 1) {
339 glActiveTextureARB(GL_TEXTURE0_ARB);
340 }
341 TRACE_GL("draw_geometry_multi: end");
342}
343
344
345
347{
348 tdble ttx = 0;
349 tdble tty = 0;
350 tdble ttz = 0;
351 sgMat4 mat;
352 sgVec3 axis;
353
354 TRACE_GL("draw_geometry_for_a_car: start");
355
356 if (mapLevelBitmap <= LEVELC2) {
357 /* UP Vector for OpenGl */
358 axis[0] = 0;
359 axis[1] = 0;
360 axis[2] = 1;
361
362 glActiveTextureARB(GL_TEXTURE2_ARB);
363 sgMakeRotMat4(mat, grCarInfo[indexCar].envAngle, axis);
364 glMatrixMode(GL_TEXTURE);
365 glLoadIdentity();
366 glMultMatrixf((float *)mat);
367 glMatrixMode(GL_MODELVIEW);
368 grEnvShadowState->apply(2);
369 }
370
371 grEnvState->apply(1);
372 glActiveTextureARB(GL_TEXTURE1_ARB);
373 glEnable(GL_TEXTURE_2D);
374 glMatrixMode(GL_TEXTURE);
375 glLoadIdentity();
376 ttx = grCarInfo[indexCar].distFromStart/50;
377 sgMakeTransMat4(mat, ttx, tty, ttz);
378 glMultMatrixf((float *)mat);
379 glMatrixMode(GL_MODELVIEW);
380
381 int num_colours = getNumColours();
382 int num_normals = getNumNormals();
383 int num_vertices = getNumVertices();
384 int num_texcoords = getNumTexCoords();
385
386 sgVec3 *vx = (sgVec3 *) vertices->get(0);
387 sgVec3 *nm = (sgVec3 *) normals->get(0);
388 sgVec2 *tx = (sgVec2 *) texcoords->get(0);
389 sgVec2 *tx1 = (sgVec2 *) texcoords1->get(0);
390 sgVec2 *tx2 = (sgVec2 *) texcoords2->get(0);
391 sgVec4 *cl = (sgVec4 *) colours->get(0);
392
393 glBegin(gltype);
394
395 if (num_colours == 0) {
396 glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
397 }
398
399 if (num_colours == 1) {
400 glColor4fv(cl[0]);
401 }
402
403 if (num_normals == 1) {
404 glNormal3fv(nm[0]);
405 }
406
407 for (int i = 0; i < num_vertices; i++)
408 {
409 if (num_normals > 1) {
410 glNormal3fv(nm[i]);
411 }
412
413 if (num_texcoords > 1) {
414 glMultiTexCoord2fvARB(GL_TEXTURE0_ARB, tx[i]);
415 if (mapLevelBitmap <= LEVELC2) {
416 glMultiTexCoord2fvARB(GL_TEXTURE2_ARB, tx2[i]);
417 }
418 glMultiTexCoord2fvARB(GL_TEXTURE1_ARB, tx1[i]);
419 }
420 glVertex3fv(vx[i]);
421 }
422 glEnd ();
423
424 glActiveTextureARB(GL_TEXTURE1_ARB);
425 glDisable(GL_TEXTURE_2D);
426 glMatrixMode(GL_TEXTURE);
427 glLoadIdentity();
428 glMatrixMode(GL_MODELVIEW);
429 if (mapLevelBitmap <= LEVELC2) {
430 glActiveTextureARB(GL_TEXTURE2_ARB);
431 glDisable(GL_TEXTURE_2D);
432 }
433 glActiveTextureARB(GL_TEXTURE0_ARB);
434
435 TRACE_GL("draw_geometry_for_a_car: end");
436}
437
438
440{
441 int num_colours = getNumColours();
442 int num_normals = getNumNormals();
443 int num_texcoords = getNumTexCoords();
444
445 sgVec3 *nm = (sgVec3 *) normals->get(0);
446 sgVec4 *cl = (sgVec4 *) colours->get(0);
447
448 if (numMapLevel > 1) {
449 state1->apply(1);
450 }
451
452 if (numMapLevel > 2) {
453 state2->apply(2);
454 }
455
456 if (maxTextureUnits > 1) {
457 glActiveTextureARB(GL_TEXTURE0_ARB);
458 }
459
460 glEnable (GL_TEXTURE_2D);
461
462 if (num_colours == 0) {
463 glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
464 }
465
466 if (num_colours == 1) {
467 glColor4fv(cl[0]);
468 }
469
470 if (num_normals == 1) {
471 glNormal3fv(nm[0]);
472 }
473
474 glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
475
476 if (num_normals > 1) {
477 glEnableClientState(GL_NORMAL_ARRAY);
478 glNormalPointer(GL_FLOAT, 0, normals->get(0));
479 }
480
481 if (num_texcoords > 1) {
482 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
483 glTexCoordPointer(2, GL_FLOAT, 0, texcoords->get(0));
484
485 if (numMapLevel > 1) {
486 glClientActiveTextureARB(GL_TEXTURE1_ARB);
487 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
488 glTexCoordPointer(2, GL_FLOAT, 0, texcoords1->get(0));
489 }
490
491 if (numMapLevel > 2) {
492 glClientActiveTextureARB(GL_TEXTURE2_ARB);
493 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
494 glTexCoordPointer(2, GL_FLOAT, 0, texcoords2->get(0));
495 }
496
497 }
498
499 glEnableClientState(GL_VERTEX_ARRAY);
500 glVertexPointer(3, GL_FLOAT, 0, vertices->get(0));
501
502 if (maxTextureUnits > 1) {
503 glClientActiveTextureARB(GL_TEXTURE0_ARB);
504 }
505 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
506
507
508 int i = 0;
509 short *ii = NULL;
510 int j = 0;
511 int p = 0;
512
513 for (j = 0; j < numStripes; j++) {
514 i = (short)*(stripes->get(j));
515 ii = indices->get(p);
516 glDrawElements(gltype, i, GL_UNSIGNED_SHORT, ii);
517 p += i;
518 }
519
520 glPopClientAttrib ();
521 if (numMapLevel > 1) {
522 glActiveTextureARB(GL_TEXTURE1_ARB);
523 glDisable(GL_TEXTURE_2D);
524 }
525
526 if (numMapLevel > 2) {
527 glActiveTextureARB(GL_TEXTURE2_ARB);
528 glDisable(GL_TEXTURE_2D);
529 }
530
531 if (maxTextureUnits > 1) {
532 glActiveTextureARB(GL_TEXTURE0_ARB);
533 }
534}
535
536
538{
539 int num_colours = getNumColours();
540 int num_normals = getNumNormals();
541 int num_texcoords = getNumTexCoords();
542 tdble ttx = 0;
543 tdble tty = 0;
544 tdble ttz = 0;
545 sgMat4 mat;
546 sgMat4 mat2;
547 sgMat4 mat4;
548 sgVec3 axis;
549
550 sgVec3 *nm = (sgVec3 *) normals->get(0);
551 sgVec4 *cl = (sgVec4 *) colours->get(0);
552
553 if (mapLevelBitmap <= LEVELC2) {
554 /* UP Vector for OpenGl */
555 axis[0] = 0;
556 axis[1] = 0;
557 axis[2] = 1;
558
559 glActiveTextureARB(GL_TEXTURE2_ARB);
560 sgMakeRotMat4(mat, grCarInfo[indexCar].envAngle, axis);
561 glMatrixMode(GL_TEXTURE);
562 glLoadIdentity();
563 glMultMatrixf((float *)mat);
564 glMatrixMode(GL_MODELVIEW);
565 grEnvShadowState->apply(2);
566 }
567
571
572 /* UP Vector for OpenGl */
573 axis[0]=0;
574 axis[1]=0;
575 axis[2]=1;
576
577 mat2[0][0] = grCarInfo[indexCar].sx;
578 mat2[0][1] = 0;
579 mat2[0][2] = 0;
580 mat2[0][3] = 0 ;
581
582 mat2[1][0] = 0;
583 mat2[1][1] = grCarInfo[indexCar].sy;
584 mat2[1][2] = 0;
585 mat2[1][3] = 0 ;
586
587 mat2[2][0] = 0;
588 mat2[2][1] = 0;
589 mat2[2][2] = 1;
590 mat2[2][3] = 0 ;
591
592
593 mat2[3][0] = 0;
594 mat2[3][1] = 0;
595 mat2[3][2] = 0;
596 mat2[3][3] = 1;
597
598
599 glActiveTextureARB(GL_TEXTURE3_ARB);
600 sgMakeRotMat4(mat, grCarInfo[indexCar].envAngle, axis);
601 glMatrixMode(GL_TEXTURE);
602 glLoadIdentity();
603
604 sgMakeTransMat4(mat4, xxx, yyy, 0);
605 glMultMatrixf((float *)mat4);
606
607 glMultMatrixf((float *)mat);
608 glMultMatrixf((float *)mat2);
609
610 glMatrixMode(GL_MODELVIEW);
611 grEnvShadowStateOnCars->apply(3);
612 }
613
614
615 grEnvState->apply(1);
616 glActiveTextureARB(GL_TEXTURE1_ARB);
617 glEnable(GL_TEXTURE_2D);
618 glMatrixMode(GL_TEXTURE);
619 glLoadIdentity();
620
621 ttx = grCarInfo[indexCar].distFromStart/50;
622 sgMakeTransMat4(mat, ttx, tty, ttz);
623 glMultMatrixf((float *)mat);
624 glMatrixMode(GL_MODELVIEW);
625
626 glActiveTextureARB(GL_TEXTURE0_ARB);
627 glEnable(GL_TEXTURE_2D);
628
629 if (num_colours == 0) {
630 glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
631 }
632
633 if (num_colours == 1) {
634 glColor4fv(cl[0]);
635 }
636
637 if (num_normals == 1) {
638 glNormal3fv(nm[0]);
639 }
640
641 glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
642
643 if (num_normals > 1) {
644 glEnableClientState(GL_NORMAL_ARRAY);
645 glNormalPointer(GL_FLOAT, 0, normals->get(0));
646 }
647
648 if (num_texcoords > 1) {
649 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
650 glTexCoordPointer(2, GL_FLOAT, 0, texcoords->get(0));
651
652 glClientActiveTextureARB(GL_TEXTURE1_ARB);
653 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
654 glTexCoordPointer(2, GL_FLOAT, 0, texcoords1->get(0));
655
656 if (mapLevelBitmap <= LEVELC2) {
657 glClientActiveTextureARB(GL_TEXTURE2_ARB);
658 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
659 glTexCoordPointer(2, GL_FLOAT, 0, texcoords2->get(0));
660 }
661
662 if (mapLevelBitmap <= LEVELC3) {
663 glClientActiveTextureARB (GL_TEXTURE3_ARB);
664 glEnableClientState (GL_TEXTURE_COORD_ARRAY);
665 glTexCoordPointer (2, GL_FLOAT, 0, texcoords3->get(0));
666 }
667 }
668
669 glEnableClientState(GL_VERTEX_ARRAY);
670 glVertexPointer(3, GL_FLOAT, 0, vertices->get(0));
671
672 glClientActiveTextureARB (GL_TEXTURE0_ARB);
673 glEnableClientState (GL_TEXTURE_COORD_ARRAY);
674
675 int i = 0;
676 short *ii = NULL;
677 int j = 0;
678 int p = 0;
679
680 for (j = 0; j < numStripes; j++) {
681 i = (short)*(stripes->get(j));
682 ii = indices->get(p);
683 glDrawElements(gltype, i, GL_UNSIGNED_SHORT, ii);
684 p += i;
685 }
686
687 glPopClientAttrib();
688 glActiveTextureARB(GL_TEXTURE1_ARB);
689 glDisable (GL_TEXTURE_2D);
690 glMatrixMode(GL_TEXTURE);
691 glLoadIdentity();
692 glMatrixMode(GL_MODELVIEW);
693
694 if (mapLevelBitmap <= LEVELC2) {
695 glActiveTextureARB(GL_TEXTURE2_ARB);
696 glMatrixMode(GL_TEXTURE);
697 glLoadIdentity();
698 glMatrixMode(GL_MODELVIEW);
699 glDisable(GL_TEXTURE_2D);
700 }
701
703 glActiveTextureARB(GL_TEXTURE3_ARB);
704 glMatrixMode(GL_TEXTURE);
705 glLoadIdentity();
706 glMatrixMode(GL_MODELVIEW);
707 glDisable(GL_TEXTURE_2D);
708 }
709
710 glActiveTextureARB (GL_TEXTURE0_ARB);
711}
static Point p[4]
Definition Convex.cpp:54
grVtxTable(int _numMapLevel, int _mapLevel)
grMultiTexState * state1
Definition grvtxtable.h:61
virtual ssgBase * clone(int clone_flags=0)
grMultiTexState * state3
Definition grvtxtable.h:63
int getNumVertices()
Definition grvtxtable.h:146
int numMapLevel
Definition grvtxtable.h:84
ssgTexCoordArray * texcoords3
Definition grvtxtable.h:81
void draw_geometry_for_a_car_array()
grMultiTexState * state2
Definition grvtxtable.h:62
int numStripes
Definition grvtxtable.h:73
int getNumNormals()
Definition grvtxtable.h:147
ssgTexCoordArray * texcoords2
Definition grvtxtable.h:80
virtual ~grVtxTable(void)
virtual void copy_from(grVtxTable *src, int clone_flags)
int internalType
Definition grvtxtable.h:67
int getNumTexCoords()
Definition grvtxtable.h:149
void setState3(ssgState *st)
void draw_geometry_for_a_car()
int getNumColours()
Definition grvtxtable.h:148
ssgIndexArray * indices
Definition grvtxtable.h:71
int mapLevelBitmap
Definition grvtxtable.h:85
ssgIndexArray * stripes
Definition grvtxtable.h:72
void draw_geometry_array()
void setState2(ssgState *st)
void setState1(ssgState *st)
virtual void draw()
void draw_geometry_multi()
tgrCarInfo * grCarInfo
Definition grmain.cpp:65
double shad_xmin
Definition grloadac.cpp:47
double shad_xmax
Definition grloadac.cpp:45
double shad_ymax
Definition grloadac.cpp:46
double shad_ymin
Definition grloadac.cpp:48
int maxTextureUnits
Definition grmain.cpp:47
float tdble
Floating point type used in TORCS.
Definition tgf.h:47
grMultiTexState * grEnvState
Definition grscene.cpp:61
grMultiTexState * grEnvShadowState
Definition grscene.cpp:62
grMultiTexState * grEnvShadowStateOnCars
Definition grscene.cpp:63
#define TRACE_GL(msg)
Definition grutil.h:28
#define LEVELC3
Definition grvtxtable.h:51
#define TABLE
Definition grvtxtable.h:66
#define LEVEL0
Definition grvtxtable.h:52
#define ARRAY
Definition grvtxtable.h:65
#define LEVELC2
Definition grvtxtable.h:50