estrutura D3DHAL_DRAWPRIMITIVES2DATA (d3dhal.h)

A estrutura D3DHAL_DRAWPRIMITIVES2DATA contém as informações exigidas pela função D3dDrawPrimitives2 para renderizar primitivos.

Sintaxe

typedef struct _D3DHAL_DRAWPRIMITIVES2DATA {
  ULONG_PTR                 dwhContext;
  DWORD                     dwFlags;
  DWORD                     dwVertexType;
  LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands;
  DWORD                     dwCommandOffset;
  DWORD                     dwCommandLength;
  union {
    LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex;
    LPVOID                    lpVertices;
  };
  DWORD                     dwVertexOffset;
  DWORD                     dwVertexLength;
  DWORD                     dwReqVertexBufSize;
  DWORD                     dwReqCommandBufSize;
  LPDWORD                   lpdwRStates;
  union {
    DWORD   dwVertexSize;
    HRESULT ddrval;
  };
  DWORD                     dwErrorOffset;
} D3DHAL_DRAWPRIMITIVES2DATA;

Membros

dwhContext

Especifica o identificador de contexto do dispositivo Direct3D.

dwFlags

Especifica sinalizadores que fornecem instruções adicionais ao driver ou fornecem informações do driver. Esse membro pode ser um OR bit a bit dos seguintes valores:

Valor Significado
D3DHALDP2_EXECUTEBUFFER Os buffers de comando e vértice foram criados na memória do sistema. O driver deve atualizar a matriz de estado para a qual lpdwRStates aponta. Esse sinalizador é definido apenas pelo Direct3D.
D3DHALDP2_REQCOMMANDBUFSIZE O driver deve ser capaz de aumentar o buffer de comando atual pelo menos pelo tamanho especificado em dwReqCommandBufSize. Os drivers que não dão suporte a multibuffering de buffers de comando podem ignorar esse sinalizador. Esse sinalizador é definido apenas pelo Direct3D.
D3DHALDP2_REQVERTEXBUFSIZE O driver deve ser capaz de alocar um buffer de vértice de pelo menos o tamanho especificado em dwReqCommandBufSize. Drivers que não dão suporte a multibuffering de buffers de vértice podem ignorar esse sinalizador. Esse sinalizador é definido apenas pelo Direct3D.
D3DHALDP2_SWAPCOMMANDBUFFER O driver pode trocar o buffer para o qual lpDDCommands aponta com um novo buffer de comando e retornar imediatamente, processando de forma assíncrona o buffer original enquanto o Direct3D preenche o novo buffer de comando. Os drivers que não dão suporte a multibuffering de buffers de comando podem ignorar esse sinalizador. Esse sinalizador é definido apenas pelo Direct3D.
D3DHALDP2_SWAPVERTEXBUFFER O driver pode trocar o buffer para o qual lpDDVertex ou lpVertices aponta com um novo buffer de vértice e retornar imediatamente, processando o buffer original de forma assíncrona enquanto o Direct3D preenche o novo buffer de vértice. Drivers que não dão suporte a multibuffering de buffers de vértice podem ignorar esse sinalizador. Esse sinalizador é definido apenas pelo Direct3D.
D3DHALDP2_USERMEMVERTICES O membro lpVertices é válido, portanto, o driver deve obter os dados de vértice da memória alocada pelo usuário para a qual lpVertices aponta. Esse sinalizador é definido apenas pelo Direct3D.
D3DHALDP2_VIDMEMCOMMANDBUF O buffer de comando alocado pelo driver como um buffer de troca não está na memória do sistema. Esse sinalizador pode ser definido por drivers que dão suporte a multibuffering de buffers de comando.
D3DHALDP2_VIDMEMVERTEXBUF O buffer de vértice alocado pelo driver como um buffer de troca não está na memória do sistema. Esse sinalizador pode ser definido por drivers que dão suporte a multibuffering de buffers de vértice.

dwVertexType

Identifica o FVF dos dados no buffer de vértice; ou seja, dwVertexType especifica quais campos de dados por vértice estão presentes no buffer de vértice para o qual lpDDVertex ou lpVertices aponta. Esse membro pode ser um OR bit a bit dos valores na tabela a seguir. Apenas um dos sinalizadores de D3DFVF_TEXx está definido.

Valor Significado
D3DFVF_DIFFUSE Cada vértice tem uma cor difusa.
D3DFVF_SPECULAR Cada vértice tem uma cor especular.
D3DFVF_TEX0 Nenhuma coordenada de textura é fornecida com os dados de vértice.
D3DFVF_TEX1 Cada vértice tem um conjunto de coordenadas de textura.
D3DFVF_TEX2 Cada vértice tem dois conjuntos de coordenadas de textura.
D3DFVF_TEX3 Cada vértice tem três conjuntos de coordenadas de textura.
D3DFVF_TEX4 Cada vértice tem quatro conjuntos de coordenadas de textura.
D3DFVF_TEX5 Cada vértice tem cinco conjuntos de coordenadas de textura.
D3DFVF_TEX6 Cada vértice tem seis conjuntos de coordenadas de textura.
D3DFVF_TEX7 Cada vértice tem sete conjuntos de coordenadas de textura.
D3DFVF_TEX8 Cada vértice tem oito conjuntos de coordenadas de textura.
D3DFVF_XYZRHW Cada vértice tem coordenadas x, y, z e w. Esse sinalizador é sempre definido.

lpDDCommands

dwCommandOffset

dwCommandLength

Especifica o número de bytes de dados de comando válidos na superfície que lpDDCommands aponta para começando em dwCommandOffset.

lpDDVertex

Aponta para a estrutura DD_SURFACE_LOCAL que identifica a superfície DirectDraw que contém os dados de vértice quando o sinalizador D3DHALDP2_USERMEMVERTICES não é definido em dwFlags. Forma uma união com lpVertices.

lpVertices

Aponta para um bloco de memória no modo de usuário que contém dados de vértice quando o sinalizador D3DHALDP2_USERMEMVERTICES é definido em dwFlags.

dwVertexOffset

Especifica o número de bytes na superfície apontada por lpDDVertex ou lpVertices em que os dados de vértice são iniciados.

dwVertexLength

Especifica o número de vértices para os quais existem dados válidos na superfície apontada por lpDDVertex ou lpVertices. Esses dados válidos começam em dwVertexOffset.

dwReqVertexBufSize

Especifica o número mínimo de bytes que o driver deve alocar para o buffer de vértice de troca. Esse membro só é válido quando o sinalizador D3DHALDP2_REQVERTEXBUFSIZE é definido. Os drivers que não dão suporte a multibuffering de buffers de vértice devem ignorar esse membro.

dwReqCommandBufSize

Especifica o número mínimo de bytes pelos quais o driver deve aumentar o buffer de comando de troca. Esse membro só é válido quando o sinalizador D3DHALDP2_REQCOMMANDBUFSIZE é definido. Os drivers que não dão suporte a multibuffering de buffers de comando devem ignorar esse membro.

lpdwRStates

Aponta para uma matriz de estado de renderização que o driver deve atualizar quando analisa os comandos de estado de renderização do buffer de comando. O driver deve atualizar essa matriz somente quando o sinalizador D3DHALDP2_EXECUTEBUFFER estiver definido em dwFlags. O driver deve usar o D3DRENDERSTATETYPE tipos enumerados para atualizar o elemento apropriado da matriz de estado de renderização.

dwVertexSize

Especifica o tamanho de cada vértice, em bytes. Esse membro forma uma união com ddrval.

ddrval

Especifica o local em que o driver grava o valor retornado de D3dDrawPrimitives2. D3D_OK indica êxito. Caso contrário, o driver deverá retornar o código de erro D3DERR_Xxx apropriado. Para obter mais informações, consulte Retornar códigos para retornos de chamada do driver Direct3D.

Valor Significado
D3D_OK A operação foi concluída com sucesso.
D3DERR_COMMAND_UNPARSED O driver requer o runtime do Direct3D para analisar o buffer de execução.

dwErrorOffset

Cada D3DHAL_DP2RESPONSEQUERY é seguido pelos seguintes dados relacionados à consulta:

  • BOOL para D3DQUERYTYPE_EVENT
  • DWORD para D3DQUERYTYPE_OCCLUSION
  • estrutura D3DDEVINFO_VCACHE para D3DQUERYTYPE_VCACHE

Comentários

Observe que o membro dwVertexOffset especifica valores em bytes; o membro dwVertexLength especifica valores em vértices.

Para calcular os dados válidos, em bytes, que existem na superfície em lpDDVertex ou lpVertices, multiplique o valor em dwVertexLength pelo valor em dwVertexSize.

Requisitos

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

Confira também

D3DHAL_DP2COMMAND

D3DRENDERSTATETYPE

D3dDrawPrimitives2

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL