フルスクリーンモードでDirectX10(Win32/C++)アプリケーションを設定する際に少し問題があります。問題は、最初からフルスクリーンでアプリを稼働させたいということです。これは、DXGISwapChain :: SetFullScreenState関数を使用して行うことができます。これは動作しますが、私は述べている私のVisualC++ 2008デバッガで小さな通知を得る:D3D10(DirectX10)フルスクリーンパフォーマンスの問題
「DXGI警告:IDXGISwapChain ::現在:原因IDXGISwapChainを使用していないアプリケーションを被るフルスクリーンプレゼンテーションの非効率性::適切ResizeBuffers、DXGI_MODE_DESCを指定しませんIDXGIOutput :: GetDisplayModeListで使用可能か、DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCHを使用していません。
これは、DirectXがグラフィックスカードの完全な所有権を取らず、イメージをフロントバッファからバックバッファにフリップするのではなく、はるかに遅いものであることを意味します。
私はDXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCHを有効にしていますが、私はバッファのサイズを変更しようとしましたが、フルスクリーンモードに入る最良の方法は何もわかりません。私はMSDNを見てきましたが、ほとんどの場合、DXGIがすべての作業を行わないように、Alt + Enterを押すだけでフルスクリーンになると仮定しています。誰かがDirectX10をフルスクリーンモードにして「フリッピング」を最大限に活用するコードを投稿してください。
サイズ変更に使用されるコードに興味を持って誰のために:
ReleaseCOM(m_pD3DRenderTargetView);
ReleaseCOM(m_pD3DDepthStencilView);
ReleaseCOM(m_pD3DDepthStencilBuffer);
DXGI_MODE_DESC* mod = new DXGI_MODE_DESC;
mod->Format = DXGI_FORMAT_R8G8B8A8_UNORM;
mod->Height = m_ScreenHeight;
mod->Width = m_ScreenWidth;
mod->RefreshRate.Denominator = 0;
mod->RefreshRate.Numerator = 0;
mod->ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
mod->Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
delete mod; mod = 0;
m_pSwapChain->ResizeTarget(mod);
HR(m_pSwapChain->ResizeBuffers(1, m_ScreenWidth, m_ScreenHeight, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH))
throw(Exception(GET_BUFFER_FAIL, AT));
//problem area
m_pSwapChain->SetFullscreenState(TRUE, NULL);
ID3D10Texture2D* pBackBuffer;
HR(m_pSwapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (LPVOID*)&pBackBuffer))
throw(Exception(GET_BUFFER_FAIL, AT)); //continues as usual
あなたは第二部をしましたか? "DXXI_MODE_DESCをIDXGIOutput :: GetDisplayModeListで利用できないように指定する" – Ricket
個人的には、これよりも多くのDirectXの専門知識があるので、これをGameDev.Netにポストすることをお勧めします。 – Promit