C++ | IDirect3DDevice9::StretchRect | Bildfehler
Verfasst: 17.04.2017, 02:21
Hallo.
Wenn ich per StretchRect ein Surface auf den BackBuffer "kopiere", bekomme ich eine vertikale und horizontale "Bildstörung".
Die Störung schneidet quasi mittig einmal von Rechts nach Links und einmal von Oben nach Unten.
Sobald die Höhe und Breite vom SourceSurface gleich oder exakt ein Vielfaches von Höhe und Breite vom Backbuffer ist, benutze ich bei StrechRect das Flag D3DTEXF_POINT.
In diesem Beispiel ist die Quelle/RenderTarget 640x360 groß, und das Ziel/Backbuffer 1280x720 groß, also ist der Backbuffer exakt doppelt so breit und doppelt so hoch.
Beim Present werden für das Source -und DestRect die gleichen Werte genommen (0, 0, 1280, 720).
Wenn ich beim StretchRect beim Source -und beim DestRect Null übergebe, bleiben die Störungen bestehen.
Um das ganze genau zu prüfen und Fehler an anderen Stellen auszuschließen, speicher ich das SourceSurface direkt vor dem StretchRect in eine Datei.
Direct nach dem StretchRect speicher ich den Backbuffer auch in eine Datei.
Die Datei vom SourceSurface habe ich zu Vergleichszwecken auf die Größe vom Backbuffer hochskaliert.
Beide Bilder finden sich im Dateianhang.
Wenn man sich die Bilder anguckt, bekommt man den Eindruck, als wäre das DestRect um ein Pixel zu groß (X und Y),
was aber definitiv nicht der Fall ist, zumindest nicht laut den Parametern, mit der die Funktion StretchRect aufgerufen wird.
Jemand eine Idee was da los ist und wie ich das korrigieren kann?
Wenn ich per StretchRect ein Surface auf den BackBuffer "kopiere", bekomme ich eine vertikale und horizontale "Bildstörung".
Die Störung schneidet quasi mittig einmal von Rechts nach Links und einmal von Oben nach Unten.
Sobald die Höhe und Breite vom SourceSurface gleich oder exakt ein Vielfaches von Höhe und Breite vom Backbuffer ist, benutze ich bei StrechRect das Flag D3DTEXF_POINT.
In diesem Beispiel ist die Quelle/RenderTarget 640x360 groß, und das Ziel/Backbuffer 1280x720 groß, also ist der Backbuffer exakt doppelt so breit und doppelt so hoch.
Beim Present werden für das Source -und DestRect die gleichen Werte genommen (0, 0, 1280, 720).
Wenn ich beim StretchRect beim Source -und beim DestRect Null übergebe, bleiben die Störungen bestehen.
Um das ganze genau zu prüfen und Fehler an anderen Stellen auszuschließen, speicher ich das SourceSurface direkt vor dem StretchRect in eine Datei.
Direct nach dem StretchRect speicher ich den Backbuffer auch in eine Datei.
Die Datei vom SourceSurface habe ich zu Vergleichszwecken auf die Größe vom Backbuffer hochskaliert.
Beide Bilder finden sich im Dateianhang.
Wenn man sich die Bilder anguckt, bekommt man den Eindruck, als wäre das DestRect um ein Pixel zu groß (X und Y),
was aber definitiv nicht der Fall ist, zumindest nicht laut den Parametern, mit der die Funktion StretchRect aufgerufen wird.
Jemand eine Idee was da los ist und wie ich das korrigieren kann?