[Xquartz-dev] X11 vs freeglut 2.6.0-rc1

Jack Howarth howarth at bromo.med.uc.edu
Sun Apr 26 09:23:55 PDT 2009


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


More information about the Xquartz-dev mailing list