アダプタの数
アダプタ数を得る
前回は、DirectX Graphics の初期化処理を行いました
この初期化について、よく理解することが DirectX Graphics では重要です
しかし、前回の実行結果は単純にウィンドウを表示するだけでした
これでは、正しく初期化されているのかどうかわかりませんね
そこで、今回はインターフェイスを利用してアダプタの情報を取得してみましょう
ただし、描画処理は DirectX ではなく、Windows GDI を利用します
IDirect3D8 インターフェイスのメソッドの多くは
アダプタの情報取得などに対し、どのアダプタを対象とするのかを表す
アダプタインデックスを指定しなければなりません
前回は、D3DADAPTER_DEFAULT を指定し、プライマリアダプタを選択しました
しかし、複数のアダプタがインストールされているコンピュータでは
場合によって、他のアダプタの情報が必要になったりすることもあるでしょう
アダプタの数を取得するには IDirect3D8::GetAdapterCount() を使います
UINT GetAdapterCount();
このメソッドは、アダプタの総数を返します
ただし、リアルタイムではなくインスタンスが生成された時のアダプタの数です
#include <windows.h>
#include <d3d8.h>
#define TITLE TEXT("Kitty on your lap")
IDirect3D8 * pDirect3D;
LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) {
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
static TCHAR strText[1024];
static D3DDISPLAYMODE d3ddm;
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CREATE:
pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT , &d3ddm);
wsprintf(strText ,
TEXT("Adapter = %d\nWidth = %d\n")
TEXT("Height = %d\nRefreshRate = %d") ,
pDirect3D->GetAdapterCount() ,
d3ddm.Width , d3ddm.Height , d3ddm.RefreshRate
);
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd , &ps);
GetClientRect(hWnd , &rect);
DrawText(hdc , strText , -1 , &rect , DT_LEFT);
EndPaint(hWnd , &ps);
return 0;
}
return DefWindowProc(hWnd , msg , wp , lp);
}
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow) {
MSG msg;
HWND hWnd;
WNDCLASS winc;
pDirect3D = Direct3DCreate8(D3D_SDK_VERSION);
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT("KITTY");
if (!RegisterClass(&winc)) return 0;
hWnd = CreateWindow(
TEXT("KITTY") , TITLE , WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT ,
NULL , NULL , hInstance , NULL
);
if (!hWnd) return 0;
while (GetMessage(&msg , NULL , 0 , 0 )) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
pDirect3D->Release();
return msg.wParam;
}
このプログラムを実行すると、ウィンドウのクライアント領域に
上の図のような、ディスプレイモードとアダプタについての情報を表示します
Adapter にはアダプタの数、Width と Height は画面解像度が表示されています
RefreshRate はリフレッシュレートで、0 の場合はアダプタデフォルトを意味します
IDirect3D8::GetAdapterCount()
UINT GetAdapterCount();
インスタンスが生成された時点でのアダプタの数を取得します
戻り値 - アダプタの数