Texture Dirty Regions (Direct3D 9)
Anwendungen können optimieren, welche Teilmenge einer Textur kopiert wird, indem sie "dirty"-Bereiche auf Texturen angeben. Nur die als geändert markierten Regionen werden durch einen Aufruf von IDirect3DDevice9::UpdateTexture kopiert. Die dirty-Bereiche können jedoch erweitert werden, um die Ausrichtung zu optimieren. Wenn eine Textur erstellt wird, wird die gesamte Textur als "dirty" betrachtet. Nur die folgenden Vorgänge wirken sich auf den zustandsbearbeitenden Zustand einer Textur aus:
- Hinzufügen eines dirty-Bereich zu einer Textur.
- Sperren eines Puffers in der Textur. Bei diesem Vorgang wird der gesperrte Bereich als dirty-Bereich addiert. Die Anwendung kann dieses automatische Update für geänderte Regionen deaktivieren, wenn sie über bessere Kenntnisse der tatsächlichen geänderten Regionen verfügt.
- Wenn Sie eine Oberflächenebene der Textur als Ziel in IDirect3DDevice9::UpdateSurface verwenden, wird die gesamte Textur als geändert markiert.
- Wenn Sie die Textur als Quelle in IDirect3DDevice9::UpdateTexture verwenden, werden alle geänderten Bereiche der Quelltextur entle.
- Verwenden von IDirect3DSurface9::GetDC zum Zurückgeben eines Gerätekontexts.
- Durch Aufrufen von IDirect3DBaseTexture9::GenerateMipSubLevels wird die gesamte Textur als "dirty" markiert.
- Durch Aufrufen von IDirect3DBaseTexture9::SetAutoGenFilterType wird die gesamte Textur als "dirty" markiert.
Geänderte Bereiche werden auf der obersten Ebene einer Mipmappentextur festgelegt, und IDirect3DDevice9::UpdateTexture kann den geänderten Bereich in der MIP-Kette erweitern, um die Anzahl der für jede Unterebene kopierten Bytes zu minimieren. Beachten Sie, dass die Koordinaten der unteren Ebene für den zierlichen Bereich nach außen gerundet werden, d. b. ihre Bruchteile auf den nächsten Rand der Textur gerundet werden.
Da jeder Texturtyp unterschiedliche Arten von dirty-Bereichen hat, gibt es Methoden für jeden Texturtyp. 2D-Texturen verwenden dirty rectangle, und Volumetexturen verwenden Felder.
- IDirect3DCubeTexture9::AddDirtyRect
- IDirect3DTexture9::AddDirtyRect
- IDirect3DVolumeTexture9::AddDirtyBox
Durch Übergeben von NULL für die Parameter pDirtyRect oder pDirtyBox für die oben genannten Methoden wird der dirty-Bereich erweitert, um die gesamte Textur zu abdecken.
Jede Sperrmethode kann D3DLOCK NO DIRTY UPDATE verwenden, wodurch Änderungen am geänderten 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 Sperrvorganges geändert werden, sollten Anwendungen D3DLOCK _ NO _ DIRTY UPDATE _ verwenden. Beachten Sie, dass eine Sperre oder eine Kopie auf eine Texturunterebene (d. h. ohne Sperren oder Kopieren auf die oberste Ebene) die geänderten Bereiche für diese Textur nicht aktualisiert. Anwendungen übernehmen die gleiche Verantwortung für die Aktualisierung geänderter Bereiche, wenn sie niedrigere Ebenen sperren, ohne die oberste Ebene zu sperren.