# Jogl, no gluegen-rt :-(



## Siassei (21. Jul 2010)

Servus,

ich verzweifle mittlerweile bei einem Versuch, auf Fedora_64 Jogl zum laufen zu bekommen :-( 

Ich habe bis jetzt zwei Wege versucht. Einerseits das Git-Repository geklont und Jogl selber gebaut. Hat auch so weit funktioniert. Der andere Weg ist über den offiziellen Build-Server zu gehen. Index of /deployment/archive

In beiden Fälle bekomme ich bei einem kleinen Test-Projekt folgende Fehlermeldung

Exception in thread "main" java.lang.UnsatisfiedLinkError: no gluegen-rt in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681)
        at java.lang.Runtime.loadLibrary0(Runtime.java:840)
        at java.lang.System.loadLibrary(System.java:1047)
        at test.jogl.GLInfo.main(GLInfo.java:215)

Hier weis ich nicht mehr weiter. Ich bin mit meinem Latein am Ende. Es handelt sich um ein kleines Netbeans-Projekt, bei dem ich die *.jar Dateien hinzugefügt habe. Die *.so Dateien liegen in einem Ordner, denn ich zur Zeit über "java.library.path" bekannt mache.
Trotz allem erhalte ich die obrige Fehlermeldung, obwohl in dem genanntem Ordner eine "libgluegen-rt.so" liegt!
Ich benutze das OpenJDK.

Was mache ich falsch?

Gruß,
  Thomas


----------



## Siassei (21. Jul 2010)

Oh, die Codezeilen:

```
System.setProperty("java.library.path", "/home/Siassei/Projects/Private/jogamp/lib/jogl/lib");
        System.out.println(System.getProperty("java.library.path"));
        System.loadLibrary("gluegen-rt");
        String glprofile  = null;
```


----------



## maki (21. Jul 2010)

Ähm, solltest du denn den java Library Path nicht als JVM Parameter übergeben?


----------



## Siassei (21. Jul 2010)

Edit: Remove

Danke. Ich habe es immer unter Argumente und nicht unter JVM-Argumente platziert gehabt. Das war es. 
Ich denke mal, dass der folgende Fehler noch mit meinen 3D Treiber zusammenhängt. Ich benutze den akmo-nvidia. Aber der müsste doch eigentlich 3D-Unterstützung mit liefern. Zumindestens sagt das nvidia-settings Programm, dass sehr viele ARM & Co. Erweiterungen verfügbar sind und ich kann dort auch die 3D Qualität einstellen. Komisch. Wieso findet Jogl kein GL?

Info: XInitThreads() called for concurrent Thread support
Exception in thread "main" java.lang.ExceptionInInitializerError
        at test.jogl.GLInfo.init(GLInfo.java:22)
        at test.jogl.GLInfo.runInThread(GLInfo.java:59)
        at test.jogl.GLInfo.main(GLInfo.java:229)
Caused by: javax.media.opengl.GLException: No profile available: [GL2, GL3bc, GL4bc, GL2GL3, GL3, GL4, GL2ES2, GLES2, GL2ES1, GLES1], GLAvailability[Native[GL4bc false, GL4 false, GL3bc false, GL3 false, GL2 false, GL2ES1 false, GLES1 false, GL2ES2 false, GLES2 false], Profiles[, default null]]
        at javax.media.opengl.GLProfile.<clinit>(GLProfile.java:993)
        ... 3 more

Code: Es handelt sich um ein Orginal Beispiel:

```
package test.jogl;

import javax.media.opengl.*;
import javax.media.nativewindow.*;

import com.jogamp.newt.*;
import com.jogamp.newt.event.*;
import com.jogamp.newt.opengl.*;

public class GLInfo extends Thread implements GLEventListener {

    private GLWindow window;
    private GLProfile glp;

    public GLInfo() {
        super();
    }

    private void init(String glprofile, int type) {
        int width = 640;
        int height = 480;
        glp = GLProfile.get(glprofile);
        System.err.println(glp+" GLInfo.start()");
        try {
            GLCapabilities caps = new GLCapabilities(glp);
            // For emulation library, use 16 bpp
            caps.setRedBits(5);
            caps.setGreenBits(6);
            caps.setBlueBits(5);
            caps.setDepthBits(16);
            System.err.println(glp+" GLCapabilities PRE : "+caps);

            Window nWindow = null;
            if(0!=(type&USE_AWT)) {
                Display nDisplay = NewtFactory.createDisplay(NativeWindowFactory.TYPE_AWT, null); // local display
                Screen nScreen  = NewtFactory.createScreen(NativeWindowFactory.TYPE_AWT, nDisplay, 0); // screen 0
                nWindow = NewtFactory.createWindow(NativeWindowFactory.TYPE_AWT, nScreen, caps, false);
                System.err.println(glp+" "+nWindow);
                window = GLWindow.create(nWindow);
            } else {
                window = GLWindow.create(caps);
            }

            System.err.println(glp+" GLWindow : "+window);

            window.addGLEventListener(this);

            // Size OpenGL to Video Surface
            window.setSize(width, height);
            // window.setFullscreen(true);

            window.setVisible(true);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    private void runInThread(String glprofile, int type) {
        init(glprofile, type);
        run();
    }

    private void start(String glprofile, int type) {
        init(glprofile, type);
        start();
    }

    public void run() {
        try {
            System.err.println(glp+" GLInfo.run() 1");

            System.err.println(glp+" GLInfo.run() 2");

            window.display();

            System.err.println(glp+" GLInfo.run() 3");

            try {
                Thread.sleep(500);
            } catch (Exception e) {}

            window.display();

            // Shut things down cooperatively
            window.destroy(true);
            System.out.println(glp+" GLInfo shut down cleanly.");
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        GLProfile glp = gl.getGLProfile();

        System.err.println(glp+" GL Profile Static: "+GLProfile.glAvailabilityToString());
        System.err.println(glp+" GL Profile Static - MaxFixedFunc: "+GLProfile.getMaxFixedFunc());
        System.err.println(glp+" GL Profile Static - MaxProgrammable: "+GLProfile.getMaxProgrammable());
        System.err.println(glp+" GLCapabilities POST: "+drawable.getChosenGLCapabilities());
        System.err.println(glp+" GL Profile: "+drawable.getGLProfile());
        System.err.println(glp+" GL:" + gl);
        System.err.println(glp+"");
        System.err.println(glp+" Context GL Version: "+gl.getContext().getGLVersion());
        System.err.println(glp+"");
        System.err.println(glp+" GL_VERSION: " + gl.glGetString(GL.GL_VERSION));
        System.err.println(glp+" GL_EXTENSIONS: ");
        System.err.println(glp+"   " + gl.glGetString(GL.GL_EXTENSIONS));
        System.err.println(glp+"");
        System.err.println(glp+" Platform EXTENSIONS: ");
        System.err.println(glp+"   " + gl.getContext().getPlatformExtensionsString());
        System.err.println(glp+"");
        System.err.println(glp+" Availability Tests: ");
        System.err.println(glp+"   glConvolutionFilter2D: "+gl.isFunctionAvailable("glConvolutionFilter2D"));
        System.err.println(glp+"   Fixed: glBegin: "+gl.isFunctionAvailable("glBegin"));
        System.err.println(glp+"   ES1  : glClearColorx: "+gl.isFunctionAvailable("glClearColorx"));
        System.err.println(glp+"   GLSL : glUseProgram: "+gl.isFunctionAvailable("glUseProgram"));
        System.err.println(glp+"   GL_ARB_vertex_array_object: "+gl.isExtensionAvailable("GL_ARB_vertex_array_object"));
        System.err.println(glp+"   GL_ARB_vertex_array_object: glBindVertexArray: "+gl.isFunctionAvailable("glBindVertexArray"));
        System.err.println(glp+"   GL_EXT_gpu_shader4: "+gl.isExtensionAvailable("GL_EXT_gpu_shader4"));
        System.err.println(glp+"   GL_EXT_gpu_shader4: glBindFragDataLocation"+gl.isFunctionAvailable("glBindFragDataLocation"));
        System.err.println(glp+"");
        boolean complete30 = gl.isExtensionAvailable("GL_VERSION_3_0") &&
                        gl.isExtensionAvailable("GL_ARB_framebuffer_object") &&
                        gl.isExtensionAvailable("GL_ARB_map_buffer_range") &&
                        gl.isExtensionAvailable("GL_ARB_vertex_array_object") ;
        System.err.println(glp+"   GL_VERSION_3_0: "+gl.isExtensionAvailable("GL_VERSION_3_0")+", complete: "+complete30);
        System.err.println(glp+"       glBeginConditionalRender: "+gl.isFunctionAvailable("glBeginConditionalRender"));
        System.err.println(glp+"       GL_ARB_framebuffer_object: "+gl.isExtensionAvailable("GL_ARB_framebuffer_object"));
        System.err.println(glp+"           glIsRenderbuffer: "+gl.isFunctionAvailable("glIsRenderbuffer"));
        System.err.println(glp+"       GL_ARB_map_buffer_range: "+gl.isExtensionAvailable("GL_ARB_map_buffer_range"));
        System.err.println(glp+"           glMapBufferRange: "+gl.isFunctionAvailable("glMapBufferRange"));
        System.err.println(glp+"       GL_ARB_vertex_array_object: "+gl.isExtensionAvailable("GL_ARB_vertex_array_object"));
        System.err.println(glp+"           glBindVertexArray: "+gl.isFunctionAvailable("glBindVertexArray"));
        System.err.println(glp+"");
        boolean complete31 = complete30 &&
                   gl.isExtensionAvailable("GL_VERSION_3_1") &&
                   gl.isExtensionAvailable("GL_ARB_uniform_buffer_object") &&
                   gl.isExtensionAvailable("GL_ARB_copy_buffer") ;
        System.err.println(glp+"   GL_VERSION_3_1: "+gl.isExtensionAvailable("GL_VERSION_3_1")+", complete: "+complete31);
        System.err.println(glp+"       glDrawArraysInstanced: "+gl.isFunctionAvailable("glDrawArraysInstanced"));
        System.err.println(glp+"       GL_ARB_uniform_buffer_object: "+gl.isExtensionAvailable("GL_ARB_uniform_buffer_object"));
        System.err.println(glp+"           glGetUniformIndices: "+gl.isFunctionAvailable("glGetUniformIndices"));
        System.err.println(glp+"       GL_ARB_copy_buffer: "+gl.isExtensionAvailable("GL_ARB_copy_buffer"));
        System.err.println(glp+"           glCopyBufferSubData: "+gl.isFunctionAvailable("glCopyBufferSubData"));
        System.err.println(glp+"");
        boolean complete32 = complete31 &&
                   gl.isExtensionAvailable("GL_VERSION_3_2") &&
                   gl.isExtensionAvailable("GL_ARB_vertex_array_bgra") &&
                   gl.isExtensionAvailable("GL_ARB_draw_elements_base_vertex") &&
                   gl.isExtensionAvailable("GL_ARB_fragment_coord_conventions") &&
                   gl.isExtensionAvailable("GL_ARB_provoking_vertex") &&
                   gl.isExtensionAvailable("GL_ARB_seamless_cube_map") &&
                   gl.isExtensionAvailable("GL_ARB_texture_multisample") &&
                   gl.isExtensionAvailable("GL_ARB_depth_clamp") &&
                   gl.isExtensionAvailable("GL_ARB_geometry_shader4") &&
                   gl.isExtensionAvailable("GL_ARB_sync") ;
        System.err.println(glp+"   GL_VERSION_3_2: "+gl.isExtensionAvailable("GL_VERSION_3_2")+", complete: "+complete32);
        System.err.println(glp+"       GL_ARB_vertex_array_bgra: "+gl.isExtensionAvailable("GL_ARB_vertex_array_bgra"));
        System.err.println(glp+"       GL_ARB_draw_elements_base_vertex: "+gl.isExtensionAvailable("GL_ARB_draw_elements_base_vertex"));
        System.err.println(glp+"           glDrawElementsBaseVertex: "+gl.isFunctionAvailable("glDrawElementsBaseVertex"));
        System.err.println(glp+"       GL_ARB_fragment_coord_conventions: "+gl.isExtensionAvailable("GL_ARB_fragment_coord_conventions"));
        System.err.println(glp+"       GL_ARB_provoking_vertex: "+gl.isExtensionAvailable("GL_ARB_provoking_vertex"));
        System.err.println(glp+"           glProvokingVertex: "+gl.isFunctionAvailable("glProvokingVertex"));
        System.err.println(glp+"       GL_ARB_seamless_cube_map: "+gl.isExtensionAvailable("GL_ARB_seamless_cube_map"));
        System.err.println(glp+"       GL_ARB_texture_multisample: "+gl.isExtensionAvailable("GL_ARB_texture_multisample"));
        System.err.println(glp+"           glTexImage2DMultisample: "+gl.isFunctionAvailable("glTexImage2DMultisample"));
        System.err.println(glp+"       GL_ARB_depth_clamp: "+gl.isExtensionAvailable("GL_ARB_depth_clamp"));
        System.err.println(glp+"       GL_ARB_geometry_shader4: "+gl.isExtensionAvailable("GL_ARB_geometry_shader4"));
        System.err.println(glp+"           glProgramParameteri: "+gl.isFunctionAvailable("glProgramParameteri"));
        System.err.println(glp+"       GL_ARB_sync: "+gl.isExtensionAvailable("GL_ARB_sync"));
        System.err.println(glp+"           glFenceSync: "+gl.isFunctionAvailable("glFenceSync"));
        System.err.println(glp+"");
        System.err.println(glp+"   GL_AMD_vertex_shader_tessellator: "+gl.isExtensionAvailable("GL_AMD_vertex_shader_tessellator"));
        System.err.println(glp+"       glTessellationFactorAMD: "+gl.isFunctionAvailable("glTessellationFactorAMD"));
        System.err.println(glp+"");
        System.err.println(glp+"   EGL  : eglCreateContext: "+gl.isFunctionAvailable("eglCreateContext"));
        System.err.println(glp+"   EGLEx: eglCreateImage: "+gl.isFunctionAvailable("eglCreateImage"));
        System.err.println(glp+"");
        System.err.println(glp+"   GLX  : glXCreateWindow: "+gl.isFunctionAvailable("glXCreateWindow"));
        System.err.println(glp+"   GLX_ARB_create_context: "+gl.isExtensionAvailable("GLX_ARB_create_context"));
        System.err.println(glp+"");
        System.err.println(glp+"   WGL  : wglCreateContext: "+gl.isFunctionAvailable("wglCreateContext"));
        System.err.println(glp+"");
        System.err.println(glp+"   CGL  : CGLCreateContext: "+gl.isFunctionAvailable("CGLCreateContext"));
    }

    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
    }

    public void dispose(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        GLProfile glp = gl.getGLProfile();

        System.err.println(glp+" dispose");
    }

    public void display(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        GLProfile glp = gl.getGLProfile();

        System.err.println(glp+" display: "+displayed);
        displayed++;
    }
    int displayed = 0;

    public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {
    }

    public static int USE_NEWT      = 0;
    public static int USE_AWT       = 1 << 0;

    public static void main(String[] args) {
//        System.setProperty("java.library.path", "/home/Siassei/Projects/Private/jogamp/lib/jogl/lib");
        System.out.println(System.getProperty("java.library.path"));
//        System.loadLibrary("gluegen-rt");
        String glprofile  = null;
        int type = USE_NEWT ;
        for(int i=0; i<args.length; i++) {
            if(args[i].equals("-awt")) {
                type |= USE_AWT; 
            }
            if(args[i].startsWith("-GL")) {
                if(null!=glprofile) {
                    new GLInfo().start(glprofile, type);
                }
                glprofile=args[i].substring(1);
            }
        }
        new GLInfo().runInThread(glprofile, type);
    }
}
```


----------



## Siassei (21. Jul 2010)

Anscheinend mag der OpenSource-Treiber von RPMFusion Jogl nicht. Mit dem Orginaltreiber von Nvidia geht es. Das ist sch...! Nun muss ich bei jedem Kernelupdate auch den Nvidiatreiber manuell nachinstallieren :-(


----------

