Regiões sujas de textura (Direct3D 9)
Os aplicativos podem otimizar qual subconjunto de uma textura é copiado especificando regiões "sujas" em texturas. Somente as regiões marcadas como sujas são copiadas por uma chamada para IDirect3DDevice9::UpdateTexture. No entanto, as regiões sujas podem ser expandidas para otimizar o alinhamento. Quando uma textura é criada, toda a textura é considerada suja. Somente as seguintes operações afetam o estado sujo de uma textura:
- Adicionando uma região suja a uma textura.
- Bloqueando algum buffer na textura. Essa operação adiciona a região bloqueada como uma região suja. O aplicativo poderá desativar essa atualização automática de região suja se tiver melhor conhecimento das regiões sujas reais.
- Usar um nível de superfície da textura como destino em IDirect3DDevice9::UpdateSurface marca toda a textura como suja.
- Usar a textura como fonte em IDirect3DDevice9::UpdateTexture limpa todas as regiões sujas na textura de origem.
- Usando IDirect3DSurface9::GetDC para retornar um contexto de dispositivo.
- Chamar IDirect3DBaseTexture9::GenerateMipSubLevels marca toda a textura como suja.
- Chamar IDirect3DBaseTexture9::SetAutoGenFilterType marca toda a textura como suja.
As regiões sujas são definidas no nível superior de uma textura mipmapped e IDirect3DDevice9::UpdateTexture pode expandir a região suja pela cadeia de mip para minimizar o número de bytes copiados para cada subnível. Observe que as coordenadas de região suja do subnível são arredondadas para fora, ou seja, suas partes fracionárias são arredondadas em direção à borda mais próxima da textura.
Como cada tipo de textura tem diferentes tipos de regiões sujas, há métodos em cada tipo de textura. Texturas 2D usam retângulo sujo e texturas de volume usam caixas.
- IDirect3DCubeTexture9::AddDirtyRect
- IDirect3DTexture9::AddDirtyRect
- IDirect3DVolumeTexture9::AddDirtyBox
Passar NULL para os parâmetros pDirtyRect ou pDirtyBox para os métodos acima expande a região suja para cobrir toda a textura.
Cada método de bloqueio pode levar D3DLOCK_NO_DIRTY_UPDATE, o que impede qualquer alteração no estado sujo da textura. Para obter mais informações, consulte recursos de bloqueio (Direct3D 9).
Quando mais informações sobre o conjunto verdadeiro de regiões que são alteradas durante uma operação de bloqueio estiverem disponíveis, os aplicativos devem usar D3DLOCK_NO_DIRTY_UPDATE. Observe que um bloqueio ou uma cópia somente para um subnível de textura (ou seja, sem bloquear ou copiar para o nível superior) não atualiza as regiões sujas para essa textura. Os aplicativos assumem a mesma responsabilidade de atualizar regiões sujas quando bloqueiam níveis inferiores sem bloquear o nível superior.
Tópicos relacionados