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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
float* tabVBO = vectorVBO->data();
int nb_elem = vectorVBO->size();
int taille_totale = nb_elem * sizeof (float);
glGenBuffers(1, &buf);
glBindBuffer(GL_ARRAY_BUFFER, buf);
glBufferData(GL_ARRAY_BUFFER, nb_elem * sizeof (float), NULL, GL_STREAM_DRAW);
glBufferSubData(GL_ARRAY_BUFFER, 0, nb_elem * sizeof (float), tabVBO);
glBindBuffer(GL_ARRAY_BUFFER, 0);
float* tabTexVBO = vectorTexVBO->data();
int nb_elem_tex = vectorTexVBO->size();
glGenBuffers(1, &bufTex);
glBindBuffer(GL_ARRAY_BUFFER, bufTex);
glBufferData(GL_ARRAY_BUFFER, nb_elem_tex * sizeof (float), NULL, GL_STREAM_DRAW);
glBufferSubData(GL_ARRAY_BUFFER, 0, nb_elem_tex * sizeof (float), tabTexVBO);
glBindBuffer(GL_ARRAY_BUFFER, 0);
if (tabParamIndexVBO->size()>0) for(int i=0;i <tabParamIndexVBO->size(); i++) {
ParamIndexVBO oneParamIndexVBO = tabParamIndexVBO->at(i);
if (oneParamIndexVBO.facesTrianglesVBO->size() > 0) {
//cout << "Triangles in GPU (taille) : " << oneParamIndexVBO.facesTrianglesVBO->size() << " (" << oneParamIndexVBO.facesTrianglesVBO->size() * sizeof (unsigned int) << ")" << endl;
taille_totale += oneParamIndexVBO.facesTrianglesVBO->size() * sizeof (unsigned int);
glGenBuffers(1, &oneParamIndexVBO.bufIndexTriangles);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, oneParamIndexVBO.bufIndexTriangles);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, oneParamIndexVBO.facesTrianglesVBO->size() * sizeof (unsigned int), NULL, GL_STREAM_DRAW);
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, oneParamIndexVBO.facesTrianglesVBO->size() * sizeof (unsigned int), oneParamIndexVBO.facesTrianglesVBO->data());
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
(*tabParamIndexVBO)[i].bufIndexTriangles = oneParamIndexVBO.bufIndexTriangles;
if (oneParamIndexVBO.texture > 0) {
glGenBuffers(1, &oneParamIndexVBO.bufIndexTexTriangles);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, oneParamIndexVBO.bufIndexTexTriangles);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, oneParamIndexVBO.texturesTrianglesVBO->size() * sizeof (unsigned int), NULL, GL_STREAM_DRAW);
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, oneParamIndexVBO.texturesTrianglesVBO->size() * sizeof (unsigned int), oneParamIndexVBO.texturesTrianglesVBO->data());
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
(*tabParamIndexVBO)[i].bufIndexTexTriangles = oneParamIndexVBO.bufIndexTexTriangles;
}
}
if (oneParamIndexVBO.facesQuadsVBO->size() > 0) {
//cout << "Quads in GPU (taille) : " << oneParamIndexVBO.facesQuadsVBO->size() << " (" << oneParamIndexVBO.facesQuadsVBO->size() * sizeof (unsigned int) << ")" << endl;
taille_totale += oneParamIndexVBO.facesQuadsVBO->size() * sizeof (unsigned int);
glGenBuffers(1, &oneParamIndexVBO.bufIndexQuads);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, oneParamIndexVBO.bufIndexQuads);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, oneParamIndexVBO.facesQuadsVBO->size() * sizeof (unsigned int), NULL, GL_STREAM_DRAW);
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, oneParamIndexVBO.facesQuadsVBO->size() * sizeof (unsigned int), oneParamIndexVBO.facesQuadsVBO->data());
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
(*tabParamIndexVBO)[i].bufIndexQuads = oneParamIndexVBO.bufIndexQuads;
if (oneParamIndexVBO.texture > 0) {
glGenBuffers(1, &oneParamIndexVBO.bufIndexTexQuads);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, oneParamIndexVBO.bufIndexTexQuads);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, oneParamIndexVBO.texturesQuadsVBO->size() * sizeof (unsigned int), NULL, GL_STREAM_DRAW);
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, oneParamIndexVBO.texturesQuadsVBO->size() * sizeof (unsigned int), oneParamIndexVBO.texturesQuadsVBO->data());
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
(*tabParamIndexVBO)[i].bufIndexTexQuads = oneParamIndexVBO.bufIndexTexQuads;
}
}
}
*idCallListMap = glGenLists(1);
glNewList(*idCallListMap, GL_COMPILE);
if (tabParamIndexVBO->size()>0) for(int i=0;i <tabParamIndexVBO->size(); i++) {
ParamIndexVBO oneParamIndexVBO = tabParamIndexVBO->at(i);
glColor3ub(oneParamIndexVBO.color.rouge,oneParamIndexVBO.color.vert,oneParamIndexVBO.color.bleu);
if (oneParamIndexVBO.facesTrianglesVBO->size() > 0) {
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, oneParamIndexVBO.texture);
glBindBuffer(GL_ARRAY_BUFFER, buf);
glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0));
glBindBuffer(GL_ARRAY_BUFFER, bufTex);
glTexCoordPointer(2, GL_FLOAT, 0, BUFFER_OFFSET(0));
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glClientActiveTexture(GL_TEXTURE0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, oneParamIndexVBO.bufIndexTriangles);
glDrawElements(GL_TRIANGLES, oneParamIndexVBO.facesTrianglesVBO->size(), GL_UNSIGNED_INT, BUFFER_OFFSET(0));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, oneParamIndexVBO.bufIndexTexTriangles);
glDrawElements(GL_QUADS, oneParamIndexVBO.texturesTrianglesVBO->size(), GL_UNSIGNED_INT, BUFFER_OFFSET(0));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
if (oneParamIndexVBO.facesQuadsVBO->size() > 0) {
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, oneParamIndexVBO.texture);
glBindBuffer(GL_ARRAY_BUFFER, buf);
glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0));
glBindBuffer(GL_ARRAY_BUFFER, bufTex);
glTexCoordPointer(2, GL_FLOAT, 0, BUFFER_OFFSET(0));
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glClientActiveTexture(GL_TEXTURE0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, oneParamIndexVBO.bufIndexQuads);
glDrawElements(GL_QUADS, oneParamIndexVBO.facesQuadsVBO->size(), GL_UNSIGNED_INT, BUFFER_OFFSET(0));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, oneParamIndexVBO.bufIndexTexQuads);
glDrawElements(GL_QUADS, oneParamIndexVBO.texturesQuadsVBO->size(), GL_UNSIGNED_INT, BUFFER_OFFSET(0));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
//glDisable(GL_TEXTURE_2D);
}
glEndList(); |
Partager