トップ回答者
C++ DirextX9でフルスクリーン表示

質問
-
はじめまして、よろしくお願いします。
15歳からはじめるDirectX9 を見ながら
ウィンドウ表示、フルスクリーン表示をやっています。
ウインドウ表示はうまく動作したのですが、フルスクリーンはエラーが返されフルスクリーンになりません。
書籍には「環境によってはフルスクリーン表示できないこともあります」
とあるのですが
DirextX9はインストール済み、ビデオカードはGeforce 9600なので
大丈夫だとおもうのですが・・・
どうすればフルスクリーン表示できるようになるでしょうか。
以下ソースコード
HRESULT InitD3D_Full( HWND hWnd )
{
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;D3DDISPLAYMODE dispmode;
g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&dispmode);
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = FALSE;
d3dpp.BackBufferWidth=dispmode.Width;
d3dpp.BackBufferHeight=dispmode.Height;
d3dpp.BackBufferFormat=dispmode.Format;
d3dpp.FullScreen_RefreshRateInHz=dispmode.RefreshRate;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) ){if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) ){
return E_FAIL;
}
}
return S_OK;
}
回答
-
まずは失敗の原因を探ってみましょう。
たぶん CreateDevice が失敗しているのだと思いますが、CreateDevice は失敗するとその原因を返してくれます。
失敗した場合は、次のいずれかの値を返す。
D3DERR_INVALIDCALL メソッドの呼び出しが無効である。たとえば、メソッドのパラメータに無効な値が設定されている場合などである。 D3DERR_NOTAVAILABLE このデバイスは、問い合わせたテクニックをサポートしていない。 D3DERR_OUTOFVIDEOMEMORY Direct3D が処理を行うのに十分なディスプレイ メモリがない。
引用元: http://msdn.microsoft.com/ja-jp/library/cc324295.aspx
CreateDevide を HRESULT で受けて、その中身を確認してみてください。
...
HRESULT hr = g_pD3D->CreateDevice(...
if (FAILED(hr)) {
hr = g_pD3D->CreateDevice(...
if (FAILED(hr)) {
return E_FAIL;
}
}
...- 回答としてマーク sk7474 2009年5月1日 9:12
すべての返信
-
まずは失敗の原因を探ってみましょう。
たぶん CreateDevice が失敗しているのだと思いますが、CreateDevice は失敗するとその原因を返してくれます。
失敗した場合は、次のいずれかの値を返す。
D3DERR_INVALIDCALL メソッドの呼び出しが無効である。たとえば、メソッドのパラメータに無効な値が設定されている場合などである。 D3DERR_NOTAVAILABLE このデバイスは、問い合わせたテクニックをサポートしていない。 D3DERR_OUTOFVIDEOMEMORY Direct3D が処理を行うのに十分なディスプレイ メモリがない。
引用元: http://msdn.microsoft.com/ja-jp/library/cc324295.aspx
CreateDevide を HRESULT で受けて、その中身を確認してみてください。
...
HRESULT hr = g_pD3D->CreateDevice(...
if (FAILED(hr)) {
hr = g_pD3D->CreateDevice(...
if (FAILED(hr)) {
return E_FAIL;
}
}
...- 回答としてマーク sk7474 2009年5月1日 9:12