TORCS  1.3.9
The Open Racing Car Simulator
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!) */
37 extern double shad_xmax;
38 extern double shad_ymax;
39 extern double shad_xmin;
40 extern double shad_ymin;
41 
42 
43 void 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 {
55  texcoords2 = src->texcoords2;
56  }
57 
58  if (src->texcoords3 != NULL && (clone_flags & SSG_CLONE_GEOMETRY)) {
59  texcoords3 = (ssgTexCoordArray *)(src->texcoords3->clone(clone_flags));
60  } else {
61  texcoords3 = src->texcoords3;
62  }
63 
64  numMapLevel = src->numMapLevel;
67 
68  if (src->internalType == ARRAY) {
69  numStripes = src->numStripes;
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 
95 ssgBase *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 
103 grVtxTable::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 
118 grVtxTable::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 
152 grVtxTable::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 
196 void 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 
208 void 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 
220 void 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);
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);
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);
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 }
void setState3(ssgState *st)
Definition: grvtxtable.cpp:220
int numStripes
Definition: grvtxtable.h:76
ssgTexCoordArray * texcoords3
Definition: grvtxtable.h:84
ssgTexCoordArray * texcoords2
Definition: grvtxtable.h:83
grMultiTexState * grEnvShadowState
Definition: grscene.cpp:61
void draw_geometry_array()
Definition: grvtxtable.cpp:439
virtual void draw()
Definition: grvtxtable.cpp:232
#define TRACE_GL(msg)
Definition: grutil.h:28
ssgIndexArray * indices
Definition: grvtxtable.h:74
grVtxTable(int _numMapLevel, int _mapLevel)
Definition: grvtxtable.cpp:103
ssgIndexArray * stripes
Definition: grvtxtable.h:75
int getNumColours()
Definition: grvtxtable.h:151
grMultiTexState * state3
Definition: grvtxtable.h:66
virtual ssgBase * clone(int clone_flags=0)
Definition: grvtxtable.cpp:95
virtual ~grVtxTable(void)
Definition: grvtxtable.cpp:179
int getNumTexCoords()
Definition: grvtxtable.h:152
double shad_xmax
Definition: grloadac.cpp:45
#define LEVELC2
Definition: grvtxtable.h:51
virtual void apply(int unit)
int mapLevelBitmap
Definition: grvtxtable.h:88
grMultiTexState * state1
Definition: grvtxtable.h:64
grMultiTexState * grEnvState
Definition: grscene.cpp:60
void draw_geometry_for_a_car()
Definition: grvtxtable.cpp:346
double shad_xmin
Definition: grloadac.cpp:47
#define TABLE
Definition: grvtxtable.h:69
int indexCar
Definition: grvtxtable.h:89
float tdble
Floating point type used in TORCS.
Definition: tgf.h:48
int getNumNormals()
Definition: grvtxtable.h:150
static Point p[4]
Definition: Convex.cpp:54
void setState1(ssgState *st)
Definition: grvtxtable.cpp:196
grMultiTexState * state2
Definition: grvtxtable.h:65
void draw_geometry_multi()
Definition: grvtxtable.cpp:271
tdble distFromStart
Definition: grcar.h:63
tdble sy
Definition: grcar.h:69
tgrCarInfo * grCarInfo
Definition: grmain.cpp:66
virtual void copy_from(grVtxTable *src, int clone_flags)
Definition: grvtxtable.cpp:43
tdble sx
Definition: grcar.h:68
tdble py
Definition: grcar.h:67
int numMapLevel
Definition: grvtxtable.h:87
void setState2(ssgState *st)
Definition: grvtxtable.cpp:208
#define LEVELC3
Definition: grvtxtable.h:53
int internalType
Definition: grvtxtable.h:70
grMultiTexState * grEnvShadowStateOnCars
Definition: grscene.cpp:62
int maxTextureUnits
Definition: grmain.cpp:48
double shad_ymax
Definition: grloadac.cpp:46
void draw_geometry_for_a_car_array()
Definition: grvtxtable.cpp:537
int getNumVertices()
Definition: grvtxtable.h:149
tdble px
Definition: grcar.h:66
double shad_ymin
Definition: grloadac.cpp:48
#define LEVEL0
Definition: grvtxtable.h:55
#define ARRAY
Definition: grvtxtable.h:68