D3DHAL_DP2TEXBLT estrutura (d3dhal.h)

A estrutura D3DHAL_DP2TEXBLT é usada para blts de textura quando D3dDrawPrimitives2 responde ao token de comando D3DDP2OP_TEXBLT.

Sintaxe

typedef struct _D3DHAL_DP2TEXBLT {
  DWORD dwDDDestSurface;
  DWORD dwDDSrcSurface;
  POINT pDest;
  RECTL rSrc;
  DWORD dwFlags;
} D3DHAL_DP2TEXBLT;

Membros

dwDDDestSurface

Especifica o identificador para a textura de destino.

dwDDSrcSurface

Especifica o identificador para a textura de origem.

pDest

Especifica o ponto de destino em que o blt deve ser executado, ou seja, o ponto na superfície de destino (dwDDDestSurface) para iniciar o blt. Esses membros x e y da estrutura POINT são especificados em coordenadas de tela.

rSrc

Especifica o retângulo a ser iluminado na textura de origem, ou seja, o retângulo de origem na superfície de origem (dwDDSrcSurface) para blt de.

dwFlags

Reservado para uso do sistema.

Comentários

O retorno de chamada D3dCreateSurfaceEx cria os identificadores inteiros pequenos para as texturas que podem ser usadas como texturas de origem e de destino para blts de textura.

A estrutura D3DHAL_DP2TEXBLT é usada com um token de fluxo de comando D3DDP2OP_TEXBLT para informar os drivers a executar uma operação blt de uma textura de origem para uma textura de destino. Uma textura também pode ser um mapa de ambiente cúbico. O driver deve copiar um retângulo especificado pelo rSrc na textura de origem para o local especificado pelo pDest na textura de destino. As texturas de destino e de origem são identificadas por identificadores com os quais o driver foi notificado durante o tempo de criação da textura. Se o driver for capaz de gerenciar texturas, é possível que o identificador de destino seja 0. Isso indica ao driver que ele deve pré-carregar a textura na memória de vídeo (ou de onde quer que o hardware tenha texturas eficientes). Nesse caso, o driver pode ignorar rSrc e pDest.

Observe que, para texturas mapeadas por MIP, apenas uma D3DDP2OP_TEXBLT instrução é inserida no fluxo de comando D3dDrawPrimitives2 . Nesse caso, espera-se que o driver remova todos os níveis de mapa MIP presentes na textura. As regiões a serem copiadas em subnível de mapa MIP podem ser obtidas dividindo rSrc epDest por 2 em cada nível.

É possível que as texturas de origem e destino possam conter números diferentes de níveis de mapa MIP. Nesse caso, espera-se que o driver remova os níveis comuns. Por exemplo, se uma textura de origem 256x256 tiver 8 níveis de mapa MIP e se o destino for uma textura 64x64 com 6 níveis, o driver deverá filtrar os 6 níveis correspondentes da origem. O driver pode esperar que as dimensões do nível de MIP superior da textura de destino sejam sempre menores ou iguais às dimensões do nível de MIP superior da textura de origem.

Observe que as alças de origem e destino sempre se referem às superfícies de nível superior e nunca a nenhum subnível de mapa MIP. Devido a um erro no aplicativo, é possível que a textura de destino contenha níveis extras de mapa MIP. Por exemplo, uma textura de origem 256x256 pode conter cinco níveis, mas a textura de destino 256x256 pode conter oito. Espera-se que o driver lide com segurança com esse caso, mas não se espera que produza resultados corretos. Devido a problemas de compatibilidade do aplicativo herdado, o Direct3D não impede que esses pares de textura de origem/destino sejam passados para o driver.

O driver pode esperar que os formatos de pixel das texturas de origem e destino sejam idênticos e, em geral, o blt especificado é seguro para executar. Além do único caso mencionado acima, o driver não deve esperar ser apresentado com qualquer situação que impossibilite a execução de um blt.

Se o driver quiser executar blts assíncronos da memória do sistema para a memória de vídeo, ele deverá implementar a chamada HAL DirectDraw GetSysmemBltStatus, caso contrário, podem surgir inconsistências.

Com o TexBlt, não é necessário que o driver execute qualquer sincronização porque TexBlts são sempre emitidos na ordem adequada, juntamente com comandos de renderização. Antes disso, era necessário que o driver manipulasse corretamente o caso quando um blt DirectDraw modificou qualquer textura referenciada por comandos de renderização em qualquer contexto Direct3D. Quando vários contextos estão presentes, o Direct3D não emite TexBlts. Isso significa que o gravador de driver pode omitir o código de sincronização no caminho do código TexBlt (mas ainda precisa ser sincronizado para blts).

Amostra

O pseudocódigo a seguir mostra como um subrectangle deve ser calculado para níveis de MIP consecutivos, para ir para o nível de MIP i + 1 do nível de MIP i:

rect.left >>= 1; 
rect.top >>= 1; 
DWORD right = (rect.right + 1) >> 1; 
DWORD bottom = (rect.bottom + 1) >> 1; 
rect.right = ((right - rect.left) < 1) ? 
    (rect.left + 1) : (right); 
rect.bottom = ((bottom - rect.top ) < 1) ? 
    (rect.top + 1) : (bottom);

Requisitos

   
Cabeçalho d3dhal.h (include D3dhal.h)

Confira também

D3DDP2OP_TEXBLT

D3dCreateSurfaceEx

D3dDrawPrimitives2