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));
49 texcoords1 = src->texcoords1;
52 if (src->
texcoords2 != NULL && (clone_flags & SSG_CLONE_GEOMETRY)) {
58 if (src->
texcoords3 != NULL && (clone_flags & SSG_CLONE_GEOMETRY)) {
71 if (src->
indices != NULL && (clone_flags & SSG_CLONE_GEOMETRY)) {
82 if (src->
stripes != NULL && (clone_flags & SSG_CLONE_GEOMETRY)) {
119 ssgIndexArray * stripeIndex,
123 ssgTexCoordArray *tl,
124 ssgTexCoordArray *tl1,
125 ssgTexCoordArray *tl2,
126 ssgTexCoordArray *tl3,
130 int _indexCar) : ssgVtxTable(ty, vl, nl, tl, cl)
132 type = ssgTypeVtxTable();
136 texcoords1 = (tl1!=NULL) ? tl1 :
new ssgTexCoordArray();
137 texcoords2 = (tl2!=NULL) ? tl2 :
new ssgTexCoordArray();
138 texcoords3 = (tl3!=NULL) ? tl3 :
new ssgTexCoordArray();
144 indices = (il != NULL) ? il :
new ssgIndexArray();
146 stripes = (stripeIndex!=NULL) ? stripeIndex :
new ssgIndexArray();
154 ssgTexCoordArray *tl,
155 ssgTexCoordArray *tl1,
156 ssgTexCoordArray *tl2,
157 ssgTexCoordArray *tl3,
161 int _indexCar) : ssgVtxTable(ty, vl, nl, tl, cl)
163 type = ssgTypeVtxTable ();
167 texcoords1 = (tl1!=NULL) ? tl1 :
new ssgTexCoordArray();
168 texcoords2 = (tl2!=NULL) ? tl2 :
new ssgTexCoordArray();
169 texcoords3 = (tl3!=NULL) ? tl3 :
new ssgTexCoordArray();
181 ssgDeRefDelete (texcoords1);
242 #ifdef _SSG_USE_DLIST 250 ssgVtxTable::draw_geometry ();
266 if (postDrawCB != NULL) {
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);
291 sgVec4 *cl = (sgVec4 *) colours->get(0);
293 TRACE_GL(
"draw_geometry_multi: start");
296 if (num_colours == 0) {
297 glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
300 if (num_colours == 1){
304 if (num_normals == 1) {
308 for (
int i = 0; i < num_vertices; i++) {
309 if (num_normals > 1) {
313 if (num_texcoords > 1){
314 glTexCoord2fv (tx [ i ]);
315 glMultiTexCoord2fvARB(GL_TEXTURE0_ARB, tx[i]);
317 glMultiTexCoord2fvARB(GL_TEXTURE1_ARB, tx1[i]);
321 glMultiTexCoord2fvARB(GL_TEXTURE2_ARB, tx2[i]);
329 glActiveTextureARB(GL_TEXTURE1_ARB);
330 glDisable(GL_TEXTURE_2D);
334 glActiveTextureARB(GL_TEXTURE2_ARB);
335 glDisable(GL_TEXTURE_2D);
339 glActiveTextureARB(GL_TEXTURE0_ARB);
341 TRACE_GL(
"draw_geometry_multi: end");
354 TRACE_GL(
"draw_geometry_for_a_car: start");
362 glActiveTextureARB(GL_TEXTURE2_ARB);
364 glMatrixMode(GL_TEXTURE);
366 glMultMatrixf((
float *)mat);
367 glMatrixMode(GL_MODELVIEW);
372 glActiveTextureARB(GL_TEXTURE1_ARB);
373 glEnable(GL_TEXTURE_2D);
374 glMatrixMode(GL_TEXTURE);
377 sgMakeTransMat4(mat, ttx, tty, ttz);
378 glMultMatrixf((
float *)mat);
379 glMatrixMode(GL_MODELVIEW);
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);
391 sgVec4 *cl = (sgVec4 *) colours->get(0);
395 if (num_colours == 0) {
396 glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
399 if (num_colours == 1) {
403 if (num_normals == 1) {
407 for (
int i = 0; i < num_vertices; i++)
409 if (num_normals > 1) {
413 if (num_texcoords > 1) {
414 glMultiTexCoord2fvARB(GL_TEXTURE0_ARB, tx[i]);
416 glMultiTexCoord2fvARB(GL_TEXTURE2_ARB, tx2[i]);
418 glMultiTexCoord2fvARB(GL_TEXTURE1_ARB, tx1[i]);
424 glActiveTextureARB(GL_TEXTURE1_ARB);
425 glDisable(GL_TEXTURE_2D);
426 glMatrixMode(GL_TEXTURE);
428 glMatrixMode(GL_MODELVIEW);
430 glActiveTextureARB(GL_TEXTURE2_ARB);
431 glDisable(GL_TEXTURE_2D);
433 glActiveTextureARB(GL_TEXTURE0_ARB);
435 TRACE_GL(
"draw_geometry_for_a_car: end");
445 sgVec3 *nm = (sgVec3 *) normals->get(0);
446 sgVec4 *cl = (sgVec4 *) colours->get(0);
457 glActiveTextureARB(GL_TEXTURE0_ARB);
460 glEnable (GL_TEXTURE_2D);
462 if (num_colours == 0) {
463 glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
466 if (num_colours == 1) {
470 if (num_normals == 1) {
474 glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
476 if (num_normals > 1) {
477 glEnableClientState(GL_NORMAL_ARRAY);
478 glNormalPointer(GL_FLOAT, 0, normals->get(0));
481 if (num_texcoords > 1) {
482 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
483 glTexCoordPointer(2, GL_FLOAT, 0, texcoords->get(0));
486 glClientActiveTextureARB(GL_TEXTURE1_ARB);
487 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
488 glTexCoordPointer(2, GL_FLOAT, 0, texcoords1->get(0));
492 glClientActiveTextureARB(GL_TEXTURE2_ARB);
493 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
494 glTexCoordPointer(2, GL_FLOAT, 0,
texcoords2->get(0));
499 glEnableClientState(GL_VERTEX_ARRAY);
500 glVertexPointer(3, GL_FLOAT, 0, vertices->get(0));
503 glClientActiveTextureARB(GL_TEXTURE0_ARB);
505 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
516 glDrawElements(gltype, i, GL_UNSIGNED_SHORT, ii);
520 glPopClientAttrib ();
522 glActiveTextureARB(GL_TEXTURE1_ARB);
523 glDisable(GL_TEXTURE_2D);
527 glActiveTextureARB(GL_TEXTURE2_ARB);
528 glDisable(GL_TEXTURE_2D);
532 glActiveTextureARB(GL_TEXTURE0_ARB);
550 sgVec3 *nm = (sgVec3 *) normals->get(0);
551 sgVec4 *cl = (sgVec4 *) colours->get(0);
559 glActiveTextureARB(GL_TEXTURE2_ARB);
561 glMatrixMode(GL_TEXTURE);
563 glMultMatrixf((
float *)mat);
564 glMatrixMode(GL_MODELVIEW);
599 glActiveTextureARB(GL_TEXTURE3_ARB);
601 glMatrixMode(GL_TEXTURE);
604 sgMakeTransMat4(mat4, xxx, yyy, 0);
605 glMultMatrixf((
float *)mat4);
607 glMultMatrixf((
float *)mat);
608 glMultMatrixf((
float *)mat2);
610 glMatrixMode(GL_MODELVIEW);
616 glActiveTextureARB(GL_TEXTURE1_ARB);
617 glEnable(GL_TEXTURE_2D);
618 glMatrixMode(GL_TEXTURE);
622 sgMakeTransMat4(mat, ttx, tty, ttz);
623 glMultMatrixf((
float *)mat);
624 glMatrixMode(GL_MODELVIEW);
626 glActiveTextureARB(GL_TEXTURE0_ARB);
627 glEnable(GL_TEXTURE_2D);
629 if (num_colours == 0) {
630 glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
633 if (num_colours == 1) {
637 if (num_normals == 1) {
641 glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
643 if (num_normals > 1) {
644 glEnableClientState(GL_NORMAL_ARRAY);
645 glNormalPointer(GL_FLOAT, 0, normals->get(0));
648 if (num_texcoords > 1) {
649 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
650 glTexCoordPointer(2, GL_FLOAT, 0, texcoords->get(0));
652 glClientActiveTextureARB(GL_TEXTURE1_ARB);
653 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
654 glTexCoordPointer(2, GL_FLOAT, 0, texcoords1->get(0));
657 glClientActiveTextureARB(GL_TEXTURE2_ARB);
658 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
659 glTexCoordPointer(2, GL_FLOAT, 0,
texcoords2->get(0));
663 glClientActiveTextureARB (GL_TEXTURE3_ARB);
664 glEnableClientState (GL_TEXTURE_COORD_ARRAY);
665 glTexCoordPointer (2, GL_FLOAT, 0,
texcoords3->get(0));
669 glEnableClientState(GL_VERTEX_ARRAY);
670 glVertexPointer(3, GL_FLOAT, 0, vertices->get(0));
672 glClientActiveTextureARB (GL_TEXTURE0_ARB);
673 glEnableClientState (GL_TEXTURE_COORD_ARRAY);
683 glDrawElements(gltype, i, GL_UNSIGNED_SHORT, ii);
688 glActiveTextureARB(GL_TEXTURE1_ARB);
689 glDisable (GL_TEXTURE_2D);
690 glMatrixMode(GL_TEXTURE);
692 glMatrixMode(GL_MODELVIEW);
695 glActiveTextureARB(GL_TEXTURE2_ARB);
696 glMatrixMode(GL_TEXTURE);
698 glMatrixMode(GL_MODELVIEW);
699 glDisable(GL_TEXTURE_2D);
703 glActiveTextureARB(GL_TEXTURE3_ARB);
704 glMatrixMode(GL_TEXTURE);
706 glMatrixMode(GL_MODELVIEW);
707 glDisable(GL_TEXTURE_2D);
710 glActiveTextureARB (GL_TEXTURE0_ARB);
void setState3(ssgState *st)
ssgTexCoordArray * texcoords3
ssgTexCoordArray * texcoords2
grMultiTexState * grEnvShadowState
void draw_geometry_array()
grVtxTable(int _numMapLevel, int _mapLevel)
virtual ssgBase * clone(int clone_flags=0)
virtual ~grVtxTable(void)
virtual void apply(int unit)
grMultiTexState * grEnvState
void draw_geometry_for_a_car()
float tdble
Floating point type used in TORCS.
void setState1(ssgState *st)
void draw_geometry_multi()
virtual void copy_from(grVtxTable *src, int clone_flags)
void setState2(ssgState *st)
grMultiTexState * grEnvShadowStateOnCars
void draw_geometry_for_a_car_array()