Método IDirect3D9::CreateDevice (d3d9.h)

Cria um dispositivo para representar o adaptador de exibição.

Sintaxe

HRESULT CreateDevice(
  [in]          UINT                  Adapter,
  [in]          D3DDEVTYPE            DeviceType,
  [in]          HWND                  hFocusWindow,
  [in]          DWORD                 BehaviorFlags,
  [in, out]     D3DPRESENT_PARAMETERS *pPresentationParameters,
  [out, retval] IDirect3DDevice9      **ppReturnedDeviceInterface
);

Parâmetros

[in] Adapter

Tipo: UINT

Número ordinal que indica o adaptador de exibição. D3DADAPTER_DEFAULT é sempre o adaptador de exibição principal.

[in] DeviceType

Tipo: D3DDEVTYPE

Membro do tipo enumerado D3DDEVTYPE que denota o tipo de dispositivo desejado. Se o tipo de dispositivo desejado não estiver disponível, o método falhará.

[in] hFocusWindow

Tipo: HWND

A janela de foco alerta o Direct3D quando um aplicativo muda do modo de primeiro plano para o modo em segundo plano. Consulte Observações.

  • Para o modo de tela inteira, a janela especificada deve ser uma janela de nível superior.
  • Para o modo de janela, esse parâmetro poderá ser NULL somente se o membro hDeviceWindow de pPresentationParameters for definido como um valor válido, não NULL .

[in] BehaviorFlags

Tipo: DWORD

Combinação de uma ou mais opções que controlam a criação do dispositivo. Para obter mais informações, consulte D3DCREATE.

[in, out] pPresentationParameters

Tipo: D3DPRESENT_PARAMETERS*

Ponteiro para uma estrutura D3DPRESENT_PARAMETERS , descrevendo os parâmetros de apresentação para o dispositivo a ser criado. Se BehaviorFlags especificar D3DCREATE_ADAPTERGROUP_DEVICE, pPresentationParameters será uma matriz. Independentemente do número de cabeças existentes, apenas uma superfície de profundidade/estêncil é criada automaticamente.

Para Windows 2000 e Windows XP, a taxa de atualização de exibição de dispositivo de tela inteira é definida na seguinte ordem:

  1. A chave do Registro ForcedRefreshRate não especificada pelo usuário, se for compatível com o dispositivo.
  2. Valor de taxa de atualização não zero especificado pelo aplicativo no parâmetro de apresentação.
  3. Taxa de atualização da área de trabalho mais recente, se compatível com o dispositivo.
  4. 75 hertz se compatível com o dispositivo.
  5. 60 hertz se compatível com o dispositivo.
  6. Padrão do dispositivo.
Uma taxa de atualização sem suporte será padrão para a taxa de atualização com suporte mais próxima abaixo dela. Por exemplo, se o aplicativo especificar 63 hertz, 60 hertz serão usados. Não há taxas de atualização compatíveis abaixo de 57 hertz.

pPresentationParameters é um parâmetro de entrada e de saída. Chamar esse método pode alterar vários membros, incluindo:

  • Se BackBufferCount, BackBufferWidth e BackBufferHeight forem 0 antes do método ser chamado, eles serão alterados quando o método retornar.
  • Se BackBufferFormat for igual a D3DFMT_UNKNOWN antes do método ser chamado, ele será alterado quando o método retornar.

[out, retval] ppReturnedDeviceInterface

Tipo: IDirect3DDevice9**

Endereço de um ponteiro para a interface IDirect3DDevice9 retornada, que representa o dispositivo criado.

Retornar valor

Tipo: HRESULT

Se o método for bem-sucedido, o valor retornado será D3D_OK. Se o método falhar, o valor retornado poderá ser um dos seguintes: D3DERR_DEVICELOST, D3DERR_INVALIDCALL, D3DERR_NOTAVAILABLE D3DERR_OUTOFVIDEOMEMORY.

Comentários

Esse método retorna uma interface de dispositivo totalmente funcional, definida como o modo de exibição necessário (ou em janelas) e alocada com os buffers traseiros apropriados. Para começar a renderizar, o aplicativo precisa apenas criar e definir um buffer de profundidade (supondo que EnableAutoDepthStencil seja FALSE em D3DPRESENT_PARAMETERS).

Ao criar um dispositivo Direct3D, você fornece dois parâmetros de janela diferentes: uma janela de foco (hFocusWindow) e uma janela do dispositivo (o hDeviceWindow em D3DPRESENT_PARAMETERS). A finalidade de cada janela é:

  • A janela de foco alerta o Direct3D quando um aplicativo alterna do modo de primeiro plano para o modo de fundo (via Alt-Tab, um clique do mouse ou algum outro método). Uma única janela de foco é compartilhada por cada dispositivo criado por um aplicativo.
  • A janela do dispositivo determina o local e o tamanho do buffer traseiro na tela. Isso é usado pelo Direct3D quando o conteúdo do buffer traseiro é copiado para o buffer frontal durante o Presente.
Esse método não deve ser executado durante a manipulação de WM_CREATE. Um aplicativo nunca deve passar um identificador de janela para Direct3D durante o tratamento de WM_CREATE. Qualquer chamada para criar, liberar ou redefinir o dispositivo deve ser feita usando o mesmo thread que o procedimento de janela da janela de foco.

Observe que D3DCREATE_HARDWARE_VERTEXPROCESSING, D3DCREATE_MIXED_VERTEXPROCESSING e D3DCREATE_SOFTWARE_VERTEXPROCESSING são sinalizadores mutuamente exclusivos, e pelo menos um desses sinalizadores de processamento de vértice deve ser especificado ao chamar esse método.

Os buffers traseiros criados como parte do dispositivo só serão bloqueados se D3DPRESENTFLAG_LOCKABLE_BACKBUFFER for especificado nos parâmetros de apresentação. (Buffers traseiros multiplatapulos e superfícies de profundidade nunca são bloqueáveis.)

Os métodos Reset, IUnknown e TestCooperativeLevel devem ser chamados do mesmo thread que usou esse método para criar um dispositivo.

D3DFMT_UNKNOWN pode ser especificado para o formato de buffer de back do modo em janela ao chamar CreateDevice, Reset e CreateAdditionalSwapChain. Isso significa que o aplicativo não precisa consultar o formato da área de trabalho atual antes de chamar CreateDevice para o modo em janela. Para o modo de tela inteira, o formato de buffer traseiro deve ser especificado.

Se você tentar criar um dispositivo em uma janela dimensionada 0x0, o CreateDevice falhará.

Requisitos

   
Plataforma de Destino Windows
Cabeçalho d3d9.h (inclua D3D9.h)
Biblioteca D3D9.lib

Confira também

D3DDEVICE_CREATION_PARAMETERS

Direct3DCreate9

IDirect3D9

Multihead (Direct3D 9)

Redefinir