Partilhar via


Bloqueando recursos (Direct3D 9)

Bloquear um recurso significa conceder à CPU acesso ao seu armazenamento. As seguintes opções de bloqueio são definidas para recursos:

  • D3DLOCK_DISCARD
  • D3DLOCK_READONLY
  • D3DLOCK_NOOVERWRITE
  • D3DLOCK_NOSYSLOCK
  • D3DLOCK_NO_DIRTY_UPDATE

Para obter detalhes sobre sinalizadores de bloqueio e como eles se relacionam com recursos específicos, consulte as páginas de referência sobre os métodos de bloqueio de recursos individuais. Os desenvolvedores de aplicativos devem observar que os sinalizadores D3DLOCK_DISCARD, D3DLOCK_READONLY e D3DLOCK_NOOVERWRITE são apenas dicas. O tempo de execução não verifica se os aplicativos estão seguindo a funcionalidade especificada por esses sinalizadores. Um aplicativo que especifica D3DLOCK_READONLY mas depois grava no recurso deve esperar resultados indefinidos. Em geral, trabalhar contra sinalizadores de bloqueio, incluindo os sinalizadores de uso de bloqueio, não é garantido que funcione em versões posteriores e pode ocorrer uma penalização de desempenho significativa.

Uma operação de bloqueio é seguida por uma operação de desbloqueio. Por exemplo, depois de bloquear uma textura, o aplicativo posteriormente abre mão do acesso direto às texturas bloqueadas, desbloqueando-as. Além de conceder acesso ao processador, quaisquer outras operações que envolvam esse recurso são serializadas durante um bloqueio. Só é permitido um único bloqueio para um recurso, mesmo para regiões não sobrepostas, e nenhuma operação de aceleração numa superfície pode decorrer enquanto o bloqueio estiver em curso nessa superfície.

Cada interface de recurso tem métodos para bloquear os buffers contidos. Cada recurso de textura também pode bloquear uma subparte desse recurso. Recursos de 2D (superfícies) permitem o bloqueio de sub-retângulos, enquanto recursos de volume permitem o bloqueio de sub-volumes ou caixas. Cada método de bloqueio retorna uma estrutura que contém um ponteiro para o armazenamento que suporta o recurso e valores que representam as distâncias entre linhas ou planos de dados, dependendo do tipo de recurso. Para obter detalhes, consulte as listas de métodos para as interfaces de recursos. O ponteiro retornado sempre aponta para o byte superior esquerdo nas sub-regiões bloqueadas.

Ao trabalhar com buffers de índice e vértice, pode-se fazer múltiplas chamadas de bloqueio; no entanto, é necessário garantir que o número de chamadas de bloqueio corresponda ao número de chamadas de desbloqueio.

O DXTn armazena pixels em blocos 4x4 codificados e só pode ser bloqueado em limites 4x4.

Recursos Direct3D