GlDrawElements again ! and always :)

I have the same problems !!!
I use GlDrawElements, but it runs slower than some call of glVertex and glVertexCoord !

I use ase file my code is :

void CObject3D::cree_list(BMPTexture* pTex){
//printf("Crée list …
");
int num_Tvecteur_temp=0;

//num_Tvecteur=0;

//Align textures coords.
//Align_All(); 

//TEXTURE ???????
if(num_Tvecteur > 0){
	printf("Avec Texture ...

");
objListe = glGenLists(1);
glNewList(objListe, GL_COMPILE);

	/*
	glEnable(GL_TEXTURE_2D);
	glEnableClientState(GL_VERTEX_ARRAY);
	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
	*/

	//glEnable(GL_TEXTURE_2D);
	//glColor3f(1.0,1.0,1.0);

	if( pTex == NULL){
		if(numerotex > 0){
			TGAtex[numerotex].Activer();
		}else
			glBindTexture(GL_TEXTURE_2D, 8);
			//pTex[1].SetActive();
		}else{
			if(numerotex > 0)
				pTex[numerotex].SetActive();
			//printf("Texture N° : %d_n",numerotex);
	}

	/*
	//Coordonnées vecteur
	glVertexPointer(3,GL_FLOAT,0,matrice_finale);
	//Coordonnes textures
	glTexCoordPointer(2,GL_FLOAT,0,matrice_Tfinale);
	//glTexCoordPointer(2,GL_FLOAT,0,temp_tab_tex);
	//Création Object..
	glDrawElements(GL_TRIANGLES,num_face * 3,GL_UNSIGNED_INT,matrice_face);
	*/
	

	
	glBegin(GL_TRIANGLES);
	  for(int j=0;j<num_face;j++){
			glTexCoord2f(matrice_Tfinale[matrice_Tface[(j*3+0)]*2+0],
						 matrice_Tfinale[matrice_Tface[(j*3+0)]*2+1]);

			glVertex3f(matrice_finale[matrice_face[(j*3+0)]*3+0],
					   matrice_finale[matrice_face[(j*3+0)]*3+1],
					   matrice_finale[matrice_face[(j*3+0)]*3+2]);

			glTexCoord2f(matrice_Tfinale[matrice_Tface[(j*3+1)]*2+0],
						 matrice_Tfinale[matrice_Tface[(j*3+1)]*2+1]);
			
			glVertex3f(matrice_finale[matrice_face[(j*3+1)]*3+0],
					   matrice_finale[matrice_face[(j*3+1)]*3+1],
					   matrice_finale[matrice_face[(j*3+1)]*3+2]);

			glTexCoord2f(matrice_Tfinale[matrice_Tface[(j*3+2)]*2+0],
						 matrice_Tfinale[matrice_Tface[(j*3+2)]*2+1]);

			glVertex3f(matrice_finale[matrice_face[(j*3+2)]*3+0],
					   matrice_finale[matrice_face[(j*3+2)]*3+1],
					   matrice_finale[matrice_face[(j*3+2)]*3+2]);
	  }
	glEnd();
	
	
	//glDisable(GL_TEXTURE_2D);

	/*
	glDisableClientState(GL_VERTEX_ARRAY);
	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
	*/

	glEndList();
	printf("Cree list finie

");
}else{ //SANS TEXTURE …
printf("Sans Texture …
");
change_couleur();
objListe = glGenLists(1);
glNewList(objListe, GL_COMPILE);
glDisable(GL_TEXTURE_2D);

	glEnableClientState(GL_VERTEX_ARRAY);
	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
	
	glVertexPointer(3,GL_FLOAT,0,matrice_finale);
	glDrawElements(GL_TRIANGLES,num_face*3,GL_UNSIGNED_INT,matrice_face);
	
	/*
	glBegin(GL_TRIANGLES);
	  for(int j=0;j<num_face;j++){
			glVertex3f(matrice_finale[matrice_face[(j*3+0)]*3+0],
					   matrice_finale[matrice_face[(j*3+0)]*3+1],
					   matrice_finale[matrice_face[(j*3+0)]*3+2]);
			
			glVertex3f(matrice_finale[matrice_face[(j*3+1)]*3+0],
					   matrice_finale[matrice_face[(j*3+1)]*3+1],
					   matrice_finale[matrice_face[(j*3+1)]*3+2]);
			
			glVertex3f(matrice_finale[matrice_face[(j*3+2)]*3+0],
					   matrice_finale[matrice_face[(j*3+2)]*3+1],
					   matrice_finale[matrice_face[(j*3+2)]*3+2]);
	  }
	glEnd();
	*/
	
	
	glDisableClientState(GL_VERTEX_ARRAY);
	//glEnable(GL_TEXTURE_2D);
	
	glEndList();
	//glEnableClientState(GL_TEXTURE_COORD_ARRAY);
	//glEnable(GL_TEXTURE_2D);
}

/*
objListe = glGenLists(1);
glNewList(objListe, GL_COMPILE);
change_couleur();
   glEnableClientState(GL_VERTEX_ARRAY);

   if(num_Tvecteur > 0){
	   glEnableClientState(GL_TEXTURE_COORD_ARRAY);
	   glEnable(GL_TEXTURE_2D);
	   if( pTex == NULL){
		   glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
		   glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
		   glBindTexture(GL_TEXTURE_2D, 1);
	   }else
		   pTex->SetActive();
   }else{
	   //glColor3f(1.0,1.0,1.0);
   }
	
   glVertexPointer(3,GL_FLOAT,0,matrice_finale);
   if(num_Tvecteur > 0){ glTexCoordPointer(2,GL_FLOAT,0,matrice_temp);}

   glDrawElements(GL_TRIANGLES,num_face*3,GL_UNSIGNED_INT,matrice_face);

   glDisableClientState(GL_VERTEX_ARRAY);
   if(num_Tvecteur > 0){glDisableClientState(GL_TEXTURE_COORD_ARRAY);}

glEndList();
*/	


printf("Fin de cree list ...

");
if(matrice_Tfinale) delete [] matrice_Tfinale;
if(matrice_finale) delete [] matrice_finale;
if(matrice_face) delete [] matrice_face;
if(matrice_Tface) delete [] matrice_Tface;
//if(temp_tab_tex) delete [] temp_tab_tex;

}

void CObject3D::Align_All(){
//Allocation mémoire temporaire
//temp_tab_triangle = new GLfloat[num_face * 3];
temp_tab_tex = new GLfloat[num_face * 3 * 2];
//printf("Alignement …
");

//Manipulation
for(int j=0;j<num_face;j++){
	temp_tab_tex[ (j*3) + 0 ] = matrice_Tfinale[matrice_Tface[(j*3+0)]*2+0];
	temp_tab_tex[ (j*3) + 1 ] = matrice_Tfinale[matrice_Tface[(j*3+0)]*2+1];

	/*
	temp_tab_triangle[ (j*3) + 0] = matrice_finale[matrice_face[(j*3+0)]*3+0];
	temp_tab_triangle[ (j*3) + 1] = matrice_finale[matrice_face[(j*3+0)]*3+1];
	temp_tab_triangle[ (j*3) + 2] = matrice_finale[matrice_face[(j*3+0)]*3+2];
	*/

	temp_tab_tex[ (j*3) + 2 ] = matrice_Tfinale[matrice_Tface[(j*3+1)]*2+0];
	temp_tab_tex[ (j*3) + 3 ] = matrice_Tfinale[matrice_Tface[(j*3+1)]*2+1];
		
	/*
	temp_tab_triangle[ (j*3) + 3] = matrice_finale[matrice_face[(j*3+1)]*3+0];
	temp_tab_triangle[ (j*3) + 4] = matrice_finale[matrice_face[(j*3+1)]*3+1];
	temp_tab_triangle[ (j*3) + 5] = matrice_finale[matrice_face[(j*3+1)]*3+2];
	*/

	temp_tab_tex[ (j*3) + 4 ] = matrice_Tfinale[matrice_Tface[(j*3+2)]*2+0];
	temp_tab_tex[ (j*3) + 5 ] = matrice_Tfinale[matrice_Tface[(j*3+2)]*2+1];

	/*
	temp_tab_triangle[ (j*3) + 6] = matrice_finale[matrice_face[(j*3+2)]*3+0];
	temp_tab_triangle[ (j*3) + 7] = matrice_finale[matrice_face[(j*3+2)]*3+1];
	temp_tab_triangle[ (j*3) + 8] = matrice_finale[matrice_face[(j*3+2)]*3+2];
	*/
}
//if(matrice_Tfinale) delete [] matrice_Tfinale;
//if(matrice_finale) delete [] matrice_finale;
//if(matrice_face) delete [] matrice_face;
//if(matrice_Tface) delete [] matrice_Tface;
//printf("Fin alignement...

");
}

There is a lot of code because there the 2 solution (gldraw … and glvertex !)

I don’t understand !!!

My 3D card : Maxi Gamer Pheonix of Guillemot
16 Mo 3dfx (but it’s old !) (- 10 FPS -> 1024768 16 bits)
it’s runs total ok in a TRIDENT 8 Mo in my notebook !!! ( + 35 FPS -> 800
600 32 bits)

why ? some have a very good code to recompile ase file (ou 3ds) to load them in OpenGL Programs very fast with quality ? !!!

Thanks !
bye
Cyril