現在、Microsoft公式サイトでDirectX9を勉強しているものです。
以下のコードを見てほしいのですが...
C++
1#include<windows.h> 2#include<d3dx9.h> 3#include<d3d9.h> 4 5LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { 6 switch (msg) { 7 case WM_DESTROY: 8 PostQuitMessage(0); 9 return 0; 10 } 11 return DefWindowProc(hwnd, msg, wp, lp); 12} 13 14int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 15 PSTR lpCmdLine, int nCmdShow) { 16 HWND hwnd; 17 MSG msg; 18 WNDCLASS winc; 19 RECT rw, rc; 20 D3DPRESENT_PARAMETERS d3dpp; 21 22 winc.style = CS_HREDRAW | CS_VREDRAW; 23 winc.lpfnWndProc = WndProc; 24 winc.cbClsExtra = winc.cbWndExtra = 0; 25 winc.hInstance = hInstance; 26 winc.hIcon = LoadIcon(NULL, IDI_APPLICATION); 27 winc.hCursor = LoadCursor(NULL, IDC_ARROW); 28 winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 29 winc.lpszMenuName = NULL; 30 winc.lpszClassName = TEXT("Window"); 31 32 if (!RegisterClass(&winc)) return 0; 33 34 hwnd = CreateWindow( 35 TEXT("Wndows"), TEXT("TestWindow"), 36 WS_OVERLAPPEDWINDOW | WS_VISIBLE, 37 175, 50, 1920, 1080, NULL, NULL, 38 hInstance, NULL 39 ); 40 GetWindowRect(hwnd, &rw); // ウィンドウ全体のサイズ 41 GetClientRect(hwnd, &rc); // クライアント領域のサイズ 42 int new_width = (rw.right - rw.left) - (rc.right - rc.left) + 1280; 43 int new_height = (rw.bottom - rw.top) - (rc.bottom - rc.top) + 720; 44 SetWindowPos(hwnd, NULL, 0, 0, new_width, new_height, SWP_NOMOVE | SWP_NOZORDER); 45 if (hwnd == NULL) return 0; 46 47 if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) 48 return E_FAIL; 49 50 ZeroMemory(&d3dpp, sizeof(d3dpp)); 51 d3dpp.Windowed = TRUE; 52 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; 53 d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; 54 55 if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, 56 D3DCREATE_SOFTWARE_VERTEXPROCESSING, 57 &d3dpp, &g_pd3dDevice))) 58 59 while (GetMessage(&msg, NULL, 0, 0)) DispatchMessage(&msg); 60 return msg.wParam; 61}
これは、WindowsAPI でウィンドウを表示してDirectXを初期化したコードです。
そして、コード最後当たりの「g_pD3D」
このポインタ(?)がよくわかりません。
VisualStudio2019でエラーの内容を見てみると、
g_pD3Dが定義されていません
とのエラー。
これは見てわかる通り、g_pD3Dが定義されていないよ。
ということです。
ここまではわかるのですが
Microsoft公式の解説には、この「g_pD3Dを定義しろ」との解説は載っていませんでした。
なのでこのg_pD3Dをどのように定義するのかがわかりません...
回答よろしくお願いします
> なのでこのg_pD3Dをどのように定義するのかがわかりません...
ご提示のコードですが、そもそもどこのサンプルコードを参考にされたのでしょうか。g_pD3Dとかは恐らく自分で定義すべき変数だと思うのですが。
例えばこちらのサイト様の記事(http://marupeke296.com/DXGSmp_No1_Init.html) では同じ名前の変数g_pD3D をLPDIRECT3D9 g_pD3D;と宣言、定義して使われています。
すみません、リンク切れ(?)でサイトが見れないようになっています。
また、
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
このようなサンプルコードをWindowsAPIで作ったウィンドウを作成する
コードの中に貼り付けました
回答1件
あなたの回答
tips
プレビュー