PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SDL startet immer im Vollbildmodus und entzieht mir die Eingabemöglichkeit



stexie
15-09-2003, 12:30
ich habe folgendes Problem:

Ich habe ein Automatensystem entwickelt, dass auf meinem Entwicklungsrechner einwandfrei funktioniert. Einige grundlegende Infos
dazu:
Das Hauptprogramm steuert die angeschalteten Geräte (Münzprüfer, Geldnotenleser, Drucker, usw.) und fragt zur Kommunikation mit dem Kunden stzetig die Tastatur ab. Zu Beginn wird aus dem Hauptprogramm heraus eine Grafikroutine als Thread gestartet. Die Grafikroutine läuft dann (unabhängig vom Hauptprogramm) und gibt nur Stausinformationen aus. Die Grafik wurde mit SDL erstellt. Zu Beginn wird mit SDL_INIT_VIDEO der SDL-Videomodus initialisiert und danach mit SDL_SetVideoMode ein Fenster (hier 640x480) erzeugt.

Mit dem Initialisieren der Grafik wird auch der Focus an die Grafik übertragen. Allerdings hole ich mir im Hauptprogramm mit
XSetInputFocus() den Focus ins Hauptprogramm zurück, damit ich innerhalb des Hauptprogramms weiterhin die Tastatur abfragen kann.

In meinem Bezahlautomaten sitzt jetzt ein SingleBoardComputer. Also habe ich das Programm auf den Computer übertragen und gestartet. Das Hauptprogramm (ohne die Grafik) funktioniert problemlos. Starte ich jetzt aber die Grafik wird das neue Fenster bei der SDL-Initialisierung immer als Vollbild erzeugt, die Maus ist ab sofort tot und die Tatstatur reagiert auch nicht mehr. Ich kann mich zwar z. B. über telnet auf den Computer einloggen, allerdings kann ich den Prozess nicht beenden, da ich keine root-Rechte habe. Damit bleibt mir nicht anderes übrig, als den Rechner neu zu starten.

Kurioserweise wird auch dann ein Vollbild initialisiert, wenn ich mit SDL_SetVideoMode z. B. ein Fenster mit 400x200 Pixel erzeuge. Das Bild wird dann zwar in der richtigen Größe dargestellt, allerdings wird das kleine Fenster dann mittig auf dem Display dargestellt und der Rahmen wird einfach schwarz gezeichnet. Jetzt kann ich auch nicht mehr z. B. in die Konsole umschalten. Auf dem Entwicklungsrechner wurde nur das Fenster neu erstellt, man konnte aber alle anderen Fenster im Hintergrung noch sehen und jederzeit dahin umschalten (z. B. durch Anklicken mit der Maus).

Ich bin wirklich ratlos und für jeden Hinweis dankbar. Außerdem muss der Automat bald laufen, das ganze ist nämlich eine Diplomarbeit und der Abgabetermin rückt bedrohlich näher…

Schon jetzt Danke für jeden Hinweis…

axeljaeger
15-09-2003, 13:58
Wenn ich dich richtig verstehe, hast du zwei Programme, eins mit X, eins mit SDL. Das mit SDL soll die Bildschirmausgaben machen, das mit X soll die Events abfangen? OK, das hilft dir jetzt nicht weiter und ich erinnere mich, das wir so ein Thema schonmal hatte, aber warum machst du das Eventhandling nicht auch mit SDL und hast dann nur noch ein Programm? Wenn du mit SDL ein Fullscreenfenster machst, sollte sich dieses Fenster schon alle Events krallen, das Verhalten ist also nicht besondern überraschend.

stexie
15-09-2003, 14:11
soweit ganz richtig. Das Hauptprogramm läuft im Hintergund in einer Konsole. Die Grafik läuft davon unabhängig unter SDL.

Das Eventhandling soll allerdings aus zwei Gründen im Hauptprogramm verbleiben:

1. Das Programm ist bereits fertig programmiert und läuft auf dem Entwicklungsrechner stabil.

2. Die Grafik soll vom restlichen Programm getrennt bleiben. Es handelt sich um ein Automatensystem, bei dem die Komponenten jederzeit austauschbar sein sollen. Es kann also vorkommen, dass das Display und damit die Grafikroutine geändert werden. Dadurch, dass die Grafik vom Hauptprogramm unabhängig funktioniert ist dies leicht machbar.

Das Problem habe ich aber dadurch im Griff, dass ich mir die Standardeingabe in das Hauptprogramm zurückhole.

Das Problem ist halt, dass die SDL Grafik auf dem Zielrechner irgendwie abschmiert. Das Fenster erscheint und ich habe keine Möglichkeit auf den Rechner Einfluss zu nehmen. Die Tastatur und die Maus ist dann tot. Irgendwie funktioniert die SDL-Grafik auf dem System nicht obwohl eigentlich exakt dieselbe Software drauf ist. Kann das ganze an der Hardware liegen? SDL setzt doch auch auf X11 auf - oder?

Ich weis im Moment echt nicht weiter...

axeljaeger
15-09-2003, 16:01
SDL kann alles mögliche für die Ausgabe verwenden: X11, Framebuffer, DirectX unter Windows. Aber es ist allgemein ungebräuchlich, das in zwei Programme aufzuteilen. Man würde das wohl eher mit einem Plugin machen. Das Problem ist halt, das SDL dir ein Fenster aufmacht, dieses Fenster den Fokus bekommt. Du kannst aber mal versuchen, mit deinem X11-Programm ein Fenster aufzumachen und deine SDL-Grafiken einzubetten. Dazu musst du vor SDL_Init eine Env-Variable namens SDL_WINDOWID setzen, in der die WindowID drinnsteht, die SDL verwenden soll.