Komischer Fehler in LWJGL

Vancold

Aktives Mitglied
Hey!


Ich habe meine alten Projekte gelöscht, hab die Libraries von LWJGL in einen neuen Ordner getan (d.h die Jars und die natives) hab sie dann neu importiert in Netbeans.

Gut jetzt habe ich ein neues Projekt erstellt, die Libraries hinzugefügt (in der Runconfig -DJava verwendet; also den Befehl damit ich die natives finde).

Alles schön und gut. Nur seid ich das gemacht hab gibt mir das ganze einen Fehler bei folgendem Code aus

Java:
try {

     Display.setDisplayMode(new DisplayMode(width,height));
     Display.create();

} catch(LWJGLException ex) {

     ex.printStackTrace();
     System.exit(0);
}

org.lwjgl.LWJGLException: Pixel format not accelerated
at org.lwjgl.opengl.WindowsPeerInfo.nChoosePixelFormat(Native Method)
at org.lwjgl.opengl.WindowsPeerInfo.choosePixelFormat(WindowsPeerInfo.java:52)
at org.lwjgl.opengl.WindowsDisplay.createWindow(WindowsDisplay.java:228)
at org.lwjgl.opengl.Display.createWindow(Display.java:303)
at org.lwjgl.opengl.Display.create(Display.java:845)
at org.lwjgl.opengl.Display.create(Display.java:754)
at org.lwjgl.opengl.Display.create(Display.java:736)
at Main.PongMain.initDisplay(PongMain.java:40)
at Main.PongMain.start(PongMain.java:18)
at Main.PongMain.main(PongMain.java:67)

Und diese Zeile 40 ist mein create();

Komisch. Es funktioniert sonst auch immer. Der Pfad in DJava ist absolut und mit "". Die Jars sind alle importiert und hinzugefügt zum Projekt. KEINE Ahnung warum es nicht mehr geht.


Lustiger weise hatte ich den vorher nie und da hab ich schon Spiele programmiert gehabt die funktioniert haben mit dem selben Code.


lg

Rene

PS:Width und Height sind int Variablen. Das hat bis jetzt nie Probleme gemacht.
 
Hey!

Hat den keiner eine Ahnung warum der Fehler jetzt auftaucht? Wenn nicht installier ich die IDE neu und lads mir neu runter. Mal sehen was dann passiert 😉


lg

Rene
 
Moin,

ich habe von Netbeans keine Ahnung, aber um sicherzugehen: Den Parameter hast Du vollständig angegeben? (-Djava.library.path= ...)

Ansonsten habe ich so einen Fehler schon mal gesehen, wenn die Version der LWJGL-JARs und der LWJGL-Natives nicht übereinstimmt. Hast Du vielleicht noch irgendwo eine alte Version der Natives die vorher geladen wird? Mansche kopieren die schon mal irgendwo ins Windowsverzeichnis und wundern sich später, warum es mit einer neuen LWJGL-Version nicht mehr geht. (Irgendwelche LWJGL-Natives werden gefunden, sonnst wäre die Fehlermeldung eine andere.)

Viele Grüße,
Fancy
 
Hey!

Nö ich hab die eine Version zentral gelagert und ja den Path hab vollständig angegeben sogar mit "".

Ich installiers einfach neu das sollte es eh beheben 😉

Aber trotzdem danke für die Antwort!


lg

Rene
 
Also ich benutze [c]new DisplayMode()[/code] eigentlich gar nicht. Ich hole mir mit [c]Display.getAvailableDisplayModes()[/c] alle möglichen Displaymodes und wähle anschliessend mit
Java:
		DisplayMode displayMode;
		for (int i = 0; i < d.length; i++) {
			if (d[i].getWidth() == 640 && d[i].getHeight() == 480
					&& d[i].getBitsPerPixel() == 32) {
				displayMode = d[i];
				break;
			}
		}
		Display.setDisplayMode(displayMode);
den brauchbarsten aus.
 
Zuletzt bearbeitet von einem Moderator:
Ist nur ne Vermutung, war in dem Treiberpaket deiner Grafikkarte die Opengl-Treiber bei? Probiers mal mit einem Treiberupdate.
 
Also ich benutze [c]new DisplayMode()[/code] eigentlich gar nicht. Ich hole mir mit [c]Display.getAvailableDisplayModes()[/c] alle möglichen Displaymodes und wähle anschliessend mit
Java:
		DisplayMode displayMode;
		for (int i = 0; i < d.length; i++) {
			if (d[i].getWidth() == 640 && d[i].getHeight() == 480
					&& d[i].getBitsPerPixel() == 32) {
				displayMode = d[i];
				break;
			}
		}
		Display.setDisplayMode(displayMode);
den brauchbarsten aus.

Hey!

Hab mein Problem zwar gelöst aber hey der Code ist echt nützlich. Bin noch nicht so erfahren mit lwjgl danke : )


lg

Rene
 
Auch wenn das eigentliche Problem schon behoben ist, ich geb dir einfach mal meine Methode, wie ich sie bei meinem letzten Spiel verwendet habe.
Vielleicht hilft es dir ja früher oder später weiter die Kompatibilität deines Programms zu maximieren 🙂


Java:
	public void setDisplayMode(int width, int height, boolean fullscreen) {
		if ((Display.getDisplayMode().getWidth() == width) && (Display.getDisplayMode().getHeight() == height)
				&& (Display.isFullscreen() == fullscreen)) {
			return;
		}

		try {
			DisplayMode targetDisplayMode = null;

			if (fullscreen) {
				DisplayMode[] modes = Display.getAvailableDisplayModes();
				int freq = 0;

				for (int i = 0; i < modes.length; i++) {
					DisplayMode current = modes[i];
					System.out.println(current.toString());

					if ((current.getWidth() == width) && (current.getHeight() == height)) {
						if ((targetDisplayMode == null) || (current.getFrequency() >= freq)) {
							if ((targetDisplayMode == null) || (current.getBitsPerPixel() > targetDisplayMode.getBitsPerPixel())) {
								targetDisplayMode = current;
								freq = targetDisplayMode.getFrequency();
							}
						}

						if ((current.getBitsPerPixel() == Display.getDesktopDisplayMode().getBitsPerPixel())
								&& (current.getFrequency() == Display.getDesktopDisplayMode().getFrequency())) {
							targetDisplayMode = current;
							break;
						}
					}
				}
			} else {
				targetDisplayMode = new DisplayMode(width, height);
			}

			if (targetDisplayMode == null) {
				System.out.println("Failed to find value mode: " + width + "x" + height + " fs=" + fullscreen);
				return;
			}

			Display.setDisplayMode(targetDisplayMode);
			Display.setFullscreen(fullscreen);
		} catch (LWJGLException e) {
			e.printStackTrace();
		}
	}
 
Komischerweise nimmt er das absolut gar nicht. Dem Programm gehts gar nicht um den DisplayMode das macht das aus prinzip. Egal was ich tue es wirft immer den selben Fehler!

lg

Rene
 
Du hast geschrieben das Problem wäre gelöst, wenn ja, wie?
Wenn nein, wie sehn den deine Randbedingungen aus?
 
Zuletzt bearbeitet:
Ich habs wieder als nicht gelöst markiert -> es ist nicht gelöst.

Der Fehler ist der selbe. Hab LWJGL neu runtergeladen neu importiert andere IDE benutzt und auch die Codeschnippsel probiert die gepostet wurden. Und die DJava Link ist der richtige!

D.h ich bin ratlos


lg

Rene
 
Ich erinnere mich gerade, mal ein Problem mit LWJGL und OpenAL auf Win7 64 Bit gehabt zu haben...
Das Problem war, dass die Java Natives alle korrekt installiert waren, diese aber die nötigen DLLs (OpenAL64.dll) des Systems nicht finden konnten. Ich habe deswegen die System-DLLs ins LWJGL-Verzeichnis kopiert und schon funktionierte es. Evtl. klappt das bei OpenGL ja genau so.
 
Warum klappt es jetzt nicht mehr?

Ich hab weder updates sonst noch etwas gemacht. Das System ist das selbe. es hat ca 3 monate durchgehend funktioniert.


lg

Rene
 
Hey!

Das mit dem Treiber hab ich probiert hat nichts gebracht.

Nein das sind die natives die im ZIP File waren. Ich habs mir sogar neu von SourceForge geholt das Zip und es entpackt und die natives vom neu entpackten angegeben bzw verlinkt für LWJGL.

Wie meinst du testen obs auf einem anderen System läuft?


lg

Rene
 

Zurück
Oben