Main Menu

AWTGLRenderer

Started by shadow, January 22, 2011, 04:57:28 PM

Previous topic - Next topic

shadow

Und gleich noch eine Frage :)

Über den AWTGLRenderer hab ich ganz wenig Infos gefunden, allerdings glaube ich, dass ich ihn in meinem Projekt brauche.
Hier steht, dass ich damit AWT und Swing benutzen kann: http://www.jpct.net/wiki/index.php/The_different_renderers
Auch beispielsweise die AWT Mouse- und KeyListener?

Hier steht, dass der OpenGL-Renderer sein eigenes Fenster mitbringt:
http://www.java-forum.org/spiele-multimedia-programmierung/68739-2-fenster-jpct.html
Ist das beim AWTGLRenderer auch so, oder muss ich den AWT Frame selbst erzeugen und benutze dann bei frameBuffer.display() das Graphics von meinem Frame.

Und wie initialisiert man den AWTGLRenderer?
In der JavaDoc hab ich im FrameBuffer die Methode enableGLCanvasRenderer() gefunden. Muss ich die zusammen mit enableRenderer(IRenderer.RENDERER_OPENGL, IRenderer.MODE_OPENGL) benutzen oder nur die erste Methode?
Wenn ich nur die erste Methode benutze, dann sehe ich nur ein leeres Frame....

In diesem Thread lese ich, dass man enableGLCanvasRenderer() auch mit Parameter aufrufen kann:
http://www.jpct.net/forum2/index.php/topic,282.0.html
Aber das geht wohl nicht mehr?

Würdest Du mir prinzipiell zu AWTGLRenderer raten, oder handle ich mir damit Nachteile ein?


EgonOlsen

Du kannst mit dem AWTGLRenderer die AWT-Listener nutzen. Aber nur deswegen würde ich das nicht tun. LWJGL bietet selber Möglichkeiten Maus und Tastatur zu pollen. Die Tastatur kannst du auch alternativ mit dem KeyMapper abfragen. Es gibt auch diverse Ausprägungen eines MouseMappers, der ähnlich arbeitet. Es sollte sich im Forum hier was dazu finden lassen. Du kannst auch die LWJGL-eigenen Klassen verwenden...die sind recht simpel zu benutzen.

Der AWTGLRenderer bringt kein Fenster mit. Der rendert in die Canvas, die die enable-Methode() zurückliefert. Was du dann damit machst, liegt an dir...

Den Parameter gibt es nicht mehr, weil die OpenGL-Renderer nur noch MODE_OPENGL unterstützen. Der andere Modus ist irgendwann rausgeflogen.

Prinzipiell würde nicht davon abraten, aber ihn nur benutzen, wenn es sein muss. Wenn du also die Kombination mit Swing/AWT unbedingt benötigt. Generell ist die AWT-Anbindung von LWJGL nicht so problemlos wie das Rendern in das native Fenster. Ich würde das, wenn möglich, immer vorziehen.

Du findest für alle drei Renderer ein HelloWorld-Beispiel in den Beispielen.

shadow

Weiß nur noch nicht sorecht, wie ich das HUD machen soll, und hatte da schon Swing im Sinn....

EgonOlsen

Keine gute Idee...wird auch nicht funktionieren, die GL-Canvas mit Swing zu übermalen. Der einfachste Weg ist, das HUD aus Texturen zu blitten. Für Text gibt es eine nette Hilfsklasse von raft, die sich irgendwo im Projects-Bereich finden lässt. Alternativ kann man versuchen, ein Gui-Framework wie FenGui zu benutzen. Aber für ein HUD erscheint mir das übertrieben.

shadow

Nach längerer Pause möchte ich wieder an meinem JPCT-Projekt weiterarbeiten.
Ich habe mir das mit den verschiedenen Renderern nochmal angesehen und bin jetzt leider etwas verwirrt...

Ich möchte auf jeden Fall Hardware-Rendering machen, verstehe aber nicht genau, was der Unterschied zwischen den beiden Hardware-Renderern (native/awt) ist...
Gibt es irgendwo ein Beispiel, wo die komplette Initialisierung mit mouse- und keyboard-Abfragen mit dem native renderer gemacht sind?

Danke!
Stefan

EgonOlsen

Der native Renderer verwendet sein eigenes Ausgabefenster und ist völlig losgelöst von Swing/AWT. Ich würde ihn immer vorziehen, da er stressfreier ist. Der AWT-Renderer nutzt eine AWT-Canvas zur Ausgabe. Dafür müssen einige Klimmzüge gemacht werden, die zwar funktionieren aber auch manchen System Kompatibilitätsprobleme zeigen. Das "Advanced Example" enthält Maus- und Tastaturkrams für den nativen Renderer. Du solltest aber auch im Forum selber genug dazu finden können.