From: Sylvain Beucler Date: Sat, 31 Mar 2012 21:43:06 +0000 (+0000) Subject: Fix previous commit, I made a confusion when merging my changes with the trunk X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=commitdiff_plain;h=18b98d967eff786c89bfeed8e1f636f686bb1b10;p=freeglut Fix previous commit, I made a confusion when merging my changes with the trunk git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1223 7f0cb862-5218-0410-a997-914c9d46530a --- diff --git a/src/fg_geometry.c b/src/fg_geometry.c index 874e9bd..e589d4c 100644 --- a/src/fg_geometry.c +++ b/src/fg_geometry.c @@ -48,72 +48,20 @@ #ifndef GL_ES_VERSION_2_0 static void fghDrawGeometryWire11(GLfloat *vertices, GLfloat *normals, GLsizei numFaces, GLsizei numEdgePerFace) { - GLint attribute_v_coord = fgStructure.CurrentWindow->Window.attribute_v_coord; - GLint attribute_v_normal = fgStructure.CurrentWindow->Window.attribute_v_normal; + int i; + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_NORMAL_ARRAY); - if (fgState.HasOpenGL20 && (attribute_v_coord != -1 || attribute_v_normal != -1)) { - GLuint vbo_coords, vbo_normals; - GLuint numVertices = numFaces * numEdgePerFace; - - - if (numVertices > 0 && attribute_v_coord != -1) { - fghGenBuffers(1, &vbo_coords); - fghBindBuffer(GL_ARRAY_BUFFER, vbo_coords); - fghBufferData(GL_ARRAY_BUFFER, numVertices * 3 * sizeof(vertices[0]), - vertices, GL_STATIC_DRAW); - } - - if (numVertices > 0 && attribute_v_normal != -1) { - fghGenBuffers(1, &vbo_normals); - fghBindBuffer(GL_ARRAY_BUFFER, vbo_normals); - fghBufferData(GL_ARRAY_BUFFER, numVertices * 3 * sizeof(normals[0]), - normals, GL_STATIC_DRAW); - } + glVertexPointer(3, GL_FLOAT, 0, vertices); + glNormalPointer(GL_FLOAT, 0, normals); - if (vbo_coords) { - fghEnableVertexAttribArray(attribute_v_coord); - fghBindBuffer(GL_ARRAY_BUFFER, vbo_coords); - fghVertexAttribPointer( - attribute_v_coord, // attribute - 3, // number of elements per vertex, here (x,y,z) - GL_FLOAT, // the type of each element - GL_FALSE, // take our values as-is - 0, // no extra data between each position - 0 // offset of first element - ); - } + /* Draw per face (TODO: could use glMultiDrawArrays if available) */ + for (i=0; iWindow.attribute_v_coord; GLint attribute_v_normal = fgStructure.CurrentWindow->Window.attribute_v_normal; @@ -193,9 +140,10 @@ static void fghDrawGeometryWire(GLfloat *vertices, GLfloat *normals, GLsizei num /* User requested a 2.0 draw */ fghDrawGeometryWire20(vertices, normals, numFaces, numEdgePerFace, attribute_v_coord, attribute_v_normal); +#ifndef GL_ES_VERSION_2_0 else -#endif fghDrawGeometryWire11(vertices, normals, numFaces, numEdgePerFace); +#endif } @@ -213,78 +161,18 @@ static void fghDrawGeometryWire(GLfloat *vertices, GLfloat *normals, GLsizei num static void fghDrawGeometrySolid11(GLfloat *vertices, GLfloat *normals, GLubyte *vertIdxs, GLsizei numVertices, GLsizei numVertIdxs) { - GLint attribute_v_coord = fgStructure.CurrentWindow->Window.attribute_v_coord; - GLint attribute_v_normal = fgStructure.CurrentWindow->Window.attribute_v_normal; - - if (fgState.HasOpenGL20 && (attribute_v_coord != -1 || attribute_v_normal != -1)) { - GLuint vbo_coords, vbo_normals, ibo_elements; + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_NORMAL_ARRAY); - if (numVertices > 0 && attribute_v_coord != -1) { - fghGenBuffers(1, &vbo_coords); - fghBindBuffer(GL_ARRAY_BUFFER, vbo_coords); - fghBufferData(GL_ARRAY_BUFFER, numVertices * 3 * sizeof(vertices[0]), - vertices, GL_STATIC_DRAW); - } - - if (numVertices > 0 && attribute_v_normal != -1) { - fghGenBuffers(1, &vbo_normals); - fghBindBuffer(GL_ARRAY_BUFFER, vbo_normals); - fghBufferData(GL_ARRAY_BUFFER, numVertices * 3 * sizeof(normals[0]), - normals, GL_STATIC_DRAW); - } - - if (vertIdxs != NULL) { - fghGenBuffers(1, &ibo_elements); - fghBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo_elements); - fghBufferData(GL_ELEMENT_ARRAY_BUFFER, numVertIdxs * sizeof(vertIdxs[0]), - vertIdxs, GL_STATIC_DRAW); - } - - if (vbo_coords) { - fghEnableVertexAttribArray(attribute_v_coord); - fghBindBuffer(GL_ARRAY_BUFFER, vbo_coords); - fghVertexAttribPointer( - attribute_v_coord, // attribute - 3, // number of elements per vertex, here (x,y,z) - GL_FLOAT, // the type of each element - GL_FALSE, // take our values as-is - 0, // no extra data between each position - 0 // offset of first element - ); - }; - - if (vbo_normals) { - fghEnableVertexAttribArray(attribute_v_normal); - fghBindBuffer(GL_ARRAY_BUFFER, vbo_normals); - fghVertexAttribPointer( - attribute_v_normal, // attribute - 3, // number of elements per vertex, here (x,y,z) - GL_FLOAT, // the type of each element - GL_FALSE, // take our values as-is - 0, // no extra data between each position - 0 // offset of first element - ); - }; - - if (vertIdxs == NULL) { - glDrawArrays(GL_TRIANGLES, 0, numVertices); - } else { - fghBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo_elements); - glDrawElements(GL_TRIANGLES, numVertIdxs, GL_UNSIGNED_BYTE, 0); - } + glVertexPointer(3, GL_FLOAT, 0, vertices); + glNormalPointer(GL_FLOAT, 0, normals); + if (vertIdxs == NULL) + glDrawArrays(GL_TRIANGLES, 0, numVertices); + else + glDrawElements(GL_TRIANGLES, numVertIdxs, GL_UNSIGNED_BYTE, vertIdxs); - if (vbo_coords != 0) - fghDisableVertexAttribArray(attribute_v_coord); - if (vbo_normals != 0) - fghDisableVertexAttribArray(attribute_v_normal); - - if (vbo_coords != 0) - fghDeleteBuffers(1, &vbo_coords); - if (vbo_normals != 0) - fghDeleteBuffers(1, &vbo_normals); - if (ibo_elements != 0) - fghDeleteBuffers(1, &ibo_elements); - } + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); } #endif @@ -365,7 +253,6 @@ static void fghDrawGeometrySolid20(GLfloat *vertices, GLfloat *normals, GLubyte static void fghDrawGeometrySolid(GLfloat *vertices, GLfloat *normals, GLubyte *vertIdxs, GLsizei numVertices, GLsizei numVertIdxs) { -#ifndef GL_ES_VERSION_2_0 GLint attribute_v_coord = fgStructure.CurrentWindow->Window.attribute_v_coord; GLint attribute_v_normal = fgStructure.CurrentWindow->Window.attribute_v_normal; @@ -374,10 +261,11 @@ static void fghDrawGeometrySolid(GLfloat *vertices, GLfloat *normals, GLubyte *v fghDrawGeometrySolid20(vertices, normals, vertIdxs, numVertices, numVertIdxs, attribute_v_coord, attribute_v_normal); +#ifndef GL_ES_VERSION_2_0 else -#endif fghDrawGeometrySolid11(vertices, normals, vertIdxs, numVertices, numVertIdxs); +#endif } /* Shape decomposition to triangles