Regiones sucias de textura (Direct3D 9)
Las aplicaciones pueden optimizar qué subconjunto de una textura se copia especificando regiones "desfasadas" en texturas. Solo las regiones marcadas como desfasadas se copian mediante una llamada a IDirect3DDevice9::UpdateTexture. Sin embargo, las regiones desfasadas se pueden expandir para optimizar la alineación. Cuando se crea una textura, toda la textura se considera desfasada. Solo las siguientes operaciones afectan al estado sucio de una textura:
- Agregar una región desfasada a una textura.
- Bloquear algún búfer en la textura. Esta operación agrega la región bloqueada como una región desfasada. La aplicación puede desactivar esta actualización automática de la región desfasada si tiene un mejor conocimiento de las regiones desfasadas reales.
- El uso de un nivel de superficie de la textura como destino en IDirect3DDevice9::UpdateSurface marca toda la textura como desfasada.
- El uso de la textura como origen en IDirect3DDevice9::UpdateTexture borra todas las regiones desfasadas en la textura de origen.
- Usar IDirect3DSurface9::GetDC para devolver un contexto de dispositivo.
- Al llamar a IDirect3DBaseTexture9::GenerateMipSubLevels , se marca toda la textura como desfasada.
- La llamada a IDirect3DBaseTexture9::SetAutoGenFilterType marca toda la textura como sucia.
Las regiones desfasadas se establecen en el nivel superior de una textura mipmapped y IDirect3DDevice9::UpdateTexture puede expandir la región desfasada por la cadena mip para minimizar el número de bytes copiados para cada subnivel. Tenga en cuenta que las coordenadas de la región subastadas se redondean hacia afuera, es decir, sus partes fraccionarios se redondean hacia el borde más cercano de la textura.
Dado que cada tipo de textura tiene diferentes tipos de regiones desfasadas, hay métodos en cada tipo de textura. Las texturas 2D usan rectángulo sucio y las texturas de volumen usan cuadros.
- IDirect3DCubeTexture9::AddDirtyRect
- IDirect3DTexture9::AddDirtyRect
- IDirect3DVolumeTexture9::AddDirtyBox
Pasar NULL para los parámetros pDirtyRect o pDirtyBox de los métodos anteriores expande la región desfasada para cubrir toda la textura.
Cada método de bloqueo puede tomar D3DLOCK_NO_DIRTY_UPDATE, lo que evita cualquier cambio en el estado sucio de la textura. Para obtener más información, vea Bloquear recursos (Direct3D 9).
Cuando hay más información sobre el conjunto verdadero de regiones que se cambian durante una operación de bloqueo, las aplicaciones deben usar D3DLOCK_NO_DIRTY_UPDATE. Tenga en cuenta que un bloqueo o una copia solo en un subvel de textura (es decir, sin bloquear o copiar en el nivel superior) no actualiza las regiones desfasadas para esa textura. Las aplicaciones asumen la misma responsabilidad de actualizar regiones desfasadas cuando bloquean niveles inferiores sin bloquear el nivel superior.
Temas relacionados