Direct3Dのデバイスをフルスクリーンで作成する

Direct3DではCreateDeviceを使ってデバイスを作成しますが、フルスクリーンモードでデバイスを作成したい場合は画面に設定できる幅や高さの組み合わせは限られています。その為どの組み合わせが有効かは事前にEnumAdapterModesで調べておくと良いでしょう。
またEnumAdapterModesで取得できるディスプレイのモードに何種類の組み合わせがあるかはGetAdapterModeCountで調べる事ができます。

実際のコード

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
    // 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);
補足

Direct3Dでフルスクリーン表示するプログラミング例として、幅640・高さ480で初期化する場合が多いですが、これはその解像度をサポートしているビデオカードが多いからだと思われます。


ページ情報
  • カテゴリ : DirectX
  • 作成日 : 2006-07-02 (日) 02:00:41
  • 作成者 : rakuppe?
  • 最終編集日 : 2006-07-02 (日) 02:00:41
  • 最終編集者 : rakuppe?
[ トップ ]   [ 編集 | 凍結 | 差分 | バックアップ | 添付 | 複製 | 名前変更 | リロード ]   [ 新規 | 子ページ作成 | 一覧 | 単語検索 | 最終更新 | ヘルプ ]