Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Hi,
habe zwei Fragen zu SDL:
1. Wenn man die Fenstergrösse ändert "vergisst" das Programm die Texturen. Es wird notwendig diese neuzuladen.
So wird es auch in den Jedi-OpenGL-Demos von Nehe-Tutorials gemacht. Gibt es da eine einfachere Methode?
2. Beim Maximieren des Fenster wird es falsch maximiert. Breite und Höhe stimmen zwar. Das Fenster liegt aber an
sich schon die halber Höhe der Titelleiste zu hoch.
Wie initialisiere ich SDL?
Wie im Tutorial und ebenso wie es in Demos gemacht wird.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Deine beschreibung klingt fast so, als würde man bei Resize einen neuen Rendercontext anlegen, und dadurch sind die Texturen dann weg. Wenn das so sein sollte kannste ja mal mit wglShareLists probieren die alten Texturen wieder verfügbar zu machen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Log.LogError('Surface bei Größenänderung verloren: '+SDL_GetError,'EVENT_RESIZE');
Quit_App;
end;
nDC:=wglGetCurrentContext;
wglShareLists(DC,nDC);
glResizeWindow( event.resize.w, event.resize.h);
end;
So sieht der Code aus. Funktioniert aber nicht, habe mich zwar nicht genauer damit auseinandergesetzt, weil es für mich aktuell nicht so wichtig ist,
aber ich vermute, dass ich so nicht an den Rendercontext drankomme.
Spätestens Sharelist meldet mir den Misserfolg.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn du den Renderkontext nach dem Resizen verwendet, is der noch gültig? Also kannst du irgendwas mit OpenGL darauf ausgeben? Versuch mal direkt nach dem Resize die ClearColor umzustellen und dann den Bildschirm zu rendern. Wenn sich die Änderung bemerkbar macht, ist vielleicht nur das Sichtfenster seltsam verschoben.
Für die Technischen Sachen von OpenGL bin ich eigentlich net so der Guru. Aber eventuell sieht das einer von unseren Kennern und weiß mehr dazu.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Um ehrlich zu sein habe ich deine Frage nicht so ganz verstanden.
Habe jetzt einfach das Resize Event ignoriert, d.h. es auskommentiert.
OpenGL zeichnet denoch, nur halt verschoben wenn ich nicht glResizeWindows (was OpenGL die neuen Werte liefert) ausführe.
Die Texturen sind da. Das Fenster wird jetzt bei dem Wechsel in Vollbild auch richtig vergrössert.
Also irgendwo da muss der Hacken liegen, werde die Tage da noch mal nachschauen
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hab gerade weiter oben deinen Code nochmal angeguckt. Öhm so meinte ich das net. Hohl dir mal den 2. DC nach dem Resizen. Und mach dann mal wglShareLists.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Flash hat geschrieben:
Hab gerade weiter oben deinen Code nochmal angeguckt. Öhm so meinte ich das net. Hohl dir mal den 2. DC nach dem Resizen. Und mach dann mal wglShareLists.
ähm, das mache ich doch schon, bzw. hatte ich am Anfang gemacht gehabt.
Die Funktion glResizeWindow passt nur den Viewport und die Perspective den neuen Verhältnissen an.
Mehr nicht.
Code:
function glResizeWindow( width :integer; height :integer):Boolean;
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also oben in deinem Code führst du glResizeWindow nach dem wglShareLists aus. mach mal ShareLists danach. Eventuell wird innerhalb deines Resize irgendwas mit dem Fenster verbrochen, wodurch der Texturraum verloren geht.
Ich kenn mich mit SDL absoluto nicht aus , es wäre also günstig, wenn mal einer von unseren Pro's sich das mal anguckt.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Das hat leider auch nichts gebracht.
Übrigens bin ich darauf gekommen, dass ich die Surface denoch neuerstellen muss.
Ansonsten bekomme z.B. nur die Mausclicks die auf der "alten" Oberfläche gelandet sind.
Aber deine Meinung, dass der Hauptschuldige, der Täter dies in seinem Tutorial vergessen hat, sich hier mal melden könnte und sagt wie er das bei seinen Programmen löst.
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Das liegt wohl daran, dass ich momentan ne wenig Probleme habe ein aktuelles Beispiel zu kompilieren und daher dein Problem nicht ganz nachvollziehen kann. Gerade was es angeht eine neue Surface zu erzeugen. Das sollte absolut nicht nötig sein. Das Fenster wird vom System verändert und man muss eigentlich nur darauf reagieren und zwar in der Form, dass man die Perspektive wieder entsprechend anpaßt.
Das dabei die Surface verloren geht ist eigentlich dabei eher unwahrscheinlich. Texturen und solche Dinge, sollte dabei eigentlich nicht verloren gehen. Danach die Perspektive ausrichten mit:
Code:
function glResizeWindow( width :integer; height :integer):Boolean;
begin
// Verhindern von \"Division by Zero\"
if( height =0)then height :=1;
// Viewport und Projektions-Matrix aktualisieren
glViewport(0,0, width, height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity;
gluPerspective(45.0, width / height,0.1,100.0);
glMatrixMode( GL_MODELVIEW );
// Rcksetzen der World-Matrix
glLoadIdentity;
// Vorgang erfolgreich
result :=true;
end;
Das hatte IMAO bei mir bisher zweifelsfrei funktioniert ohne das die Texturen verloren gegangen sind. Ich werde nochmal versuchen zu rekonstruieren, was Du machst, aber eigentlich sollte das Template-Beispiel funktionieren.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Also habe es gerade zum laufen bekommen. Kann dein Problem auch während der Laufzeit nicht nachvollziehen. Beim resize des Fenster gehen Texturen nicht verloren und alles funktionert soweit prächtig. Bist Du Dir sicher, dass Du alles so machst wie im Template? Versuch das nochmal mit deinem Programm genau abzugleichen. Ansonsten würde ich eher ein wenig in den Voodoo-Bereich gehen. Längere Zeit geweigert die Treiber der Grafikkarte zu aktualisieren?
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Das ist sehr merkwürdig. Das Template geht bei mir wunderbar. Ich verwende zum laden der Textur SDL_Image, allerdings fällt es mir irgendwie schwer zu glauben, dass dies der entscheidende Unterschied ist, wobei ich Dir natürlich den SDL-Loader ans Herz legen würde, wenn Du ohnehin bereits SDL nutzt. Das könnte dann in etwa so aussehen:
Ansonsten habe ich keine guten Ideen zur Hand, weil ich es noch nie erlebt habe, dass durch das Verändern der Festergröße die Texturen verloren gehen. Du setzt im Template das RESIZE auf true und sobald Du dann die Fenstergröße veränderst verliert er die Texturen? Vielleicht könnte das dann auch nochmal ein anderer Windows-Nutzer machen? Außerdem stelle ich gerade fest, dass ich ältere SDL-Header einsetze. Kann mir kaum vorstellen, dass der Fehler aus der Richtung kommt, aber wer weiß O_o
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Also das mit dem SDL-Texturlader ist gut, dachte bis jetzt, dass es nur mit BMPs geht.
Am Texturlader den ich verwende liegt es leider auch nicht. Habe stattdessen mal Bmps und SDL-Loader genommen und es funktioniert ebenfalls nicht.
Ein weiterer suspekter Punkt für mich ist, dass ich das 10. Nehe-Tutorial das bei den Jedis dabei lag compileren kann ohne das der Fehler auftritt.
Und sie initialisieren und behandeln das Resizes genauso
Jedenfalls habe ich alle Units und das Programm selbst mal zusammengepackt und angehängt.
So könnte ihr dann genauer mal schauen wie es aussieht und müsst nicht rumraten.
[OT]Wie ich gerade sehe macht ihr Werbung für die Delphi-Tage. Ihr seit da dann auch anzutreffen? So dass es sich wirklich lohnen würde da vorbeizukommen?[/OT]
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.