Regiones de texturas sucias (Direct3D 9)
Las aplicaciones pueden optimizar qué subconjunto de una textura se copia especificando regiones "sucias" 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 sucia. Solo las siguientes operaciones afectan al estado sucio de una textura:
- Agregar una región desfasada a una textura.
- Bloquear algunos búferes 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 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 sucia.
- El uso de la textura como origen en IDirect3DDevice9::UpdateTexture borra todas las regiones desfasadas de la textura de origen.
- Usar IDirect3DSurface9::GetDC para devolver un contexto de dispositivo.
- Llamar a IDirect3DBaseTexture9::GenerateMipSubLevels marca toda la textura como sucia.
- Llamar a IDirect3DBaseTexture9::SetAutoGenFilterType marca toda la textura como sucia.
Las regiones sucias se establecen en el nivel superior de una textura mipmapped y IDirect3DDevice9::UpdateTexture puede expandir la región sucia hacia abajo de la cadena mip para minimizar el número de bytes copiados para cada subnivel. Tenga en cuenta que las coordenadas de la región sucia de subnivel se redondean hacia fuera, es decir, sus partes fraccionales se redondean hacia el borde más cercano de la textura.
Dado que cada tipo de textura tiene diferentes tipos de regiones sucias, 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 impide 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 en un subvel de textura solo (es decir, sin bloquear ni copiar en el nivel superior) no actualiza las regiones desfasadas de esa textura. Las aplicaciones asumen la misma responsabilidad de actualizar las regiones desfasadas cuando bloquean niveles inferiores sin bloquear el nivel superior.
Temas relacionados