265
261
void rModel::Render(){
268
if ( !displayList_.Call() )
270
// close pending glBegin() blocks
273
// model display lists should definitely be compiled before other lists
274
rDisplayList::Cancel();
279
if (modelTexFaces.Len()!=modelFaces.Len())
281
if ( !modelTexFacesCoherent )
286
glTexCoordPointer(3,GL_FLOAT,0,&texVert[0]);
287
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
292
if ( !modelTexFacesCoherent )
294
rDisplayListFiller filler( displayList_, false );
295
glEnable(GL_CULL_FACE);
297
// sigh, we need to do it the complicated way
298
glBegin( GL_TRIANGLES );
299
for(int i=modelFaces.Len()-1;i>=0;i--)
301
for(int j=0;j<=2;j++)
303
if ( modelTexFaces.Len() > 0 )
305
glTexCoord3fv(reinterpret_cast<REAL *>(&(texVert(modelTexFaces(i).A[j]))));
307
if ( normals.Len() > 0 )
309
glNormal3fv(reinterpret_cast<REAL *>(&(normals(modelFaces(i).A[j]))));
311
glVertex3fv(reinterpret_cast<REAL *>(&(vertices(modelFaces(i).A[j]))));
316
glDisable(GL_CULL_FACE);
320
// glDrawElements works
321
if (normals.Len()>=vertices.Len())
323
glNormalPointer(GL_FLOAT,0,&normals[0]);
324
glEnableClientState(GL_NORMAL_ARRAY);
326
glVertexPointer(3,GL_FLOAT,0,&vertices[0]);
327
glEnableClientState(GL_VERTEX_ARRAY);
329
rDisplayListFiller filler( displayList_, false );
330
glEnable(GL_CULL_FACE);
332
glDrawElements(GL_TRIANGLES,
337
glDisable(GL_CULL_FACE);
341
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
342
glDisableClientState(GL_VERTEX_ARRAY);
343
glDisableClientState(GL_NORMAL_ARRAY);
265
// close pending glBegin() blocks
271
if (modelTexFaces.Len()!=modelFaces.Len())
273
if ( !modelTexFacesCoherent )
278
glTexCoordPointer(3,GL_FLOAT,0,&texVert[0]);
279
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
282
if ( !modelTexFacesCoherent )
284
// sigh, we need to do it the complicated way
285
glBegin( GL_TRIANGLES );
286
for(int i=modelFaces.Len()-1;i>=0;i--)
288
for(int j=0;j<=2;j++)
290
if ( modelTexFaces.Len() > 0 )
292
glTexCoord3fv(reinterpret_cast<REAL *>(&(texVert(modelTexFaces(i).A[j]))));
294
if ( normals.Len() > 0 )
296
glNormal3fv(reinterpret_cast<REAL *>(&(normals(modelFaces(i).A[j]))));
298
glVertex3fv(reinterpret_cast<REAL *>(&(vertices(modelFaces(i).A[j]))));
303
glDisable(GL_CULL_FACE);
307
// glDrawElements works
308
if (normals.Len()>=vertices.Len())
310
glNormalPointer(GL_FLOAT,0,&normals[0]);
311
glEnableClientState(GL_NORMAL_ARRAY);
313
glVertexPointer(3,GL_FLOAT,0,&vertices[0]);
314
glEnableClientState(GL_VERTEX_ARRAY);
316
glEnable(GL_CULL_FACE);
318
glDrawElements(GL_TRIANGLES,
323
glDisable(GL_CULL_FACE);
327
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
328
glDisableClientState(GL_VERTEX_ARRAY);
329
glDisableClientState(GL_NORMAL_ARRAY);