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 D3DDEVTYPE tipo enumerado que indica 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 em 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 do dispositivo em tela inteira é definida na seguinte ordem:

  1. Chave do Registro ForcedRefreshRate não especificada pelo usuário, se compatível com o dispositivo.
  2. Valor de taxa de atualização diferente de 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 usará como padrão 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 com suporte 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 muda do modo de primeiro plano para o modo de fundo (por meio de 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 o 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 com várias amostras 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, CreateDevice falhará.

Requisitos

Requisito Valor
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