Regiões sujas de textura (Direct3D 9)
Os aplicativos podem otimizar qual subconjunto de uma textura é copiado especificando regiões "sujo" em texturas. Somente as regiões marcadas como sujo são copiadas por uma chamada para IDirect3DDevice9::UpdateTexture. No entanto, as regiões sujo podem ser expandidas para otimizar o alinhamento. Quando uma textura é criada, toda a textura é considerada sujo. Somente as seguintes operações afetam o estado sujo de uma textura:
- Adicionar uma região sujo a uma textura.
- Bloqueando algum buffer na textura. Essa operação adiciona a região bloqueada como uma região sujo. O aplicativo poderá desativar essa atualização automática sujo região se tiver melhor conhecimento das regiões de sujo reais.
- Usar um nível de superfície da textura como destino em IDirect3DDevice9::UpdateSurface marca toda a textura como sujo.
- Usar a textura como fonte em IDirect3DDevice9::UpdateTexture limpa todas as regiões sujo na textura de origem.
- Usando IDirect3DSurface9::GetDC para retornar um contexto de dispositivo.
- Chamar IDirect3DBaseTexture9::GenerateMipSubLevels marca toda a textura como sujo.
- Chamar IDirect3DBaseTexture9::SetAutoGenFilterType marca toda a textura como sujo.
As regiões sujas são definidas no nível superior de uma textura mipmapped e IDirect3DDevice9::UpdateTexture pode expandir a região sujo para baixo da cadeia de mip, a fim de minimizar o número de bytes copiados para cada subnível. Observe que as coordenadas de subnível sujo região 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 tipos diferentes de sujo regiões, há métodos em cada tipo de textura. As texturas 2D usam sujo retângulo e as 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 sujo para cobrir toda a textura.
Cada método de bloqueio pode usar D3DLOCK_NO_DIRTY_UPDATE, o que impede alterações 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 alteradas durante uma operação de bloqueio estiverem disponíveis, os aplicativos deverão 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 sujo para essa textura. Os aplicativos assumem a mesma responsabilidade pela atualização sujo regiões quando bloqueiam níveis mais baixos sem bloquear o nível mais alto.
Tópicos relacionados