1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| bool OBJ_loadObj_Array(char *filename,OBJ_VBO *VertexBufferObjectArray,const int sizeArray)
{
int compteurArray=0,nbVertices,codeErreur;
//... Chargement fichier .obj dans "VertexBufferObjectArray"
compteurArray=0;
while(1)
{
nbVertices=3*VertexBufferObjectArray[compteurArray].nbFaces;
codeErreur=glGetError();
if(codeErreur!=0)
{
printf("Erreur avant glGenBuffers() '%s', presser une touche pour quitter\n",glewGetErrorString(codeErreur));
getch();
return false;
}
glGenBuffers(1,&VertexBufferObjectArray[compteurArray].bufferVRAM);
codeErreur=glGetError();
if(codeErreur!=0)
{
printf("Erreur glGenBuffers() '%s', presser une touche pour quitter\n",glewGetErrorString(codeErreur));
getch();
return false;
}
glBindBuffer(GL_ARRAY_BUFFER,VertexBufferObjectArray[compteurArray].bufferVRAM); //Bindage vers espace mémoire VRAM
codeErreur=glGetError();
if(codeErreur!=0)
{
printf("Erreur glBindBuffer() '%s', presser une touche pour quitter\n",glewGetErrorString(codeErreur));
getch();
return false;
}
glBufferData(GL_ARRAY_BUFFER,nbVertices*3*sizeof(float)+nbVertices*2*sizeof(float)+nbVertices*3*sizeof(float)+nbVertices*3*sizeof(float),NULL,GL_STREAM_DRAW);
codeErreur=glGetError();
if(codeErreur!=0)
{
printf("Erreur glBufferData() '%s', presser une touche pour quitter\n",glewGetErrorString(codeErreur));
getch();
return false;
}
glBufferSubData(GL_ARRAY_BUFFER,0,nbVertices*3*sizeof(float),VertexBufferObjectArray[compteurArray].vertices); //Mise en mémoire coordonnées vertices
glBufferSubData(GL_ARRAY_BUFFER,nbVertices*3*sizeof(float),nbVertices*2*sizeof(float),VertexBufferObjectArray[compteurArray].coord_tex); //Mise en mémoire coordonnées de texture
glBufferSubData(GL_ARRAY_BUFFER,nbVertices*3*sizeof(float)+nbVertices*2*sizeof(float),nbVertices*3*sizeof(float),VertexBufferObjectArray[compteurArray].couleurs); //Mise en mémoire couleurs
codeErreur=glGetError();
if(codeErreur!=0)
{
printf("Erreur glBufferSubData() '%s', presser une touche pour quitter\n",glewGetErrorString(codeErreur));
getch();
return false;
}
free(VertexBufferObjectArray[compteurArray].vertices);
free(VertexBufferObjectArray[compteurArray].coord_tex);
free(VertexBufferObjectArray[compteurArray].couleurs);
glBindBuffer(GL_ARRAY_BUFFER,0);
codeErreur=glGetError();
if(codeErreur!=0)
{
printf("Erreur glBindBuffer() '%s', presser une touche pour quitter\n",glewGetErrorString(codeErreur));
getch();
return false;
}
compteurArray++;
if(compteurArray==sizeArray)
break;
}
printf("Loaded mesh %s (%d VBOs)\n\n",nameObj,sizeArray);
return true;
} |
Partager