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
|
Verfasst am: 03.02.2009, 17:47 Titel: Fensteranwendungen und Surfaces |
|
|
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 03.02.2009, 19:10 Titel: |
|
|
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 |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 03.02.2009, 21:20 Titel: |
|
|
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 |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 04.02.2009, 21:13 Titel: |
|
|
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 |
|
 |
Dr. Best Senior JLI'ler

Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 04.02.2009, 21:57 Titel: |
|
|
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 |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 05.02.2009, 21:20 Titel: |
|
|
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 ) _________________ 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 |
|
 |
Dr. Best Senior JLI'ler

Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 05.02.2009, 21:44 Titel: |
|
|
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 ) |
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 |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 06.02.2009, 13:37 Titel: |
|
|
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 ) |
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 |
|
 |
|