estrutura D3DHAL_DP2TEXBLT (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 cortado na textura de origem, ou seja, o retângulo de origem na superfície de origem (dwDDSrcSurface) do qual blt.

dwFlags

Reservado para uso do sistema.

Comentários

O retorno de chamada D3dCreateSurfaceEx cria as pequenas alças de inteiro para as texturas que podem ser usadas como texturas de origem e destino para blts de textura.

A estrutura D3DHAL_DP2TEXBLT é usada com um token de fluxo de comando D3DDP2OP_TEXBLT para informar os drivers para 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 por rSrc na textura de origem para o local especificado por 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 na MIP, apenas uma D3DDP2OP_TEXBLT instrução é inserida no fluxo de comandos D3dDrawPrimitives2 . Nesse caso, espera-se que o driver blt todos os níveis de mapa MIP presentes na textura. As regiões a serem copiadas em subnível de mapa da 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 de MIP. Nesse caso, espera-se que o driver remova os níveis comuns. Por exemplo, se uma textura de origem de 256 x 256 tiver 8 níveis de mapa MIP e se o destino for uma textura de 64 x 64 níveis, o driver deverá obter os 6 níveis correspondentes da origem. O driver pode esperar que as dimensões do nível superior da MIP da textura de destino sejam sempre menores ou iguais às dimensões do nível superior da MIP da textura de origem.

Observe que os identificadores de origem e destino sempre se referem às superfícies de nível superior e nunca a nenhum subnível de mapa da 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 nesse caso, mas não se espera que ele produza resultados corretos. Devido a problemas de compatibilidade de aplicativos herdados, 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 de executar. Além do único caso mencionado acima, o driver não deve esperar ser apresentado a qualquer situação que impossibilitar 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 do DirectDraw GetSysmemBltStatus; caso contrário, poderão surgir inconsistências.

Com o TexBlt, não é necessário que o driver execute qualquer sincronização porque os TexBlts são sempre emitidos na ordem adequada, juntamente com os comandos de renderização. Antes disso, era necessário que o driver manipulasse corretamente o caso quando um blt DirectDraw modificava 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

Requisito Valor
Cabeçalho d3dhal.h (inclua D3dhal.h)

Confira também

D3DDP2OP_TEXBLT

D3dCreateSurfaceEx

D3dDrawPrimitives2