# Probleme mit JOGL



## TriipaxX (22. Mai 2006)

Hallo ihrs, 

ich hab nen bescheidenes Prob mit JOGL. 
Ich möchte mit JOGL Shader programmieren und hab mir von sun die neuste JOGL-Version gezogen ( JSR-231 beta 04 - April 20 2006 ) und dazu das Cg-Toolkit 1.3 von NVidia ( habs aber auch schon mit dem 1.4er probiert ). 
Ich habe die jogl.jar in "[jdk-home]/jre/lib/ext" kopiert und die 3 native librarys (jogl.dll,  jogl_awt.dll, jogl_cg.dll) in "[jdk-home]/jre/bin" kopiert. JDK-Version ist die neuste (jdk1.5.0_06).
Ich habe nun ein kleines Testprogramm schreiben wollen in dem ich einfach nur ein Quadrat und eine Lichtquelle habe und wollte nun ein Per-Pixel-Lightning zu schreiben. Die JOGL-Grundbefehle funktionieren, aber wenn man ich nun nen Cg-Context mit 
	
	
	



```
Context = CgGL.cgCreateContext();
```
 erstellen will, bekomme ich diese Fehlermeldung beim Start: 

```
Exception in thread "Thread-2" javax.media.opengl.GLException: java.lang.UnsatisfiedLinkError: C:\Programme\Java\jdk1.5.0_06\jre\bin\jogl_cg.dll: Die angegebene Prozedur wurde nicht gefunden
        at javax.media.opengl.Threading.invokeOnOpenGLThread(Threading.java:266)
        at javax.media.opengl.GLCanvas.maybeDoSingleThreadedWorkaround(GLCanvas.java:256)
        at javax.media.opengl.GLCanvas.display(GLCanvas.java:130)
        at com.sun.opengl.util.Animator.display(Animator.java:144)
        at com.sun.opengl.util.Animator$MainLoop.run(Animator.java:181)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.UnsatisfiedLinkError: C:\Programme\Java\jdk1.5.0_06\jre\bin\jogl_cg.dll: Die angegebene Prozedur wurde nicht gefunden
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1668)
        at java.lang.Runtime.loadLibrary0(Runtime.java:822)
        at java.lang.System.loadLibrary(System.java:992)
        at com.sun.opengl.impl.NativeLibLoader$DefaultAction.loadLibrary(NativeLibLoader.java:78)
        at com.sun.opengl.impl.NativeLibLoader.loadLibrary(NativeLibLoader.java:101)
        at com.sun.opengl.impl.NativeLibLoader.access$100(NativeLibLoader.java:47)
        at com.sun.opengl.impl.NativeLibLoader$4.run(NativeLibLoader.java:151)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.opengl.impl.NativeLibLoader.loadCgImpl(NativeLibLoader.java:148)
        at com.sun.opengl.cg.CgGL.<clinit>(CgGL.java:5412)
        at jogltest.Test.init(Test.java:66)
        at com.sun.opengl.impl.GLDrawableHelper.init(GLDrawableHelper.java:72)
        at javax.media.opengl.GLCanvas$InitAction.run(GLCanvas.java:264)
        at com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:189)
        at javax.media.opengl.GLCanvas$DisplayOnEventDispatchThreadAction.run(GLCanvas.java:298)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
```

Hat vielleicht einer ne Idee warum und was ich dagegen machen kann?  

Vielen Dank im Vorraus....


----------



## Thomas Darimont (22. Mai 2006)

Hallo!



> Die angegebene Prozedur wurde nicht gefunden
> at javax.media.opengl.Threading.invokeOnOpenGLThread(Threadi


Ich vermute mal, dass die DLLs nicht zusammenpassen, bzw. JOGL eine andere Version der NVidia DLLs voraussetzt.

Weiterhin:
Kopiere die 3 Dlls besser nach Windows\System32 oder in das Verzeichnis aus dem deine Anwendung gestartet wird. Ausserdem solltest du das jogl Jar nicht ins lib/ext Verzeichnis legen, die dies sonst mit anderen Bibliotheken kollidieren oder ClassLoading Probleme verursachen kann. Besser du fuegst es dem Anwendungsclasspath hinzu. Also beim Start der Anwendung ueber java -cp c:/foo/bar/libs/jogl.jar de.tutorials.JoglExample. Oder wenn du eine IDE wie beispielsweise Eclipse verwendest dem Projekt Classpath.

Gruss Tom


----------



## TriipaxX (22. Mai 2006)

Also das ganze als Separate Library in Netbeans einbinden hat schon mal meinen Fehler behoben....allerdings hab ich jetzt nen neuen....  -.-


```
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no jogl in java.library.path
....
```

kopiere ich nun die dlls in "../system32" dann bekomme ich meinen alten Fehler wieder. Ganz schön kacke der mist. 
Die DLL`s müssten eigentlich alle zusammen passen, habs nun mit Cg-Version 1.3, 1.4 und 1.5Beta1 probiert. Und es ändert sich rein gar nix an der Fehlermeldung.

Hast du noch eine andere Idee, ausser Windoof neu machen und hoffen?


----------



## Thomas Darimont (22. Mai 2006)

Hallo!

Du koenntest in deiner Laufzeitkonfiguration den java.library.path auf den Speicherort der dlls setzen:

java -Djava.library.path=c:/jogl/libs ...

Gruss Tom


----------



## TriipaxX (22. Mai 2006)

scheint nicht zu funktionieren....
1. krieg ich keine bestätigung nach eingabe der befehlszeile, nur wieder die auflistung welche argumente erlaubt sind....
und 2. es geht immer noch nicht....


----------



## Thomas Darimont (22. Mai 2006)

Hallo!

Dann machst du noch irgend einen anderen Fehler... das funktioniert bei mir so einwandfrei...


> 1. krieg ich keine bestätigung nach eingabe der befehlszeile


Zeig mal deinen Aufruf...

Gruss Tom


----------



## TriipaxX (22. Mai 2006)

So sieht das aus...


> C:\Programme\Java\jdk1.5.0_06\jre\bin>java -Djava.library.path=C:/Programme/JOGL/lib



also laut deiner Angabe müsste das so gehen....


----------



## Thomas Darimont (22. Mai 2006)

Hallo!



> also laut deiner Angabe müsste das so gehen....


... hättest du die drei "." beachtet wüsstest du das da auch noch ein wenig mehr stehen muss... ;-)
java -cp .;c:/jogl/foo.jar;c:/jogl/bar.jar -Djava.library.path=c:/jogl/libs de.tutorials.JoglExample

Gruß Tom


----------



## TriipaxX (23. Mai 2006)

Sorry wenn ich jetzt nochmal doof frage,


> java -cp .;c:/jogl/foo.jar;c:/jogl/bar.jar -Djava.library.path=c:/jogl/libs de.tutorials.JoglExample


also 


> java -cp .;C:/Programme/jogl/lib/jogl.jar -Djava.library.path=c:/Programme/jogl/bin [....]


...ich weiss aber nicht was das "de.tutorials.JoglExample" dahinter ist... mein Projekt?


----------



## Thomas Darimont (23. Mai 2006)

Hallo!

Anstatt de.tutorials.JoglExample solltest du den voll qualifizierten Klassennamen deiner "main"-Class angeben.

Gruss Tom


----------



## TriipaxX (23. Mai 2006)

Aber das geht dann nicht mit einer IDE wie Netbeans oder Eclipse?


----------



## Thomas Darimont (23. Mai 2006)

Hallo!

Natuerlich geht das... so ziemlich in jeder IDE kannst du die Startoptionen fuer den Java Launcher anpassen.

Gruss Tom


----------



## TriipaxX (23. Mai 2006)

Ich verstehs nicht... es geht gar nix.
Ich glaube auch nicht das es direkt an den *.dll´s liegt...denn normal JOGL-Code geht ja, ich krieg die Fehler nur wenn ich Cg nutzen will.


----------

