com.sun.opengl.impl.x11
Class DRIHack

java.lang.Object
  extended by com.sun.opengl.impl.x11.DRIHack

public class DRIHack
extends java.lang.Object

Helper class for working around problems with open-source DRI drivers. In the current DRI implementation it is required that the symbols in libGL.so.1.2 be globally visible to be accessible from other libraries that are dynamically loaded by the implementation. Applications may typically satisfy this need either by linking against libGL.so on the command line (-lGL) or by dlopen'ing libGL.so.1.2 with the RTLD_GLOBAL flag. The JOGL implementation links against libGL on all platforms rather than forcing all OpenGL entry points to be called through a function pointer. This allows the JOGL library to link directly to core 1.1 OpenGL entry points like glVertex3f, while calling through function pointers for entry points from later OpenGL versions as well as from extensions. However, because libjogl.so (which links against libGL.so) is loaded by the JVM, and because the JVM implicitly uses RTLD_LOCAL in the implementation of System.loadLibrary(), this means via transitivity that the symbols for libGL.so have only RTLD_LOCAL visibility to the rest of the application, so the DRI drivers can not find the symbols required.

There are at least two possible solutions. One would be to change the JOGL implementation to call through function pointers uniformly so that it does not need to link against libGL.so. This is possible, but requires changes to GlueGen and also is not really necessary in any other situation than with the DRI drivers. Another solution is to force the first load of libGL.so.1.2 to be done dynamically with RTLD_GLOBAL before libjogl.so is loaded and causes libGL.so.1.2 to be loaded again. The NativeLibrary class in the GlueGen runtime has this property, and we use it to implement this workaround.


Constructor Summary
DRIHack()
           
 
Method Summary
static void begin()
           
static void end()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DRIHack

public DRIHack()
Method Detail

begin

public static void begin()

end

public static void end()


Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.