From owner-freebsd-java@FreeBSD.ORG Mon Aug 30 18:45:51 2004 Return-Path: Delivered-To: freebsd-java@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id CA43416A4CE for ; Mon, 30 Aug 2004 18:45:51 +0000 (GMT) Received: from misty.eyesbeyond.com (glewis.dsl.xmission.com [166.70.56.15]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7ED0943D53 for ; Mon, 30 Aug 2004 18:45:50 +0000 (GMT) (envelope-from glewis@eyesbeyond.com) Received: from misty.eyesbeyond.com (localhost.eyesbeyond.com [127.0.0.1]) by misty.eyesbeyond.com (8.12.11/8.12.11) with ESMTP id i7UIjn4Y051883 for ; Mon, 30 Aug 2004 12:45:49 -0600 (MDT) (envelope-from glewis@eyesbeyond.com) Received: (from glewis@localhost) by misty.eyesbeyond.com (8.12.11/8.12.11/Submit) id i7UIjmQJ051882 for freebsd-java@freebsd.org; Mon, 30 Aug 2004 12:45:48 -0600 (MDT) (envelope-from glewis@eyesbeyond.com) X-Authentication-Warning: misty.eyesbeyond.com: glewis set sender to glewis@eyesbeyond.com using -f Date: Mon, 30 Aug 2004 12:45:48 -0600 From: Greg Lewis To: freebsd-java@freebsd.org Message-ID: <20040830184548.GA51796@misty.eyesbeyond.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="45Z9DzgjV8m4Oswq" Content-Disposition: inline User-Agent: Mutt/1.4.2.1i Subject: Native Java3D X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 30 Aug 2004 18:45:51 -0000 --45Z9DzgjV8m4Oswq Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi all, As the Java3D source code is now available we can produce a native version of it. To this end, I worked up some fairly simple patches a while ago to do this. I tested them last night and the examples appear to work (or at least the ones I tried did). If anyone is interested, please grab the source code and apply the attached patch to the j3d-core sub-project. Then just follow the build and use instructions as normal. It would be useful for someone else to try this out, particularly if you have a big Java3D application you can try it with. I aim to contribute the patch to the project so we'll get a native Java3D 1.3.2. I'd prefer to get a few "works for me" first :). -- Greg Lewis Email : glewis@eyesbeyond.com Eyes Beyond Web : http://www.eyesbeyond.com Information Technology FreeBSD : glewis@FreeBSD.org --45Z9DzgjV8m4Oswq Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="j3d-core.diff" ? build ? java3d.diff ? src/classes/freebsd ? src/native/ogl/build-freebsd-i586.xml ? src/native/share/build-freebsd-i586.xml Index: build.xml =================================================================== RCS file: /cvs/j3d-core/build.xml,v retrieving revision 1.1 diff -u -r1.1 build.xml --- build.xml 9 Jun 2004 04:21:10 -0000 1.1 +++ build.xml 30 Aug 2004 06:24:55 -0000 @@ -56,13 +56,18 @@ + + + + + - + @@ -85,6 +90,10 @@ + + + + Index: src/classes/share/javax/media/j3d/MasterControl.java =================================================================== RCS file: /cvs/j3d-core/src/classes/share/javax/media/j3d/MasterControl.java,v retrieving revision 1.4 diff -u -r1.4 MasterControl.java --- src/classes/share/javax/media/j3d/MasterControl.java 12 Aug 2004 16:55:17 -0000 1.4 +++ src/classes/share/javax/media/j3d/MasterControl.java 30 Aug 2004 06:24:56 -0000 @@ -48,6 +48,7 @@ static final int RENDER_OPENGL_WIN32 = 1; static final int RENDER_DIRECT3D = 2; static final int RENDER_OPENGL_LINUX = 3; + static final int RENDER_OPENGL_FREEBSD = 4; // Constants used in renderer thread argument static final Integer REQUESTRENDER = new Integer(Renderer.REQUESTRENDER); Index: src/native/build.xml =================================================================== RCS file: /cvs/j3d-core/src/native/build.xml,v retrieving revision 1.1 diff -u -r1.1 build.xml --- src/native/build.xml 9 Jun 2004 04:24:57 -0000 1.1 +++ src/native/build.xml 30 Aug 2004 06:24:57 -0000 @@ -29,6 +29,12 @@ + + + + + + @@ -37,7 +43,7 @@ - + @@ -61,6 +67,12 @@ + + + + + + @@ -68,7 +80,7 @@ - + Index: src/native/ogl/Canvas3D.c =================================================================== RCS file: /cvs/j3d-core/src/native/ogl/Canvas3D.c,v retrieving revision 1.3 diff -u -r1.3 Canvas3D.c --- src/native/ogl/Canvas3D.c 26 Jul 2004 23:12:55 -0000 1.3 +++ src/native/ogl/Canvas3D.c 30 Aug 2004 06:24:58 -0000 @@ -174,7 +174,7 @@ if(isExtensionSupported(tmpExtensionStr,"GL_NV_register_combiners" )) { ctxInfo->textureRegisterCombinersAvailable = JNI_TRUE; ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_REGISTER_COMBINERS; -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) ctxInfo->glCombinerInputNV = (MYPFNGLCOMBINERINPUTNV) glCombinerInputNV; ctxInfo->glFinalCombinerInputNV = @@ -285,7 +285,7 @@ ctxInfo->linear_sharpen_rgb_enum = GL_LINEAR_SHARPEN_COLOR_SGIS; ctxInfo->linear_sharpen_alpha_enum = GL_LINEAR_SHARPEN_ALPHA_SGIS; ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_SHARPEN; -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) ctxInfo->glSharpenTexFuncSGIS = (MYPFNGLSHARPENTEXFUNCSGI) glSharpenTexFuncSGIS; #endif @@ -309,7 +309,7 @@ ctxInfo->texture_detail_mode_enum = GL_DETAIL_TEXTURE_MODE_SGIS; ctxInfo->texture_detail_level_enum = GL_DETAIL_TEXTURE_LEVEL_SGIS; ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_DETAIL; -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) ctxInfo->glDetailTexFuncSGIS = (MYPFNGLDETAILTEXFUNCSGI) glDetailTexFuncSGIS; #endif @@ -328,7 +328,7 @@ ctxInfo->textureFilter4Available = JNI_TRUE; ctxInfo->filter4_enum = GL_FILTER4_SGIS; ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_FILTER4; -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) ctxInfo->glTexFilterFuncSGIS = (MYPFNGLTEXFILTERFUNCSGI) glTexFilterFuncSGIS; #endif @@ -481,7 +481,7 @@ ctxInfo->bgr_ext_enum = GL_BGR; ctxInfo->texture3DAvailable = JNI_TRUE; ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_3D; -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) ctxInfo->glTexImage3DEXT = (MYPFNGLTEXIMAGE3DPROC )glTexImage3D; ctxInfo->glTexSubImage3DEXT = (MYPFNGLTEXSUBIMAGE3DPROC )glTexSubImage3D; #endif @@ -500,7 +500,7 @@ if(isExtensionSupported(tmpExtensionStr, "GL_ARB_imaging")){ ctxInfo->blend_color_ext = JNI_TRUE; ctxInfo->blendFunctionTable[7] = GL_CONSTANT_COLOR; -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) ctxInfo->glBlendColor = (MYPFNGLBLENDCOLORPROC )glBlendColor; #endif #ifdef WIN32 @@ -540,7 +540,7 @@ ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_3D; ctxInfo->texture_3D_ext_enum = GL_TEXTURE_3D_EXT; ctxInfo->texture_wrap_r_ext_enum = GL_TEXTURE_WRAP_R_EXT; -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) ctxInfo->glTexImage3DEXT = (MYPFNGLTEXIMAGE3DPROC )glTexImage3DEXT; ctxInfo->glTexSubImage3DEXT = (MYPFNGLTEXSUBIMAGE3DPROC )glTexSubImage3DEXT; /* Fallback to non-EXT variants, needed for older @@ -587,7 +587,7 @@ if(isExtensionSupported(tmpExtensionStr, "GL_EXT_blend_color")){ ctxInfo->blend_color_ext = JNI_TRUE; -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) ctxInfo->glBlendColor = (MYPFNGLBLENDCOLOREXTPROC )glBlendColorEXT; #endif #ifdef WIN32 @@ -661,7 +661,7 @@ ctxInfo->geometry_compression_sunx = JNI_TRUE ; } -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) /* * setup ARB_multisample, under windows this is setup in * NativeConfigTemplate when pixel format is choose @@ -888,7 +888,7 @@ stencilSize = pfd.cStencilBits; #endif -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) if(ctxInfo->multi_draw_arrays_ext) { ctxInfo->glMultiDrawArraysEXT = glMultiDrawArraysEXT; ctxInfo->glMultiDrawElementsEXT = glMultiDrawElementsEXT; @@ -1041,7 +1041,7 @@ wglDeleteContext((HGLRC)context); #endif /* WIN32 */ -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) /* glXMakeCurrent((Display *)display, (GLXDrawable)window, NULL); */ @@ -1094,7 +1094,7 @@ GraphicsContextPropertiesInfo *sharedCtxStructure; int PixelFormatID=0; -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) GLXContext ctx; jlong hdc; @@ -1296,7 +1296,7 @@ { GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; jlong ctx = ctxProperties->context; -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) glXMakeCurrent((Display *)display, (GLXDrawable)window, (GLXContext)ctx); #endif @@ -2327,7 +2327,7 @@ jint win) { -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) glXSwapBuffers((Display *)display, (Window)win); #endif @@ -2503,7 +2503,7 @@ ctxProperties->glGetColorTableParameteriv = (MYPFNGLGETCOLORTABLEPARAMETERIVPROC)wglGetProcAddress("glGetColorTableParameteriv"); #endif -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) ctxProperties->glColorTable = glColorTable; ctxProperties->glGetColorTableParameteriv = glGetColorTableParameteriv; #endif @@ -2514,7 +2514,7 @@ ctxProperties->glGetColorTableParameteriv = (MYPFNGLGETCOLORTABLEPARAMETERIVPROC)wglGetProcAddress("glGetColorTableParameterivSGI"); #endif -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) ctxProperties->glColorTable = glColorTableSGI; ctxProperties->glGetColorTableParameteriv = glGetColorTableParameterivSGI; #endif @@ -2540,7 +2540,7 @@ #ifndef GLX_VERSION_1_3 #ifdef GLX_SGIX_pbuffer -#ifdef __linux__ +#if defined(__linux__) || defined(__FreeBSD__) typedef XID GLXPbuffer; typedef struct __GLXFBConfigRec *GLXFBConfig; typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; @@ -2575,7 +2575,7 @@ #endif /* __linux__ */ #endif /* GLX_VERSION_1_3 */ -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) #pragma weak glXChooseFBConfig #pragma weak glXCreatePbuffer #pragma weak glXDestroyPbuffer @@ -2597,7 +2597,7 @@ jfloat dvrFactor) { -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) /* Not need to do ext. supported checking. This check is done in java. */ /* fprintf(stderr, "Canvas3D.c -- glXVideoResize -- %d %f\n", win, dvrFactor); */ @@ -2614,7 +2614,7 @@ jboolean enable) { -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; @@ -2644,7 +2644,7 @@ jint height) { -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) XVisualInfo *vinfo, template; int nitems, depth, redSize; Display *dpy; @@ -2848,7 +2848,7 @@ jlong display, jint window) { -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) Display *dpy = (Display*)display; GLboolean pbufferSupported = GL_FALSE; @@ -3158,7 +3158,7 @@ int PixelFormatID=0; GraphicsContextPropertiesInfo* ctxInfo = (GraphicsContextPropertiesInfo *)malloc(sizeof(GraphicsContextPropertiesInfo)); -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) XVisualInfo *vinfo, template; int nitems; GLXContext ctx; @@ -3326,7 +3326,7 @@ /* clear up the context , colormap and window if appropriate */ if(window == 0 && !offScreen){ -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) Java_javax_media_j3d_Canvas3D_destroyContext(env, obj, display, newWin, (jlong)ctxInfo); XDestroyWindow((Display *)display, glWin); XFreeColormap((Display *)display, cmap); @@ -3408,7 +3408,7 @@ return (devMode.dmBitsPerPel > 8); #endif -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) return TRUE; #endif } Index: src/native/ogl/DrawingSurfaceObjectAWT.c =================================================================== RCS file: /cvs/j3d-core/src/native/ogl/DrawingSurfaceObjectAWT.c,v retrieving revision 1.1 diff -u -r1.1 DrawingSurfaceObjectAWT.c --- src/native/ogl/DrawingSurfaceObjectAWT.c 9 Jun 2004 04:25:21 -0000 1.1 +++ src/native/ogl/DrawingSurfaceObjectAWT.c 30 Aug 2004 06:24:58 -0000 @@ -28,7 +28,7 @@ #endif /* DEBUG */ -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) #pragma weak JAWT_GetAWT #endif @@ -145,7 +145,7 @@ } #endif /* SOLARIS */ -#ifdef __linux__ +#if defined(__linux__) || defined(__FreeBSD__) JAWT_X11DrawingSurfaceInfo *xds = (JAWT_X11DrawingSurfaceInfo*) dsi->platformInfo; window = (jint)xds->drawable; Index: src/native/ogl/MasterControl.c =================================================================== RCS file: /cvs/j3d-core/src/native/ogl/MasterControl.c,v retrieving revision 1.1 diff -u -r1.1 MasterControl.c --- src/native/ogl/MasterControl.c 9 Jun 2004 04:25:23 -0000 1.1 +++ src/native/ogl/MasterControl.c 30 Aug 2004 06:24:58 -0000 @@ -32,13 +32,16 @@ #include #endif /* WIN32 */ -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) #include #ifdef SOLARIS #include #else #include #endif +#ifdef __FreeBSD__ +#include +#endif #include #include #include @@ -81,7 +84,7 @@ return glIsMTSafe; #endif /* WIN32 */ -#ifdef __linux__ +#if defined(__linux__) || defined(__FreeBSD__) glIsMTSafe = JNI_TRUE; return glIsMTSafe; #endif /* __linux__ */ @@ -183,6 +186,16 @@ return sysconf(_SC_NPROCESSORS_ONLN); #endif /* SOLARIS || __linux__ */ +#ifdef __FreeBSD__ + int cpus = 1; + size_t len = sizeof(cpus); + int mib[2]; + mib[0] = CTL_HW; + mib[1] = HW_NCPU; + sysctl(mib, 2, &cpus, &len, NULL, 0); + return cpus; +#endif + #ifdef WIN32 SYSTEM_INFO sysInfo; @@ -237,6 +250,10 @@ #ifdef __linux__ /* No-op on linux */ #endif /* __linux__ */ + +#ifdef __FreeBSD__ + /* No-op on FreeBSD */ +#endif /* __FreeBSD__ */ } @@ -258,4 +275,8 @@ #ifdef __linux__ return 8; #endif /* __linux__ */ + +#ifdef __FreeBSD__ + return 8; +#endif /* __FreeBSD__ */ } Index: src/native/ogl/NativeAPIInfo.c =================================================================== RCS file: /cvs/j3d-core/src/native/ogl/NativeAPIInfo.c,v retrieving revision 1.1 diff -u -r1.1 NativeAPIInfo.c --- src/native/ogl/NativeAPIInfo.c 9 Jun 2004 04:25:23 -0000 1.1 +++ src/native/ogl/NativeAPIInfo.c 30 Aug 2004 06:24:58 -0000 @@ -35,4 +35,8 @@ #ifdef __linux__ return (jint)javax_media_j3d_MasterControl_RENDER_OPENGL_LINUX; #endif /* __linux__ */ + +#ifdef __FreeBSD__ + return (jint)javax_media_j3d_MasterControl_RENDER_OPENGL_FREEBSD; +#endif /* __FreeBSD__ */ } Index: src/native/ogl/NativeConfigTemplate3D.c =================================================================== RCS file: /cvs/j3d-core/src/native/ogl/NativeConfigTemplate3D.c,v retrieving revision 1.2 diff -u -r1.2 NativeConfigTemplate3D.c --- src/native/ogl/NativeConfigTemplate3D.c 4 Aug 2004 05:36:53 -0000 1.2 +++ src/native/ogl/NativeConfigTemplate3D.c 30 Aug 2004 06:24:59 -0000 @@ -22,7 +22,7 @@ #include "gldefs.h" -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) #include #include #include @@ -35,7 +35,7 @@ /* check if the extension is supported */ extern int isExtensionSupported(const char *allExtensions, const char *extension); -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) XVisualInfo *findVisualInfoSwitchDoubleBufferAndStereo(jlong display, jint screen, Index: src/native/ogl/NativeScreenInfo.c =================================================================== RCS file: /cvs/j3d-core/src/native/ogl/NativeScreenInfo.c,v retrieving revision 1.1 diff -u -r1.1 NativeScreenInfo.c --- src/native/ogl/NativeScreenInfo.c 9 Jun 2004 04:25:24 -0000 1.1 +++ src/native/ogl/NativeScreenInfo.c 30 Aug 2004 06:24:59 -0000 @@ -21,7 +21,7 @@ #include "gldefs.h" -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) #include #include #include @@ -31,7 +31,7 @@ #include #endif -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) /* * Class: javax_media_j3d_NativeScreenInfo * Method: openDisplay Index: src/native/ogl/NativeWSInfo.c =================================================================== RCS file: /cvs/j3d-core/src/native/ogl/NativeWSInfo.c,v retrieving revision 1.1 diff -u -r1.1 NativeWSInfo.c --- src/native/ogl/NativeWSInfo.c 9 Jun 2004 04:25:25 -0000 1.1 +++ src/native/ogl/NativeWSInfo.c 30 Aug 2004 06:24:59 -0000 @@ -21,7 +21,7 @@ #include "gldefs.h" -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) #include #include #include Index: src/native/ogl/gl_1_2.h =================================================================== RCS file: /cvs/j3d-core/src/native/ogl/gl_1_2.h,v retrieving revision 1.1 diff -u -r1.1 gl_1_2.h --- src/native/ogl/gl_1_2.h 9 Jun 2004 04:25:30 -0000 1.1 +++ src/native/ogl/gl_1_2.h 30 Aug 2004 06:24:59 -0000 @@ -95,7 +95,7 @@ #endif #ifndef GL_ARB_multisample -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) #define GLX_SAMPLE_BUFFERS_ARB 100000 #define GLX_SAMPLES_ARB 100001 #endif Index: src/native/ogl/gldefs.h =================================================================== RCS file: /cvs/j3d-core/src/native/ogl/gldefs.h,v retrieving revision 1.1 diff -u -r1.1 gldefs.h --- src/native/ogl/gldefs.h 9 Jun 2004 04:25:31 -0000 1.1 +++ src/native/ogl/gldefs.h 30 Aug 2004 06:24:59 -0000 @@ -23,7 +23,7 @@ #include #include -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) #define GLX_GLEXT_PROTOTYPES #define GLX_GLXEXT_PROTOTYPES #include @@ -302,7 +302,7 @@ #define J3D_RGBA javax_media_j3d_Texture_RGBA #ifndef D3D -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(__linux__) || defined(__FreeBSD__) extern void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf); extern void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf); extern void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); --45Z9DzgjV8m4Oswq--