From bc861a62269504a0f7001548d33626be17b77339 Mon Sep 17 00:00:00 2001 From: Sylvain Beucler Date: Sun, 1 Apr 2012 12:55:39 +0000 Subject: [PATCH] Fix OpenGL 2.0 declarations so code builds on Windows & Android git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1225 7f0cb862-5218-0410-a997-914c9d46530a --- src/fg_geometry.c | 41 +++++++++++++++++++++-------------------- src/fg_gl2.c | 20 ++------------------ src/fg_gl2.h | 6 ++++++ 3 files changed, 29 insertions(+), 38 deletions(-) diff --git a/src/fg_geometry.c b/src/fg_geometry.c index e589d4c..427a099 100644 --- a/src/fg_geometry.c +++ b/src/fg_geometry.c @@ -28,6 +28,7 @@ #include #include "fg_internal.h" #include "fg_gl2.h" +#include /* * Need more types of polyhedra? See CPolyhedron in MRPT @@ -74,21 +75,21 @@ static void fghDrawGeometryWire20(GLfloat *vertices, GLfloat *normals, GLsizei n 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); + fghBindBuffer(FGH_ARRAY_BUFFER, vbo_coords); + fghBufferData(FGH_ARRAY_BUFFER, numVertices * 3 * sizeof(vertices[0]), + vertices, FGH_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); + fghBindBuffer(FGH_ARRAY_BUFFER, vbo_normals); + fghBufferData(FGH_ARRAY_BUFFER, numVertices * 3 * sizeof(normals[0]), + normals, FGH_STATIC_DRAW); } if (vbo_coords) { fghEnableVertexAttribArray(attribute_v_coord); - fghBindBuffer(GL_ARRAY_BUFFER, vbo_coords); + fghBindBuffer(FGH_ARRAY_BUFFER, vbo_coords); fghVertexAttribPointer( attribute_v_coord, // attribute 3, // number of elements per vertex, here (x,y,z) @@ -101,7 +102,7 @@ static void fghDrawGeometryWire20(GLfloat *vertices, GLfloat *normals, GLsizei n if (vbo_normals) { fghEnableVertexAttribArray(attribute_v_normal); - fghBindBuffer(GL_ARRAY_BUFFER, vbo_normals); + fghBindBuffer(FGH_ARRAY_BUFFER, vbo_normals); fghVertexAttribPointer( attribute_v_normal, // attribute 3, // number of elements per vertex, here (x,y,z) @@ -185,28 +186,28 @@ static void fghDrawGeometrySolid20(GLfloat *vertices, GLfloat *normals, GLubyte 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); + fghBindBuffer(FGH_ARRAY_BUFFER, vbo_coords); + fghBufferData(FGH_ARRAY_BUFFER, numVertices * 3 * sizeof(vertices[0]), + vertices, FGH_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); + fghBindBuffer(FGH_ARRAY_BUFFER, vbo_normals); + fghBufferData(FGH_ARRAY_BUFFER, numVertices * 3 * sizeof(normals[0]), + normals, FGH_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); + fghBindBuffer(FGH_ELEMENT_ARRAY_BUFFER, ibo_elements); + fghBufferData(FGH_ELEMENT_ARRAY_BUFFER, numVertIdxs * sizeof(vertIdxs[0]), + vertIdxs, FGH_STATIC_DRAW); } if (vbo_coords) { fghEnableVertexAttribArray(attribute_v_coord); - fghBindBuffer(GL_ARRAY_BUFFER, vbo_coords); + fghBindBuffer(FGH_ARRAY_BUFFER, vbo_coords); fghVertexAttribPointer( attribute_v_coord, // attribute 3, // number of elements per vertex, here (x,y,z) @@ -219,7 +220,7 @@ static void fghDrawGeometrySolid20(GLfloat *vertices, GLfloat *normals, GLubyte if (vbo_normals) { fghEnableVertexAttribArray(attribute_v_normal); - fghBindBuffer(GL_ARRAY_BUFFER, vbo_normals); + fghBindBuffer(FGH_ARRAY_BUFFER, vbo_normals); fghVertexAttribPointer( attribute_v_normal, // attribute 3, // number of elements per vertex, here (x,y,z) @@ -233,7 +234,7 @@ static void fghDrawGeometrySolid20(GLfloat *vertices, GLfloat *normals, GLubyte if (vertIdxs == NULL) { glDrawArrays(GL_TRIANGLES, 0, numVertices); } else { - fghBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo_elements); + fghBindBuffer(FGH_ELEMENT_ARRAY_BUFFER, ibo_elements); glDrawElements(GL_TRIANGLES, numVertIdxs, GL_UNSIGNED_BYTE, 0); } diff --git a/src/fg_gl2.c b/src/fg_gl2.c index e7dea50..cad2fc9 100644 --- a/src/fg_gl2.c +++ b/src/fg_gl2.c @@ -27,32 +27,16 @@ #include "fg_internal.h" #include "fg_gl2.h" -void glutSetVertexAttribCoord3(GLint attrib) { +void FGAPIENTRY glutSetVertexAttribCoord3(GLint attrib) { if (fgStructure.CurrentWindow != NULL) fgStructure.CurrentWindow->Window.attribute_v_coord = attrib; } -void glutSetVertexAttribNormal(GLint attrib) { +void FGAPIENTRY glutSetVertexAttribNormal(GLint attrib) { if (fgStructure.CurrentWindow != NULL) fgStructure.CurrentWindow->Window.attribute_v_normal = attrib; } -typedef void (APIENTRY *PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef void (APIENTRY *PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRY *PFNGLBUFFERDATAPROC) (GLenum target, fghGLsizeiptr size, const GLvoid *data, GLenum usage); -typedef void (APIENTRY *PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint* buffers); -typedef void (APIENTRY *PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRY *PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint); -typedef void (APIENTRY *PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); - -PFNGLGENBUFFERSPROC fghGenBuffers = NULL; -PFNGLDELETEBUFFERSPROC fghDeleteBuffers = NULL; -PFNGLBINDBUFFERPROC fghBindBuffer = NULL; -PFNGLBUFFERDATAPROC fghBufferData = NULL; -PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray = NULL; -PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray = NULL; -PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer = NULL; - void fgInitGL2() { fgState.HasOpenGL20 = 0; #define CHECK(func, a) if ((a) == NULL) { fgWarning("fgInitGL2: " func " is NULL"); return; } diff --git a/src/fg_gl2.h b/src/fg_gl2.h index 2450f8d..18a043c 100644 --- a/src/fg_gl2.h +++ b/src/fg_gl2.h @@ -30,6 +30,12 @@ # define APIENTRY #endif +/* extension #defines, types and entries, avoiding a dependency on additional + libraries like GLEW or the GL/glext.h header */ +#define FGH_ARRAY_BUFFER 0x8892 +#define FGH_STATIC_DRAW 0x88E4 +#define FGH_ELEMENT_ARRAY_BUFFER 0x8893 + typedef ptrdiff_t fghGLsizeiptr; typedef void (APIENTRY *PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); typedef void (APIENTRY *PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -- 1.7.10.4