com.sun.opengl.impl.x11
Class DRIHack
java.lang.Object
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.
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 |
DRIHack
public DRIHack()
begin
public static void begin()
end
public static void end()
Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.