JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=df7f6adae6a200a99ac381b978e97fbbMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Fensteranwendungen und Surfaces

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 03.02.2009, 16:47    Titel: Fensteranwendungen und Surfaces Antworten mit Zitat

Hi
wollte ein Surface als Hintergrund in eine Direct3D9 Fensteranwendung(NOFULLSCREEN) kopieren.
Die Größe+Auflösung meines Fensters ist 1024 zu 768.
Wenn ich jetzt jedoch ein Surface mit dieser Größe via StretchRect() reinkopieren will kommt nichts. Scalier ich das Surface auf 1016 geht es.(mit rand halt)..
wenn ich jedoch Direct3D im Fullscreen modus laufen lass wird des Surface tadellos kopiert.
Weiß jmd von euch woran das liegen könnte und wie ich denoch im Fenster des Surface richtig anzeigen kann.

vielen dank
f. hawk
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 03.02.2009, 18:10    Titel: Antworten mit Zitat

Vielleicht weil dein Fenster im Fenstermodus zu klein ist, weil halt der Fensterrahmen noch abgezogen werden muss, bzw. wird.
Du könntest mal die tatsächliche Fenstergröße ohne Rahmen abfragen.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 03.02.2009, 20:20    Titel: Antworten mit Zitat

mmmhh
hab ich grad ausprobiert sowohl die fensterbreite als auch die direct3d auflösung erhöht hat nichts gebracht.
aber des mit dem rand dürfte eigtl nichts ausmachen da die direct3d auflösung und damit alles was mit direct3d zusammenhängt unabhängig von der Fenstergröße ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 04.02.2009, 20:13    Titel: Antworten mit Zitat

ich hab eine Möglichkeit gefunden wie man es nicht auftritt ist zwar keine wirklich Lösung aber wenn man im Fensterstil nicht WM_OVERLAPPEDWINDOW oder WM_POPUPWINDOW angibt sondern nur WM_POPUP tritt das Phänomen nicht auf...
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 33
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 04.02.2009, 20:57    Titel: Antworten mit Zitat

Ich weiß ja nicht, wie du dein D3D Device erstellst, aber im Fenstermodus setzt man für gewöhnlich D3DPRESENT_PARAMETERS::BackBufferWidth und D3DPRESENT_PARAMETERS::BackBufferHeight auf 0. Dann nimmt D3D für diese Werte die Größe des Client Areas des Fensters (und das ist nicht die Größe des Fensters). Gibt man explizit eine Größe an wird der Backbuffer zwar in dieser erstellt, wird dann aber skaliert um in das Fenster zu passen und das will man für gewöhnlich nicht.

Dein Backbuffer hat also wahrscheinlich die Größe des Client Areas und entsprechend muss auch ein Surface, dass du rüberkopieren willst diese Größe haben. Du kannst sie mit GetClientRect(...) abfragen.

Für einen Hintergrund mit Surfaces und StretchRect() zu arbeiten ist aber sowieso eine ganz schlechte Idee. Grafikkarten sind heutzutage nicht drauf optimiert Surfaces zu kopieren sondern Shader auszuführen. Wenn du einfach ein bildschirmfüllendes, texturiertes Quad renderst kommst du meistens mit deutlich besserer Performance davon als mit Surfaces. Und es ist sehr viel flexibler (kannst Effekte drauf anwenden oder statt 2D Hintergrund eine Sky Sphere oder eine Sky Box verwenden). Du kannst sogar den Hintergrund erst nach allen anderen nicht transparenten Objekten rendern (Front to Back order). Dann fallen durch den Z-Buffer massig Pixel weg (oft alle) und du hast ordentlich gespart.
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 05.02.2009, 20:20    Titel: Antworten mit Zitat

mmhhhh.... es liegt aber nicht an dem ClientRect()... weil des müsste sich verändern wen des fenster größer wird....

zu punkt 2: mmmhhh wenn du keine objekte davor hast ist es gleichschnell.... aber es sind nicht alle computer mit high-tech grafikkarten ausgelegt und bei ältern sprich(mehr als 5 jahre) sind surface deutlich schneller......... sprich: ich kann mit surfaces im menü resourcen bei älteren computern sparen...(die hams am öftesten nötig Very Happy )
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 33
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 05.02.2009, 20:44    Titel: Antworten mit Zitat

fast hawk hat Folgendes geschrieben:
mmhhhh.... es liegt aber nicht an dem ClientRect()... weil des müsste sich verändern wen des fenster größer wird....

Trotzdem lieber mal doppelt checken. Ansonsten mach einfach mal ne Debugsession mit Microsoft PIX. Damit dürfte die Ursache schnell zu finden sein.

fast hawk hat Folgendes geschrieben:
zu punkt 2: mmmhhh wenn du keine objekte davor hast ist es gleichschnell.... aber es sind nicht alle computer mit high-tech grafikkarten ausgelegt und bei ältern sprich(mehr als 5 jahre) sind surface deutlich schneller......... sprich: ich kann mit surfaces im menü resourcen bei älteren computern sparen...(die hams am öftesten nötig Very Happy )

Hast du konkrete Benchmarks oder eine zuverlässige Quelle, die das bestätigen? Ich erinnere mich nur, dass ich vor vielen Jahren mal Hintergründe mit Surfaces gemacht habe und als ich das dann abgeschafft habe hat das eine ganz enorme Performancesteigerung gebracht.
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 06.02.2009, 12:37    Titel: Antworten mit Zitat

Dr. Best hat Folgendes geschrieben:

Trotzdem lieber mal doppelt checken. Ansonsten mach einfach mal ne Debugsession mit Microsoft PIX. Damit dürfte die Ursache schnell zu finden sein.

danke werd ich mich mal danach erkundigen...
Zitat:

fast hawk hat Folgendes geschrieben:
zu punkt 2: mmmhhh wenn du keine objekte davor hast ist es gleichschnell.... aber es sind nicht alle computer mit high-tech grafikkarten ausgelegt und bei ältern sprich(mehr als 5 jahre) sind surface deutlich schneller......... sprich: ich kann mit surfaces im menü resourcen bei älteren computern sparen...(die hams am öftesten nötig Very Happy )

Hast du konkrete Benchmarks oder eine zuverlässige Quelle, die das bestätigen? Ich erinnere mich nur, dass ich vor vielen Jahren mal Hintergründe mit Surfaces gemacht habe und als ich das dann abgeschafft habe hat das eine ganz enorme Performancesteigerung gebracht.

[/quote]
benchmark keine aber ich bezieh mich hierbei auf meine erfahrung die ich noch mit dem alten aldi pc von 1999 gemacht hab....
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum