J'essaye de passer de l'affichage de mon GL_QUADS avec glBegin() à leur affichage avec un VBO. Malheureusement après mon changement, le programme n'affiche plus les QUADS. Tout ce que je vois est un écran noir. C'est ce que je suis en train de faire:OpenGl - L'objet tampon Vertex n'est pas dessiné à l'écran
Je définis deux VBO. Un pour les données de sommet, l'un des indices, et allouer un espace en eux:
glGenBuffersARB(2, pboIds);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, pboIds[0]);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, 50000*sizeof(GLfloat), 0, GL_STREAM_DRAW_ARB);
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, pboIds[1]);
glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 50000*sizeof(GLint), 0, GL_STREAM_DRAW_ARB);
Je leur carte et écrire des informations sur les:
float *ptr = (float*)glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_READ_WRITE_ARB);
int *ptrind = (int*)glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_READ_WRITE_ARB);
int nVertexCount=0;
for (...){
*ptr=vertX; ++ptr; *ptrind=nVertexCount; ++ptrind; nVertexCount++;
*ptr=vertY; ++ptr; *ptrind=nVertexCount; ++ptrind; nVertexCount++;
*ptr=vertZ; ++ptr; *ptrind=nVertexCount; ++ptrind; nVertexCount++;
}
glUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB);
Enfin, je tente de les afficher:
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, 0);
glDrawElements(GL_QUADS, nVertexCount, GL_INT, (pboIds+1));
glDisableClientState(GL_VERTEX_ARRAY);
Mon programme compile très bien. Je ne reçois aucun crash lors de l'exécution. Mais tout ce que je vois - est un écran noir. J'utilise la même routine pour déterminer les coordonnées de vertex comme je l'ai fait avec glBegin (GL_QUADS). À l'époque, je pouvais voir des quads blancs sur l'écran. Peut-être que je fais quelque chose de mal dans mon code VBO?
EDIT: Malheureusement, je suis sous Windows. Dois-je faire quelque chose pour arrêter d'utiliser l'extension ARB? Je que d'un exemple de code:
#ifdef _WIN32
PFNGLGENBUFFERSARBPROC pglGenBuffersARB = 0;
PFNGLBINDBUFFERARBPROC pglBindBufferARB = 0;
PFNGLBUFFERDATAARBPROC pglBufferDataARB = 0;
PFNGLBUFFERSUBDATAARBPROC pglBufferSubDataARB = 0;
PFNGLDELETEBUFFERSARBPROC pglDeleteBuffersARB = 0;
PFNGLGETBUFFERPARAMETERIVARBPROC pglGetBufferParameterivARB = 0;
PFNGLMAPBUFFERARBPROC pglMapBufferARB = 0;
PFNGLUNMAPBUFFERARBPROC pglUnmapBufferARB = 0;
#define glGenBuffersARB pglGenBuffersARB
#define glBindBufferARB pglBindBufferARB
#define glBufferDataARB pglBufferDataARB
#define glBufferSubDataARB pglBufferSubDataARB
#define glDeleteBuffersARB pglDeleteBuffersARB
#define glGetBufferParameterivARB pglGetBufferParameterivARB
#define glMapBufferARB pglMapBufferARB
#define glUnmapBufferARB pglUnmapBufferARB
#endif
Avec le nouveau code VBO, définissez-vous toujours la couleur actuelle via 'glColor()'? – genpfault
@ genpfault: Je pense que je ne définis aucune couleur. Devrais-je? EDIT: J'ai fait un essai avec glColor3f (1.0f, 1.0f, 1.0f); toujours tout noir, aucun signe de GL_QUADS. – Fejwin
'for (...) {' Qu'est-ce que le '...' ici? –