Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 13, 2025 21:02

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: SDL_SetVideoMode
BeitragVerfasst: Fr Nov 17, 2006 11:07 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Hallo Ihr alle,

zunächst, damit ich es nicht vergesse: Ich arbeite mit Windows XP, SP2

Ich möchte Euch Folgendes berichten, weil das offensichtlich etwas unklar war:

Beim SDL_SetVideoMode verliert man im Windows(XP?) definitif seinen Rendering Context und bekommt vom System einen neuen verpasst. Die Folge ist, dass alle Texturen weg sind.

Nun kann man natürlich beim Fenster-Resize auf das Neusetzen des SDL_SetVideoMode verzichten, man sollte dabei aber wissen, dass dem SDL die Fensteränderung nicht mitgeteilt wurde, was natürlich Folgen hat: eigentlich schaut weiterhin alles normal aus. Die Mauskoordinaten werden dann aber von SDL falsch übergeben, weil SDL eben nicht Bescheid weiß (was sonst noch alles falsch läuft, kann ich derzeit nicht sagen).

Ich versuche gerade, eine GUI zu programmieren und bin dabei, das Verschieben eines Fensters mit der Maus hinzukriegen. Nach einem Window Resize (ohne Neusetzen des SDL_SetVideoMode) vollführt das Ding aber beim Verschieben groteske Bocksprünge, die auf falsche Mauskoordinaten zurückzuführen sind.

Mögliche Lösungen, die mir eingefallen sind:
1) Die sauberste Lösung: alle Texturen neu laden
2) Quick and dirty: interner Korrekturfaktor für die Mauskoordinaten

Sollte mir wieder was auffallen, werde ich es Euch berichten.

Viele Grüße,
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 17, 2006 11:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Die neue SDL Version soll dieses Problem behoben haben.

Du kann auch für Windows die Windows API nutzen und nur unter anderen Platforms SDL.
Wir haben in X-Dream bei allen Manager, die mit OpenGL arbeiten, eine reload Funktion hinzu gefügt gehabt.
Der Fallback von der X-Dream GUI hat solche Probleme nicht, da sie keine Texturen verwendet.
So sieht dies momentan aus http://tak2004.dyndns.org/share/screenshots/x-dream/window9.JPG und mit Texturen
http://tak2004.dyndns.org/share/screenshots/x-dream/newgui.PNG.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 17, 2006 13:08 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Naja, ich möchte das Windows API aber nicht benutzen. Ich bereite mich auf einen Umstieg auf Linux vor und möchte soviel wie nur möglich mitnehmen, deshalb will ich mich vorher schonmal an Free Pascal und SDL/OpenGl gewöhnen (Delphi ist natürlich viel luxuriöser :) ). Ich verwende SDL gerade deswegen, damit ich eben nicht beide Welten lernen muss; das ist ein Zeitproblem.
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 17, 2006 14:19 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Ich war gerade auf der SDL Website und habe mir die letzte Fassung der SDL.DLL heruntergeladen. Es ist die gleiche, die ich auch verwende, und meine ist aus dem DGLSDK. Also sollte ich die neueste Version haben.

Ich habe in der Zwischenzeit bei einem Objekt versucht, die Textur neu zu laden. Das hat aber nichts genützt. Außerdem wird jetzt viel langsamer gezeichnet, es sieht wie ein Fallback auf einen Software-Renderer aus. :shock:
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 17, 2006 15:04 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hmmm...
Ich hab mir im Wiki mal SDL_SetVideoMode durchgelesen. So gut kenne ich mich mit SDL auch nicht aus, aber ich würde mal den Parameter bpp auf 0 setzen. Sollte das auch nicht klappen, dann mal Flags auf 0 setzten, vielleicht hilfts...

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 17, 2006 16:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Danke für Eure Antworten. Ich habe in der Zwischenzeit meinen Code so erweitert, dass die Texturen einfach neu geladen werden können. Jetzt stimmen die Mauskoordinaten auch nach einem Resize.

@Lord Horazont: auf die einfachsten Dinge kommt man erst ganz zuletzt. Ja das habe ich auch gelesen, ist mir aber erst wieder eingefallen, als ich Deinen Beitrag gelesen habe. Probieren werd ich das auf jeden Fall. Man stelle sich vor: bei jedem Fenster-Resize die Texturen neu laden! Bei meiner GUI mag das ja noch hingehen, ich gestatte meinen kleinen Boards nur eine einzige Textur, mit der müssen sie auskommen :D . Im Hintergrund läuft ein einziges 3D-Objekt, damit ich sehe, wie glOrtho und glFrustum auf dem Screen miteinander zurechtkommen.

Naja, bei einem größeren Spiel wird dann sowieso der volle Bildschirm genommen, da gibts dann keine troubles mehr mit dem Resizing .....

Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 19, 2006 12:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hallo Traude

Ich habs ausprobiert, mit ernüchterndem Ergebnis... Die Texturen gehen definitiv verloren. Egal ob man nun BPP und/oder Flags auf 0 setzt. Wobei bei Flags auf 0 man sich an einem Schwarzen Fenster erfreuen kann :wink:
Gut, dass du das angesprochen hast, das muss ich in meiner Anwendung auch noch korrigeren (Fullscreen mit Auflösungswechsel in den Optionen).

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 19, 2006 15:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Ja, so ist das. Aber ich seh das so: problemlos ist das reine Fensterverschieben und das Minimieren /Maximieren(wenn es dann nur in der Taskleiste zu sehen ist). Eine Fenster-Größenänderung kommt nicht so häufig vor wie ich anfangs dachte. Und bei Fullscreenmode natürlich schon gar nicht. Oder anders ausgedrückt: man muss sein Programm so schreiben, dass das Nachladen der Texturen kein Problem ist.

@TAK2004: ich habe mir die ScreenShots Deiner GUI angesehen. Zum zweiten Bild hast Du geschrieben: "Und mit Texturen..."
Dazu wollte ich Dich fragen, wie Du die GUI-Items ohne Texturen machst. Die Buttons müssen somit aus mehreren Quads in verschiedenen Farben bestehen, richtig? Meine Knöpfe bestehen aus einem Quad und um das "Knopfdrücken" zu simulieren wechsle ich die Texturkoordinaten. Ich bin grade am Überlegen, ob Deine Methode nicht mehr Möglichkeiten hat.

Traude


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 17 Queries | GZIP : On ]