2010-11-27 21 views
2

Je crée un tableau de positions pour dessiner et je suis coincé quand je me sers dma pour le tableauopengl vbo tableau dma

si je déclare la taille du tableau et POPULATE je peux le faire fonctionner mais si Je ne


float *datac; 
datac=NULL; 
datac = new float[12]; 

datac[0] = 0;datac[1] = 0;datac[2] = 0; 
datac[3] = 0;datac[4] = 100;datac[5] = 0; 
datac[6] = 100;datac[7] = 100;datac[8] = 0; 
datac[9] = 100;datac[10] = 0;datac[11] = 0; 

//how do I pass it through to these functions 
//this is what I was using when I done float datac[12] = .... 
//I have tried using this sizeof(*datac)*sizeof(float) 
//which compiles but just does not draw 

glBufferData(GL_ARRAY_BUFFER, sizeof(datac), datac, GL_STATIC_DRAW); 
glDrawArrays(GL_QUADS, 0, sizeof(datac)/ sizeof(float)/3); 

être ennuyeux et je ne peux pas penser ce que je dois faire

Répondre

2

Il est C++, vous pouvez utiliser std::vector et vous rendre la vie facile:

std::vector<float> datac(12); 

datac[0] = 0;datac[1] = 0;datac[2] = 0; 
datac[3] = 0;datac[4] = 100;datac[5] = 0; 
datac[6] = 100;datac[7] = 100;datac[8] = 0; 
datac[9] = 100;datac[10] = 0;datac[11] = 0; 

glBufferData(GL_ARRAY_BUFFER, datac.size()*sizeof(float), &datac[0], GL_STATIC_DRAW); 
// glVertexPointer in GL2 or glAttribPointer in GL3 comes here 
glDrawArrays(GL_QUADS, 0, datac.size()/3); 
+0

Merci, je l'ai juste fait avec std :: vector –

0

Hmm .. est le second paramètre à glBufferData

sizeof(datac)*12 

Edit: corrigé par les commentaires

sizeof (float) * 12

+0

j'ai réalisé qu'après que je posté mais je ne sais pas la taille du tableau sera. Quel est un moyen sûr d'obtenir la longueur du tableau? –

+0

bien que vous allouer le datac à un moment donné? Donc, vous devriez connaître la taille du tableau, le même que vous passez à nouveau à datac = new float [*] – Naveen

+0

WOW, c'était un vrai moment d'ennui. Merci. –

1

Le second paramètre à glBufferData doit être sizeof(float) * 12.

Vous devez également spécifier vos baies avec les fonctions gl*Pointer. Vous semblez utiliser Vec3s pour vos sommets, je crois que la valeur par défaut est Vec4. Par exemple:

GLuint VertexBuf; 
glGenBuffers(1, &VertexBuf); 
glBindBuffer(GL_ARRAY_BUFFER, VertexBuf); 
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*12, datac, GL_STATIC_DRAW); 
glVertexPointer(3, GL_FLOAT, 0, 0); 

glDrawArrays(GL_QUADS, 0, sizeof(float) * (12/3));