*Direct3Dのデバイスをフルスクリーンで作成する [#ndc9a364] Direct3DではCreateDeviceを使ってデバイスを作成しますが、フルスクリーンモードでデバイスを作成したい場合は画面に設定できる幅や高さの組み合わせは限られています。その為どの組み合わせが有効かは事前にEnumAdapterModesで調べておくと良いでしょう。~ またEnumAdapterModesで取得できるディスプレイのモードに何種類の組み合わせがあるかはGetAdapterModeCountで調べる事ができます。 **実際のコード [#y16d056b] #code(c){{ // hWndには事前に貼り付け先のウィンドウハンドルが入っている物とします LPDIRECT3D9 lpD3D; LPDIRECT3DDEVICE9 lpD3Ddev; D3DDISPLAYMODE d3dspMode; D3DPRESENT_PARAMETERS d3dPrm; std::vector<D3DDISPLAYMODE> DModes; // Direct3Dオブジェクトの作成 lpD3D = Direct3DCreate9(D3D_SDK_VERSION); // 何種類ディスプレイモードあるかを調べる int cnt = lpD3D->GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8); // ディスプレイモードを調べる for (int i = 0; i < cnt; ++i) { lpD3D->EnumAdapterModes(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, i, &d3dspMode); /* ディスプレイモードを記憶 ここではstd::vectorを使いました。(通常の配列を使うより管理しやすくなると思います) */ DModes.push_back(d3dspMode); } /* どのディスプレイモードを使うかを決定 x(整数)をどの値にするかは何らかの方法で決めてください (その為のコードは省略します) */ d3dspMode = DModes[x]; ZeroMemory(&d3dPrm, sizeof(D3DPRESENT_PARAMETERS)); // パラメータの設定 d3dPrm.BackBufferWidth = d3dspMode.Width; // 幅 d3dPrm.BackBufferHeight = d3dspMode.Height; // 高さ d3dPrm.BackBufferFormat = D3DFMT_X8R8G8B8; d3dPrm.BackBufferCount = 1; // バックバッファの数 d3dPrm.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dPrm.hDeviceWindow = hWnd; // 表示目標ウィンドウ(貼り付け対象のウィンドウハンドルを入れてください) d3dPrm.Windowed = FALSE; // フルスクリーンを指定 d3dPrm.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; // デバイスの作成 lpD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dPrm, &lpD3Ddev); }} #column(補足) Direct3Dでフルスクリーン表示するプログラミング例として、幅640・高さ480で初期化する場合が多いですが、これはその解像度をサポートしているビデオカードが多いからだと思われます。 #column(end) //これより下は編集しないでください #pageinfo([[:Category/DirectX]],2006-07-02 (日) 02:00:41,rakuppe,2006-07-02 (日) 02:00:41,rakuppe) |