com.sun.opengl.impl.x11
Class DRIHack
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. This requires the C APIs dlopen
and dlclose to be made available before libjogl.so is loaded. This
is the solution currently chosen and is called the "DRI hack"
because again it is needed only in this situation.
begin
public static void begin()
dlclose
public static int dlclose(long handle)
dlopen
public static long dlopen(String name)
end
public static void end()
Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.