X Window System Fehler mit InitEngine3D und WindowEvent()

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
computerkranker
Beiträge: 66
Registriert: 12.10.2004 21:21

X Window System Fehler mit InitEngine3D und WindowEvent()

Beitrag von computerkranker »

Wollte nur mal in die Runde fragen ob das bei anderen auch auftaucht.

Ist bei der Einstellung Compiler-Optionen/Library Subsystem "opengl" angegeben, erzeugt die Abfrage von WindowEvent() ein "X Window System error".
Ohne WindowEvent() kann aber das erzeugte Fenster nicht bewegt werden und ohne opengl geht der InitSprite3D Befehl nicht.

Code: Alles auswählen

If InitEngine3D()
	If InitSprite()
		If InitSprite3D()
			If OpenWindow(0, 0, 0, 800,600, "window")
				If OpenWindowedScreen(WindowID(0), 0, 0, 800,600, 0, 0, 0)
					Repeat
						WindowEvent()
					ForEver
				EndIf
			EndIf
		EndIf
	EndIf
EndIf
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Die OGRE Engine und die Sprite3D Library können nicht zusammen in einem Programm verwendet werden. Es sind 2 unterschiedliche, eigenständige Engines (letztere wohl immerhin eine um einiges primitivere, aber immerhin).
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
computerkranker
Beiträge: 66
Registriert: 12.10.2004 21:21

Beitrag von computerkranker »

Hatte mich etwas falsch ausgedrückt. Ohne die Einstellung Compiler-Optionen/Library Subsystem "opengl", läuft unter anderen OpenWindowedScreen auch nicht.
Deswegen laufen übrigens auch die Examples die Screen3DRequester.pb benutzen nicht. (zumindest bei mir)

Ist "opengl" gesetzt dann geht WindowEvent() nicht sondern erzeugt einen X-Server Fehler. Ich denke das sollte es so oder so nie. Ausserdem sollte man ja mal die Events von einem Fenster abfragen können auch wenn opengl benutzt wird.

Vielleicht kann es ja mal jemand testen und falls es bei ihm geht den Distri schreiben.

Edit:

Sobald OpenWindowedScreen benutzt wird erzeugt WindowEvent() ein Fehler im X-Server.
Würde mich über eine Bestätigung freuen :D. Damit ich es als Bug melden kann oder halt nicht wenn es nur bei mir auftaucht.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Ich kann es gerade nicht rekonstruieren, da ich Linux nicht installiert habe. Aber früher (vor einem halben Jahr) lief alles mit Sprite&Screen ohne XServer Probleme unter Ubuntu 8.10 (auch schon davor unter 8.04).
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
computerkranker
Beiträge: 66
Registriert: 12.10.2004 21:21

Beitrag von computerkranker »

Ich habe auf jeden Fall das Problem das es unter Ubuntu 9.04(i386) und ArchLinux(i686) nicht läuft.

Edit:

Folgender Code zeigt das Problem noch besser.
Wird "Window 1" bewegt läuft alles normal. Bewegt man das 2 Fenster schmiert das Programm ab und der X-Server regt sich in der Log auf das ein Fehler aufgetreten ist.

Bitte Compiz einschalten.

Code: Alles auswählen

If InitEngine3D()
	If InitSprite()
		If InitKeyboard()
			OpenWindow(1, -1, -1, 300,300, "Window 1")
			If OpenWindow(0, -1, -1, 300,300, "Window 2")
				OpenWindowedScreen(WindowID(0), 0, 0, 300, 300, 0, 0, 0)
				Repeat
					WindowEvent()
					FlipBuffers()
					Delay(10)
				ForEver
			EndIf
		EndIf
	EndIf
EndIf
Sieht für mich so aus ob würde beim internen abarbeiten von WindowEvent() bei einem Fenster was ein OpenWindowedScreen beinhaltet ein Fehler auftretten.

Edit:

Der X-Server spuckt übrigens bei mir das aus.

Code: Alles auswählen

The program 'test' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadMatch (invalid parameter attributes)'.
(Details: serial 15 error_code 8 request_code 128 minor_code 5)
Benutzeravatar
bembulak
Beiträge: 228
Registriert: 13.12.2005 16:34
Wohnort: Österreich

Beitrag von bembulak »

Wenn du WindowedScreen() hast, kannst du kein 2tes Fenster öffnen, ansteueren, etc.

Das ist ein PB-spezifisches Problem.

Laut PB macht man erst mit OpenWindow() ein Fenster (da erzeugt man allerdings ein GTK-Fenster!!!).
Mit OpenWindowedScreen() erzeugt man aber kein GTK-Fenster mit einem Screen drinnen, sondern eigentlich macht man sowas wie

Code: Alles auswählen

// C Code:
SDL_SetVideoMode(width, height, depth, surface);
.
SDL und GTK sind zwei unterschiedliche Technologien. Es ist jetzt in PB schon ein Wunder, dass man bei OpenWindowedScreen() nicht 2 Fenster (nämlich ein GTK und ein SDL-Fenster) hat, sondern PB sich darum kümmert, die beiden möglichst übereinander zu legen.
Mir ist auch kein anderes Framework bekannt, welches es schafft, SDL einzubetten. Weder GTK, noch QT, noch FLTK oder sonst was können das.

Am besten vergisst du mit PB unter Linux sehr schnell wieder, Screen + Gadgets (daher auch die dazugehörigen Events und deren Handling) zu kombinieren - es geht nämlich nicht.

Btw: was sollen bitte die ganzen geschachtelten IF's?
Ein

Code: Alles auswählen

;====================
; Initialisation
;====================
If InitSprite() = 0
  MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
  End
EndIf

If InitSound() = 0
  MessageRequester("Error", "Can't open sound & audio enviroment!", 0)
  End
EndIf

If InitKeyboard() = 0
  MessageRequester("Error", "Can't open keyboard & input enviroment!", 0)
  End
EndIf
vor dem Code wäre IMHO leichter zu lesen und die Einrückung rutscht auch nicht so weit nach rechts.
Ist "opengl" gesetzt dann geht WindowEvent() nicht sondern erzeugt einen X-Server Fehler.
Ja, weil es von dem Fenster keinen GTK-Event gibt, weil's ein SDL-Fenster ist. X versucht hier, von GTK etwas zu bekommen, das GTK gar nicht kennt/hat.
Sobald OpenWindowedScreen benutzt wird erzeugt WindowEvent() ein Fehler im X-Server.
Würde mich über eine Bestätigung freuen Very Happy. Damit ich es als Bug melden kann oder halt nicht wenn es nur bei mir auftaucht.
Dass es crasht, kann ich mir vorstellen, aber ein Bug ist es nicht.
Zu dem Thema "WindowedScreen unter Linux" gibt es im englischen Forum genug Themen.

Da die vielen, vielen Frameworks und Libs unter Linux unabhängig von einander entwickelt werden, ist es oft einfach nicht möglich, die unter einen Hut zu bringen.
Benutzeravatar
computerkranker
Beiträge: 66
Registriert: 12.10.2004 21:21

Beitrag von computerkranker »

Ja, weil es von dem Fenster keinen GTK-Event gibt, weil's ein SDL-Fenster ist. X versucht hier, von GTK etwas zu bekommen, das GTK gar nicht kennt/hat.
Kann ich mir so nicht vorstellen! Wenn ich InitEngine3D() nicht aufrufe, geht es ohne Probleme.
Antworten