PFND3DDDI_DRAWRECTPATCH função de retorno de chamada (d3dumddi.h)
A função DrawRectPatch desenha um patch retangular novo ou armazenado em cache ou atualiza a especificação de um patch definido anteriormente.
Sintaxe
PFND3DDDI_DRAWRECTPATCH Pfnd3dddiDrawrectpatch;
HRESULT Pfnd3dddiDrawrectpatch(
[in] HANDLE hDevice,
const D3DDDIARG_DRAWRECTPATCH *unnamedParam2,
const D3DDDIRECTPATCH_INFO *unnamedParam3,
const FLOAT *unnamedParam4
)
{...}
Parâmetros
[in] hDevice
Um identificador para o dispositivo de exibição (contexto gráfico).
unnamedParam2
pData [in]
Um ponteiro para uma estrutura D3DDDIARG_DRAWRECTPATCH que descreve o patch retangular a ser desenhado.
unnamedParam3
pInfo [in]
Opcional. Um ponteiro para uma estrutura D3DDDIRECTPATCH_INFO que descreve informações sobre o patch retangular.
unnamedParam4
pPatch [in]
Opcional. Um ponteiro para um buffer que contém quatro valores de ponto flutuante (D3DFLOAT[4]) que fornecem as contagens de segmento para cada uma das quatro bordas do patch retangular.
Retornar valor
DrawRectPatch retornará S_OK ou um resultado de erro apropriado se o patch retangular não for desenhado com êxito.
Comentários
Quando o runtime do Microsoft Direct3D chamapPatch , a função DrawRectPatch do driver de exibição do modo de usuário, ela pode, opcionalmente, fornecer informações nos parâmetros e pInfo . O runtime define sinalizadores no membro Flags da estrutura D3DDDIARG_DRAWRECTPATCH especificada pelo pData para indicar se ele fornece essas informações opcionais.
O runtime fornece um valor UINT no membro Handle de D3DDDIARG_DRAWRECTPATCH para se referir à superfície de patch. Sempre que o runtime redesenhar a superfície do patch, ele passa o valor do identificador de patch e não é necessário especificar novamente a estrutura de dados D3DDDIRECTPATCH_INFO para a superfície do patch. O driver de exibição do modo de usuário pode pré-compilar e armazenar em cache coeficientes de diferença de encaminhamento e qualquer outra informação. Portanto, as chamadas subsequentes para a função DrawRectPatch do driver que usam o mesmo valor de identificador de patch são executadas com mais eficiência.
O valor real em Handle é determinado pelo aplicativo e não está sob controle de runtime. Portanto, o driver deve manipular qualquer valor que possa ser especificado por um UINT.
O valor de Identificador especial de zero indica que o patch é dinâmico; portanto, o driver não pode pré-compilar ou armazenar informações em cache para o patch. Um valor diferente de zero para Handle indica que o patch é estático (ou atualizado com baixa frequência); portanto, o driver pode pré-compilar e armazenar em cache informações para o patch.
O driver deve lidar com os seguintes cenários em sua função DrawRectPatch :
- Se o membro Handle for zero, o patch será dinâmico. O driver não deve pré-compilar nem armazenar em cache informações para o patch. Nessa situação, o runtime passa um ponteiro para uma estrutura D3DDDIRECTPATCH_INFO no parâmetro pInfo e define o sinalizador RTPATCHFLAG_HASINFO no membro Flags da estrutura D3DDDIARG_DRAWRECTPATCH para indicar a presença da estrutura D3DDDIRECTPATCH_INFO em pInfo. Opcionalmente, o runtime também pode definir o sinalizador RTPATCHFLAG_HASSEGS em Sinalizadores para indicar a presença das informações do segmento especificadas pelo parâmetro pPatch . No entanto, se o runtime não fornecer informações de segmento no pPatch, o runtime deverá usar o D3DRS_PATCHSEGMENTS valor de estado de renderização.
- Se um valor handle diferente de zero não tiver sido especificado anteriormente em uma chamada anterior para a função DrawRectPatch do driver, o runtime desenhará um novo patch em cache. O driver deve alocar memória para armazenar dados armazenados em cache e deve adicionar esses dados à tabela de identificador de patch. Como o runtime não desenhou esse patch anteriormente, o runtime deve definir o sinalizador RTPATCHFLAG_HASINFO e passar um ponteiro para uma estrutura D3DDDIRECTPATCH_INFO no parâmetro pInfo . O driver deve marcar para o sinalizador RTPATCHFLAG_HASINFO para verificar a presença das informações do patch. Se nenhuma informação de patch for especificada, o driver deverá ignorar a chamada DrawRectPatch e não deve alocar memória para dados armazenados em cache em sua tabela de identificador de patch. Opcionalmente, o runtime pode definir o sinalizador RTPATCHFLAG_HASSEGS para indicar a presença das informações do segmento. No entanto, se o runtime não fornecer informações de segmento no pPatch, o runtime deverá usar o D3DRS_PATCHSEGMENTS valor de estado de renderização.
- Se um valor handle diferente de zero tiver sido especificado anteriormente em uma chamada anterior para a função DrawRectPatch do driver e o sinalizador RTPATCHFLAG_HASINFO estiver definido, o runtime atualizará a definição do patch. O runtime passa um ponteiro para uma estrutura D3DDDIRECTPATCH_INFO no parâmetro pInfo e o driver deve recompilar e recuar as informações do patch. Opcionalmente, o runtime pode definir o sinalizador RTPATCHFLAG_HASSEGS para indicar a presença das informações do segmento. No entanto, se o runtime não fornecer informações de segmento no pPatch, o runtime deverá usar o D3DRS_PATCHSEGMENTS valor de estado de renderização.
- Se um valor handle diferente de zero tiver sido especificado anteriormente em uma chamada anterior para a função DrawRectPatch do driver e o sinalizador RTPATCHFLAG_HASINFO não estiver definido, o runtime redesenhará o patch. O driver deve usar as informações armazenadas em cache para desenhar o patch. Nessa situação, o driver ignora os fluxos de vértice atuais e as informações armazenadas em cache são usadas. No entanto, o runtime ainda pode especificar novas informações de segmento; portanto, o driver deve marcar para o sinalizador de RTPATCHFLAG_HASSEGS e manipular as informações de segmento especificadas, mesmo que ele use um patch armazenado em cache.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível no Windows Vista e versões posteriores dos sistemas operacionais Windows. |
Plataforma de Destino | Área de Trabalho |
Cabeçalho | d3dumddi.h (inclua D3dumddi.h) |