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

Aktuelle Zeit: Fr Jul 18, 2025 08:02

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



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: SDL verschluckt ClearColor
BeitragVerfasst: So Aug 23, 2009 16:40 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Hi!

Ich hab mir heute mal SDL angeschaut um es besser verurteilen zu können und habe nun eine Kleinigkeit entdeckt, die ich nicht verstehe. Ich habe das Template ausm Wiki als Grundlage genommen und ein wenig umgebaut. An sich ist es noch das selbe wie vorher auch, allerdings hab ich alles in eine Klasse gestopft.
Nun mal zum Problem: Wenn ich die Fenstergröße ändere, dann ist die ClearColor wieder schwarz. Das fällt bei einigen evtl. nicht auf, weil sie die eh immer schwarz haben, ich benutze allerdings lieber einen dunklen grau/blau Ton. Eine Lösung ist mir bereits gekommen. Ich stelle die ClearColor einfach in jedem Frame neu ein. Das finde ich aber doof. Nach einigem Gesuche im Forum habe ich etwas Ähnliches entdeckt und zwar, dass die Texturen nach einem Resize verschwinden solen (ich glaube der Thread ist von 2005). Warum das so ist hab ich nicht verstanden, hat jemand Erfahrung damit und kann mir helfen? Resize betrifft nähmlich auch meinen Fullscreenmode und das ist doof.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 23, 2009 17:20 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Ich GLAUBE, ich kann helfen. Mir fiel da mal ein Unterschied zwischen Windows undd Linux auf, wo ich nicht auf ein #ifdef verzichten konnte - trotz der eierlegenden Plattformunabhängigkeitssau SDL.
Wenn ich unter Windows bin, erstelle ich das Surface neu, wenn ich NICHT unter Windows bin, nicht. Im Beispiel war es imho mit Neu erstellen. Ein Ausschnitt meiner SDL_VIDEORESIZE Abfrage sieht also so aus:
Code:
  1.  
  2.         case SDL_VIDEORESIZE :
  3.           ZWattribute___.width=event.resize.w;
  4.           ZWattribute___.height=event.resize.h;
  5.           #ifndef WIN32
  6.           ZWattribute___.surface = SDL_SetVideoMode( ZWattribute___.width, ZWattribute___.height, ZWattribute___.bpp, ZWattribute___.sdlflags );
  7.           #endif
  8.           ZWglResizeWindow( );
  9.           break;
  10.  


Zumindest werden so sowohl unter Windows als auch Linux die Texturen so nicht gelöscht. Wie es sich mit der glClear-Color verhällt, weiß ich nicht. Aber ich vermute, dass man nur so den "Verlust" des DC verhindert.

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 23, 2009 17:24 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
also ich arbeite gerade auf Windows und erstelle das Surfaces neu, aber es geht nicht. Gibt es keine Möglichkeit einfach nur die Fenstergröße um zustellen, ohne dass man gleich alles neu anfordert? Son Resize ist zwar nicht die häufigst genutzte Funktion, aber ich will trotzdem dass es geht, denn zufrieden bin ich damit so nicht.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 23, 2009 17:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
SDL hat von Haus aus das Problem, dass man beim Resize den Kontext verliert, ja.

greetings

_________________
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 Aug 23, 2009 17:27 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Oh. Fehler. Wenn Windows NICHT definiert, ist erstelle ich das Surface neu. Wie in meinem Code. Nimm es mal weg.

@Hora: Meine DC bleiben da, wo sie sind mit meinem Code. :-P

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 23, 2009 18:41 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
okay, also so gehts jetzt einigermaßen und beim Wechsel zwischen Fullscreen und Windowed übergeb ich einfach meine Standart Einstellungen neu. Nicht der schönste Weg, aber immerhin ein Weg.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 23, 2009 18:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Musst dann halt aber auch deine Texturen und alles neu laden.

greetings

_________________
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 Aug 23, 2009 18:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Sellmann hat geschrieben:
okay, also so gehts jetzt einigermaßen und beim Wechsel zwischen Fullscreen und Windowed übergeb ich einfach meine Standart Einstellungen neu. Nicht der schönste Weg, aber immerhin ein Weg.

Hast du es mal OHNE Surface neu erstellen probiert?

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 23, 2009 19:25 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
also beim normalen Resize mach ich es ohne, aber beim Wechsel in Fullscreen muss ich ja die Flags um SDL_FULLSCREEN erweitern, deshalb muss ich ja wohl oder übelst das Surface neu erzeugen, oder geht das auch anders?

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 23, 2009 19:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Sellmann hat geschrieben:
also beim normalen Resize mach ich es ohne, aber beim Wechsel in Fullscreen muss ich ja die Flags um SDL_FULLSCREEN erweitern, deshalb muss ich ja wohl oder übelst das Surface neu erzeugen, oder geht das auch anders?

Du willst im laufenden programm zwischen Fullscreen und nicht Fullscreen wechseln? Ich sage einfach, man solle doch bitte das Programm neustarten und fertig ist :-P

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 23, 2009 20:12 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
hehe, so kommt man auch drum herum :)

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 23, 2009 21:39 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
IMHO wollen mindestens 50% der kommerziellen Spiele, dass man neu startet... Unter Linux ist es mir egal, da wird mit Alt+F11 _jedes_ Fenster Vollbild.

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 24, 2009 08:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich meine jemand hätte mal gesagt, dass beim Resizen ohne den Aufruf von SDL_SetVideoMode die Mauskoordinaten nicht mehr stimmten. (Oder hatte ich das selber schon mal gehabt??) Also wenn der User das Fenster in der Größe anpasst, dann spielt das für OpenGL keine Rolle. Aber wohl für die internen Mausberechnungen von SDL. Weswegen man dann SDL_SetVideoMode aufrufen muss und sich damit dann den Kontext selber zerschießen muss.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 24, 2009 09:52 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Hm, dazu kann ich keine Aussage treffen, weil ich mein jetziges Spiel ohne Maussupport gestalte. Ist aber eine Sache, die man mal beobachten sollte. Was ich komisch finde: Unter Linux zerschieß ich mir mit der Methode garnichts unter Windows aber schon. An der Stelle hätte SDL wirklich irgendwie nen Workaround anbieten können. Sowas wie "SDL_PushGLContext" und "SDL_PopGLContext" oder so ähnlich halt. Dass man den halt IRGENDWIE am leben halten kann. Aber wahrscheinlich ist das alles nicht so einfach... Naja, ich komme im Moment gut klar und bin auf 1.3 gespannt. Aber das mit der Maus teste ich nochmal.

Edit: So, ich habe unter Linux und Windows eine beliebige SDL-Applikation mit eben jener Eigenschaft unter Linux das Surface neu zu erstellen und unter Windows nicht, mit der Funktionalität versehen a) die Maus anzuzeigen und b) mithilfe von SDL_GetMouseState stetig die Mausposition auf der Konsole auszugeben.
Unter Linux stimmte es soweit, wie vermutet, und unter Windows, nachdem ich ne Stunde an nem Fehler saß, der unter Linux nicht auftrat, und wo mir Tak mal wieder aus der Patsche helfen konnte, scheint es auch zu gehen. Die Ausgaben wirkten jedenfalls logisch. Ich habe stets probiert das Fenster in der Horizentalen und Senkrechten zu Halbieren und geschaut, ob das mit den Mauskoordinaten auch UNGEFÄHR passiert, wenn ich sie in die rechts, untere Ecke positioniere. Und dem war stets der Fall, also kann ich deine Erfahrung _nicht_ bestätigen.

LG Ziz

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 30, 2009 17:09 
Offline
DGL Member

Registriert: Sa Nov 24, 2007 11:59
Beiträge: 116
Programmiersprache: FreePascal
Also zumindest unter Linux macht die Maus da kein Problem.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]