Texture Dirty Regions (Direct3D 9)
Anwendungen können optimieren, welche Teilmenge einer Textur kopiert wird, indem sie "modifiziert" Regionen für Texturen angeben. Nur die als modifiziert markierten Regionen werden durch einen Aufruf von IDirect3DDevice9::UpdateTexture kopiert. Die modifiziert Regionen können jedoch erweitert werden, um die Ausrichtung zu optimieren. Wenn eine Textur erstellt wird, wird die gesamte Textur als modifiziert betrachtet. Nur die folgenden Vorgänge wirken sich auf den modifiziert Zustand einer Textur aus:
- Hinzufügen einer modifiziert Region zu einer Textur.
- Sperren eines Puffers in der Textur. Dieser Vorgang fügt die gesperrte Region als modifiziert Region hinzu. Die Anwendung kann dieses automatische modifiziert Regionsupdate deaktivieren, wenn sie über bessere Kenntnisse der tatsächlichen modifiziert Regionen verfügt.
- Die Verwendung einer Oberflächenebene der Textur als Ziel in IDirect3DDevice9::UpdateSurface markiert die gesamte Textur als modifiziert.
- Die Verwendung der Textur als Quelle in IDirect3DDevice9::UpdateTexture löscht alle modifiziert Regionen in der Quelltextur.
- Verwenden von IDirect3DSurface9::GetDC zum Zurückgeben eines Gerätekontexts.
- Beim Aufrufen von IDirect3DBaseTexture9::GenerateMipSubLevels wird die gesamte Textur als modifiziert markiert.
- Beim Aufrufen von IDirect3DBaseTexture9::SetAutoGenFilterType wird die gesamte Textur als modifiziert markiert.
Schmutzige Regionen werden auf der obersten Ebene einer mipmapped-Textur festgelegt, und IDirect3DDevice9::UpdateTexture kann die modifiziert Region in der MIP-Kette erweitern, um die Anzahl der für jede Unterebene kopierten Bytes zu minimieren. Beachten Sie, dass die Unterebene modifiziert Regionenkoordinaten nach außen gerundet sind, d. h. ihre Bruchteile zum nächsten Rand der Textur gerundet werden.
Da jeder Texturtyp unterschiedliche Typen von modifiziert Regionen aufweist, gibt es Methoden für jeden Texturtyp. 2D-Texturen verwenden modifiziert Rechteck, und Volumentexturen verwenden Felder.
- IDirect3DCubeTexture9::AddDirtyRect
- IDirect3DTexture9::AddDirtyRect
- IDirect3DVolumeTexture9::AddDirtyBox
Durch Das Übergeben von NULL für die Parameter pDirtyRect oder pDirtyBox für die oben genannten Methoden wird der modifiziert Bereich erweitert, um die gesamte Textur abzudecken.
Jede Sperrmethode kann D3DLOCK_NO_DIRTY_UPDATE nehmen, wodurch Änderungen am modifiziert Zustand der Textur verhindert werden. Weitere Informationen finden Sie unter Sperren von Ressourcen (Direct3D 9).
Wenn weitere Informationen zu den tatsächlichen Regionen verfügbar sind, die während eines Sperrvorgangs geändert werden, sollten Anwendungen D3DLOCK_NO_DIRTY_UPDATE verwenden. Beachten Sie, dass nur eine Sperre oder eine Kopie auf eine Texturunterebene (d. h. ohne Sperren oder Kopieren auf die oberste Ebene) die modifiziert Regionen für diese Textur nicht aktualisiert. Anwendungen übernehmen die gleiche Verantwortung für das Aktualisieren modifiziert Regionen, wenn sie niedrigere Ebenen sperren, ohne die oberste Ebene zu sperren.
Zugehörige Themen