Criando o dispositivo DirectX de tela cheia causa d3derr_invalidcall
-
28-09-2019 - |
Pergunta
Estou tentando criar um dispositivo DirectX na tela inteira (até este momento em que fui com janela do compensação), mas o dispositivo não será criado e recebo uma chamada de chamada inválida de RH.
Este é o meu código:
md3dPP.BackBufferWidth = 1280;
md3dPP.BackBufferHeight = 720;
md3dPP.BackBufferFormat = D3DFMT_UNKNOWN;
md3dPP.BackBufferCount = 1;
md3dPP.MultiSampleType = D3DMULTISAMPLE_NONE;
md3dPP.MultiSampleQuality = 0;
md3dPP.SwapEffect = D3DSWAPEFFECT_DISCARD;
md3dPP.hDeviceWindow = mhMainWnd;
md3dPP.Windowed = false;
md3dPP.EnableAutoDepthStencil = true;
md3dPP.AutoDepthStencilFormat = D3DFMT_D24S8;
md3dPP.Flags = 0;
md3dPP.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
md3dPP.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
HR(md3dObject->CreateDevice(
D3DADAPTER_DEFAULT, // primary adapter
mDevType, // device type
mhMainWnd, // window associated with device
devBehaviorFlags, // vertex processing
&md3dPP, // present parameters
&m_pd3dDevice)); // return created device
Observe 'md3dpp.windowed = false;', se isso for verdade, o dispositivo cria no modo de janela.
Estou com a impressão de que cometi um erro em alguns dos meus valores padrão, mas não tenho idéia de onde olhar. Existe uma maneira de obter um relatório mais detalhado sobre por que a criação do dispositivo falhou além do d3derr_inValidCall?
Solução
Você precisa especificar um valor diferente para BackBufferFormat
Porque apenas aplicativos em janela permitem o valor D3DFMT_UNKNOWN
. Escolha um que seja suportado pelo seu dispositivo (você pode verificar usando CheckDeviceFormat ()).