On Sat, Apr 25, 2009 at 10:47:46PM -0700, Jeremy Huddleston wrote:
That is an "interesting" issue... I'm guessing that freeglut test probably has something like:
#ifdef __APPLE__ #define PFNGLGENBUFFERSPROC ... ... #endif
That's because Apple's OpenGL.framework doesn't use the same naming convention for the OpenGL function pointer types as Mesa/Windows does. We exist in an awkward state bridging the two... in order to be as compatible as possible at the source level, I decided to support both conventions.
It looks like the freeglut test tried to be too clever for its own good...
Jeremy, I tried... --- smooth_opengl3.c.org 2009-04-26 12:11:41.000000000 -0400 +++ smooth_opengl3.c 2009-04-26 12:18:29.000000000 -0400 @@ -98,6 +98,8 @@ #define APIENTRY #endif +#ifndef __APPLE__ + typedef void (APIENTRY *PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); PFNGLGENBUFFERSPROC gl_GenBuffers; @@ -178,6 +180,8 @@ gl_UniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC) glutGetProcAddress ("glUniformMatrix4fv"); } +#endif + /* vertex array data for a colored 2D triangle, consisting of RGB color values and XY coordinates */ const GLfloat varray[] = { but the compilation fails because the wrapper encloses definition for gl extensions at the end... #ifndef __APPLE__ typedef void (APIENTRY *PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); PFNGLGENBUFFERSPROC gl_GenBuffers; typedef void (APIENTRY *PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); PFNGLBINDBUFFERPROC gl_BindBuffer; typedef void (APIENTRY *PFNGLBUFFERDATAPROC) (GLenum target, ourGLsizeiptr size, const GLvoid *data, GLenum usage); PFNGLBUFFERDATAPROC gl_BufferData; typedef GLuint (APIENTRY *PFNGLCREATESHADERPROC) (GLenum type); PFNGLCREATESHADERPROC gl_CreateShader; typedef void (APIENTRY *PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const ourGLchar **string, const GLint *length); PFNGLSHADERSOURCEPROC gl_ShaderSource; typedef void (APIENTRY *PFNGLCOMPILESHADERPROC) (GLuint shader); PFNGLCOMPILESHADERPROC gl_CompileShader; typedef GLuint (APIENTRY *PFNGLCREATEPROGRAMPROC) (void); PFNGLCREATEPROGRAMPROC gl_CreateProgram; typedef void (APIENTRY *PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); PFNGLATTACHSHADERPROC gl_AttachShader; typedef void (APIENTRY *PFNGLLINKPROGRAMPROC) (GLuint program); PFNGLLINKPROGRAMPROC gl_LinkProgram; typedef void (APIENTRY *PFNGLUSEPROGRAMPROC) (GLuint program); PFNGLUSEPROGRAMPROC gl_UseProgram; typedef void (APIENTRY *PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); PFNGLGETSHADERIVPROC gl_GetShaderiv; typedef void (APIENTRY *PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, ourGLchar *infoLog); PFNGLGETSHADERINFOLOGPROC gl_GetShaderInfoLog; typedef void (APIENTRY *PFNGLGETPROGRAMIVPROC) (GLenum target, GLenum pname, GLint *params); PFNGLGETPROGRAMIVPROC gl_GetProgramiv; typedef void (APIENTRY *PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, ourGLchar *infoLog); PFNGLGETPROGRAMINFOLOGPROC gl_GetProgramInfoLog; typedef GLint (APIENTRY *PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const ourGLchar *name); PFNGLGETATTRIBLOCATIONPROC gl_GetAttribLocation; typedef void (APIENTRY *PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); PFNGLVERTEXATTRIBPOINTERPROC gl_VertexAttribPointer; typedef void (APIENTRY *PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); PFNGLENABLEVERTEXATTRIBARRAYPROC gl_EnableVertexAttribArray; typedef GLint (APIENTRY *PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const ourGLchar *name); PFNGLGETUNIFORMLOCATIONPROC gl_GetUniformLocation; typedef void (APIENTRY *PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); PFNGLUNIFORMMATRIX4FVPROC gl_UniformMatrix4fv; void initExtensionEntries(void) { gl_GenBuffers = (PFNGLGENBUFFERSPROC) glutGetProcAddress ("glGenBuffers"); gl_BindBuffer = (PFNGLBINDBUFFERPROC) glutGetProcAddress ("glBindBuffer"); gl_BufferData = (PFNGLBUFFERDATAPROC) glutGetProcAddress ("glBufferData"); gl_CreateShader = (PFNGLCREATESHADERPROC) glutGetProcAddress ("glCreateShader"); gl_ShaderSource = (PFNGLSHADERSOURCEPROC) glutGetProcAddress ("glShaderSource"); gl_CompileShader = (PFNGLCOMPILESHADERPROC) glutGetProcAddress ("glCompileShader"); gl_CreateProgram = (PFNGLCREATEPROGRAMPROC) glutGetProcAddress ("glCreateProgram"); gl_AttachShader = (PFNGLATTACHSHADERPROC) glutGetProcAddress ("glAttachShader"); gl_LinkProgram = (PFNGLLINKPROGRAMPROC) glutGetProcAddress ("glLinkProgram"); gl_UseProgram = (PFNGLUSEPROGRAMPROC) glutGetProcAddress ("glUseProgram"); gl_GetShaderiv = (PFNGLGETSHADERIVPROC) glutGetProcAddress ("glGetShaderiv"); gl_GetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) glutGetProcAddress ("glGetShaderInfoLog"); gl_GetProgramiv = (PFNGLGETPROGRAMIVPROC) glutGetProcAddress ("glGetProgramiv"); gl_GetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) glutGetProcAddress ("glGetProgramInfoLog"); gl_GetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC) glutGetProcAddress ("glGetAttribLocation"); gl_VertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC) glutGetProcAddress ("glVertexAttribPointer"); gl_EnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC) glutGetProcAddress ("glEnableVertexAttribArray"); gl_GetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) glutGetProcAddress ("glGetUniformLocation"); gl_UniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC) glutGetProcAddress ("glUniformMatrix4fv"); } #endif Should we have those initExtensionEntries avallable somewhere? I also tried... --- smooth_opengl3.c.org 2009-04-26 12:11:41.000000000 -0400 +++ smooth_opengl3.c 2009-04-26 12:21:50.000000000 -0400 @@ -98,6 +98,8 @@ #define APIENTRY #endif +#ifndef __APPLE__ + typedef void (APIENTRY *PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); PFNGLGENBUFFERSPROC gl_GenBuffers; @@ -155,6 +157,8 @@ typedef void (APIENTRY *PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); PFNGLUNIFORMMATRIX4FVPROC gl_UniformMatrix4fv; +#endif + void initExtensionEntries(void) { gl_GenBuffers = (PFNGLGENBUFFERSPROC) glutGetProcAddress ("glGenBuffers"); to allow these to be defined, I still get the compile errors... gcc -DHAVE_CONFIG_H -I. -I../../.. -I/sw/include -I../../../include -I/usr/X11R6/include -O3 -DTARGET_HOST_POSIX_X11 -c -o smooth_opengl3-smooth_opengl3.o `test -f 'smooth_opengl3.c' || echo './'`smooth_opengl3.c smooth_opengl3.c: In function ‘initExtensionEntries’: smooth_opengl3.c:164: error: ‘gl_GenBuffers’ undeclared (first use in this function) smooth_opengl3.c:164: error: (Each undeclared identifier is reported only once smooth_opengl3.c:164: error: for each function it appears in.) smooth_opengl3.c:165: error: ‘gl_BindBuffer’ undeclared (first use in this function) smooth_opengl3.c:166: error: ‘gl_BufferData’ undeclared (first use in this function) smooth_opengl3.c:167: error: ‘gl_CreateShader’ undeclared (first use in this function) smooth_opengl3.c:168: error: ‘gl_ShaderSource’ undeclared (first use in this function) smooth_opengl3.c:169: error: ‘gl_CompileShader’ undeclared (first use in this function) smooth_opengl3.c:170: error: ‘gl_CreateProgram’ undeclared (first use in this function) smooth_opengl3.c:171: error: ‘gl_AttachShader’ undeclared (first use in this function) smooth_opengl3.c:172: error: ‘gl_LinkProgram’ undeclared (first use in this function) smooth_opengl3.c:173: error: ‘gl_UseProgram’ undeclared (first use in this function) smooth_opengl3.c:174: error: ‘gl_GetShaderiv’ undeclared (first use in this function) smooth_opengl3.c:175: error: ‘gl_GetShaderInfoLog’ undeclared (first use in this function) smooth_opengl3.c:176: error: ‘gl_GetProgramiv’ undeclared (first use in this function) smooth_opengl3.c:177: error: ‘gl_GetProgramInfoLog’ undeclared (first use in this function) smooth_opengl3.c:178: error: ‘gl_GetAttribLocation’ undeclared (first use in this function) smooth_opengl3.c:179: error: ‘gl_VertexAttribPointer’ undeclared (first use in this function) smooth_opengl3.c:180: error: ‘gl_EnableVertexAttribArray’ undeclared (first use in this function) smooth_opengl3.c:181: error: ‘gl_GetUniformLocation’ undeclared (first use in this function) smooth_opengl3.c:182: error: ‘gl_UniformMatrix4fv’ undeclared (first use in this function) make: *** [smooth_opengl3-smooth_opengl3.o] Error 1 Thanks in advance for any advice. Jack