From 991622dd909d94b6ed83b84b744f0839b9ab6807 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Fri, 23 Feb 2001 05:14:46 +0000 Subject: Version 2.6.0.0 --- CNativeCode/GLDrawableFactory_X11_SunJDK13.c | 106 +++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 CNativeCode/GLDrawableFactory_X11_SunJDK13.c (limited to 'CNativeCode/GLDrawableFactory_X11_SunJDK13.c') diff --git a/CNativeCode/GLDrawableFactory_X11_SunJDK13.c b/CNativeCode/GLDrawableFactory_X11_SunJDK13.c new file mode 100644 index 0000000..51e204c --- /dev/null +++ b/CNativeCode/GLDrawableFactory_X11_SunJDK13.c @@ -0,0 +1,106 @@ +#include "gl4java_drawable_X11SunJDK13GLDrawableFactory.h" +#include "OpenGL_X11_common.h" + +JNIEXPORT jlong JNICALL +Java_gl4java_drawable_X11SunJDK13GLDrawableFactory_glXChooseVisualID + (JNIEnv *env, + jclass unused, + jint screen, + jlong display, + jobject capsObj, jboolean verbose) +{ + Display *disp = (Display *) ( (PointerHolder)display ); + + XVisualInfo * visual=NULL; + int visualAttribList[32]; + int done=0; + + GLCapabilities glCaps; + + jboolean ok = javaGLCapabilities2NativeGLCapabilities ( env, + capsObj, &glCaps ); + + if(JNI_TRUE!=ok) + { + fprintf(stderr,"GL4Java X11SunJDK13GLDrawableFactory ERROR: gl4java/GLCapabilities fields not accessible\n"); + fflush(stderr); + return JNI_FALSE; + } + + /* JAU: What the hell .. + The java given display is not alway functional .. ? + + If running without this ugly thing, + the derived SimpleGLAnimApplet1 get's an X11 async reply + if the thing is initialized by the applet's init method ! + */ + disp = XOpenDisplay( NULL ); + screen = DefaultScreen( disp ); + + if(JNI_TRUE==verbose) + fprintf(stdout," display=%p, screen=%d\n", disp, (int)screen); + + while(!done && visual==NULL) + { + (void) setVisualAttribListByGLCapabilities( visualAttribList, &glCaps); + + if(JNI_TRUE==verbose) + { + fprintf(stdout, "X11DrawableFactory.glXChooseVisual: try capabilities:\n"); + printGLCapabilities ( &glCaps ); + } + + visual = glXChooseVisual( disp, screen, visualAttribList ); + + if(JNI_TRUE==verbose) + { + if(visual!=NULL) + { + fprintf(stdout, "X11DrawableFactory.glXChooseVisual: found visual(ID:%d(0x%X)):\n", + (int) visual->visualid, + (int) visual->visualid); + printVisualInfo ( disp, visual); + } + fflush(stdout); + } + /** + * Falling-Back the exact (min. requirement) parameters .. + */ + if(visual==NULL && glCaps.stereo==STEREO_ON) { + glCaps.stereo=STEREO_OFF; + } else if(visual==NULL && glCaps.stencilBits>32) { + glCaps.stencilBits=32; + } else if(visual==NULL && glCaps.stencilBits>16) { + glCaps.stencilBits=16; + } else if(visual==NULL && glCaps.stencilBits>8) { + glCaps.stencilBits=8; + } else if(visual==NULL && glCaps.stencilBits>0) { + glCaps.stencilBits=0; + } else if(visual==NULL && glCaps.buffer==BUFFER_DOUBLE) { + glCaps.buffer=BUFFER_SINGLE; + } else done=1; /* forget it .. */ + } + + if(visual==NULL) + { + fprintf(stdout, "X11DrawableFactory.glXChooseVisual: no visual\n"); + return 0; + } + + (void ) setGLCapabilities ( disp, visual, &glCaps ); + + if(JNI_TRUE==verbose) + { + fprintf(stdout,"X11DrawableFactory.glXChooseVisual: writing capabilities to GLContext's java object\n"); + fflush(stdout); + } + + (void) nativeGLCapabilities2JavaGLCapabilities + (env, capsObj, &glCaps); + + /* JAU: see above .. */ + XCloseDisplay( disp ); + + return (jlong) (visual->visualid); +} + -- cgit v1.2.3