「C言語/C++/dx9sample1」の編集履歴(バックアップ)一覧はこちら
C言語/C++/dx9sample1 - (2020/06/30 (火) 11:12:38) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
|開発環境|Microsoft Visual Studio Community 2019|
|実行環境|Microsoft Windows 10 Home (64bit)|
|プロジェクト テンプレート|C++ 空のプロジェクト|
|プロジェクト名|dx9sample1|
#image(AATrain1.png)
参考
[[座標変換済み頂点で2D板ポリゴンを描画:サンプルプログラム>http://marupeke296.com/DXGSmp_No2_2DPoly.html]]
プロジェクト構成プロパティ
リンカ―/システム/サブシステム Windows (/SUBSYSTEM:WINDOWS)
dx9sample1.cpp
#highlight(c++){{
#pragma comment(lib, "d3d9")
#include <Windows.h>
#include <d3d9.h>
#define SAFE_RELEASE(p) if(p){p->Release();p=NULL;}
struct CUSTOM_VTX {
float x, y, z, w;
DWORD color;
};
#define CUSTOM_FVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
// 外部変数
LPDIRECT3D9 pD3D;
LPDIRECT3DDEVICE9 pD3DDev;
// 関数プロトタイプ宣言
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
HWND InitWindow(HINSTANCE hInstance, int nCmdShow);
HRESULT InitD3D(HWND hWnd);
void Cleanup();
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR, int nCmdShow)
{
HWND hWnd = InitWindow(hInstance, nCmdShow);
if (!hWnd) return -1;
HRESULT hr = InitD3D(hWnd);
if (FAILED(hr)) {
Cleanup();
return -1;
}
ShowWindow(hWnd, nCmdShow);
CUSTOM_VTX vtx[] = {
{ 200, 200, 0, 1, 0xff0000ff },
{ 200, 0, 0, 1, 0xff00ff00 },
{ 400, 200, 0, 1, 0xffff0000 },
};
MSG msg = { 0 };
while (msg.message != WM_QUIT) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else {
pD3DDev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1, 0);
pD3DDev->BeginScene();
pD3DDev->SetFVF(CUSTOM_FVF);
pD3DDev->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, vtx, sizeof CUSTOM_VTX);
pD3DDev->EndScene();
pD3DDev->Present(NULL, NULL, NULL, NULL);
}
}
Cleanup();
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
HWND InitWindow(HINSTANCE hInstance, int nCmdShow)
{
WNDCLASSEX wc = { sizeof WNDCLASSEX };
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hbrBackground = HBRUSH(COLOR_WINDOW + 1);
wc.lpszClassName = L"dx9sample1";
if (!RegisterClassEx(&wc)) return NULL;
DWORD deStyle = WS_OVERLAPPEDWINDOW ^ WS_MAXIMIZEBOX ^ WS_THICKFRAME;
RECT rc = { 0, 0, 400, 400 };
AdjustWindowRect(&rc, deStyle, FALSE);
HWND hWnd = CreateWindow(
wc.lpszClassName, L"dx9sample1", deStyle,
CW_USEDEFAULT, 0, rc.right - rc.left, rc.bottom - rc.top,
NULL, NULL, hInstance, NULL);
return hWnd;
}
HRESULT InitD3D(HWND hWnd)
{
HRESULT hr;
pD3D = Direct3DCreate9(D3D_SDK_VERSION);
if (!pD3D) return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp = { 0 };
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.Windowed = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_UNKNOWN;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
hr = pD3D->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp,
&pD3DDev);
if (FAILED(hr)) return hr;
return S_OK;
}
void Cleanup()
{
SAFE_RELEASE(pD3DDev);
SAFE_RELEASE(pD3D);
}
}}
|開発環境|Microsoft Visual Studio Community 2019|
|実行環境|Microsoft Windows 10 Home (64bit)|
|プロジェクト テンプレート|C++ 空のプロジェクト|
|プロジェクト名|dx9sample1|
#image(dx9sample1.jpg)
参考
[[座標変換済み頂点で2D板ポリゴンを描画:サンプルプログラム>http://marupeke296.com/DXGSmp_No2_2DPoly.html]]
プロジェクト構成プロパティ
リンカ―/システム/サブシステム Windows (/SUBSYSTEM:WINDOWS)
dx9sample1.cpp
#highlight(c++){{
#pragma comment(lib, "d3d9")
#include <Windows.h>
#include <d3d9.h>
#define SAFE_RELEASE(p) if(p){p->Release();p=NULL;}
struct CUSTOM_VTX {
float x, y, z, w;
DWORD color;
};
#define CUSTOM_FVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
// 外部変数
LPDIRECT3D9 pD3D;
LPDIRECT3DDEVICE9 pD3DDev;
// 関数プロトタイプ宣言
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
HWND InitWindow(HINSTANCE hInstance, int nCmdShow);
HRESULT InitD3D(HWND hWnd);
void Cleanup();
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR, int nCmdShow)
{
HWND hWnd = InitWindow(hInstance, nCmdShow);
if (!hWnd) return -1;
HRESULT hr = InitD3D(hWnd);
if (FAILED(hr)) {
Cleanup();
return -1;
}
ShowWindow(hWnd, nCmdShow);
CUSTOM_VTX vtx[] = {
{ 200, 200, 0, 1, 0xff0000ff },
{ 200, 0, 0, 1, 0xff00ff00 },
{ 400, 200, 0, 1, 0xffff0000 },
};
MSG msg = { 0 };
while (msg.message != WM_QUIT) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else {
pD3DDev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1, 0);
pD3DDev->BeginScene();
pD3DDev->SetFVF(CUSTOM_FVF);
pD3DDev->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, vtx, sizeof CUSTOM_VTX);
pD3DDev->EndScene();
pD3DDev->Present(NULL, NULL, NULL, NULL);
}
}
Cleanup();
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
HWND InitWindow(HINSTANCE hInstance, int nCmdShow)
{
WNDCLASSEX wc = { sizeof WNDCLASSEX };
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hbrBackground = HBRUSH(COLOR_WINDOW + 1);
wc.lpszClassName = L"dx9sample1";
if (!RegisterClassEx(&wc)) return NULL;
DWORD deStyle = WS_OVERLAPPEDWINDOW ^ WS_MAXIMIZEBOX ^ WS_THICKFRAME;
RECT rc = { 0, 0, 400, 400 };
AdjustWindowRect(&rc, deStyle, FALSE);
HWND hWnd = CreateWindow(
wc.lpszClassName, L"dx9sample1", deStyle,
CW_USEDEFAULT, 0, rc.right - rc.left, rc.bottom - rc.top,
NULL, NULL, hInstance, NULL);
return hWnd;
}
HRESULT InitD3D(HWND hWnd)
{
HRESULT hr;
pD3D = Direct3DCreate9(D3D_SDK_VERSION);
if (!pD3D) return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp = { 0 };
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.Windowed = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_UNKNOWN;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
hr = pD3D->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp,
&pD3DDev);
if (FAILED(hr)) return hr;
return S_OK;
}
void Cleanup()
{
SAFE_RELEASE(pD3DDev);
SAFE_RELEASE(pD3D);
}
}}