?? createdevice.cpp
字號(hào):
#include <d3d9.h>
#define WIN32_LEAN_AND_MEAN
LPDIRECT3D9 g_pD3D = NULL; // 用來創(chuàng)建D3D設(shè)備
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // D3D設(shè)備
MSG msg;
bool supportsHardwareVertexProcessing;
// 初始化D3D
HRESULT InitD3D( HWND hWnd )
{
// 創(chuàng)建D3D對(duì)象
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;
// 獲取當(dāng)前的顯示模式
D3DDISPLAYMODE d3ddm;
if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )
return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE; // 窗口模式
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 設(shè)置交換模式
d3dpp.BackBufferFormat = d3ddm.Format; // 設(shè)置背景緩沖區(qū)格式為當(dāng)前左面格式
// 創(chuàng)建D3D設(shè)備
// 第一個(gè)參數(shù):使用默認(rèn)的顯卡適配器
// 第二個(gè)參數(shù):請(qǐng)求使用硬件抽象層(HAL)
// 第三個(gè)參數(shù):窗口句柄
// 第四個(gè)參數(shù):使用軟件處理頂點(diǎn)
// 第五個(gè)參數(shù):創(chuàng)建的參數(shù)
// 第六個(gè)參數(shù):創(chuàng)建的D3D設(shè)備指針
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&g_pd3dDevice ) ) )
{
return E_FAIL;
}
//D3DCAPS9 caps;
//g_pd3dDevice->GetDeviceCaps(&caps);
//if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
// {
// //數(shù)據(jù)位為“on”,所以支持
// supportsHardwareVertexProcessing = true;
//
// }
// else
// {
// //數(shù)據(jù)位為“off”,所以不支持
// supportsHardwareVertexProcessing = false;
// }
return S_OK;
}
// 釋放D3D
VOID Cleanup()
{
if( g_pd3dDevice != NULL)
g_pd3dDevice->Release();
if( g_pD3D != NULL)
g_pD3D->Release();
}
// 渲染
VOID Render()
{
if( NULL == g_pd3dDevice )
return;
// 清除背景為蘭色
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
// 開始繪制場(chǎng)景
g_pd3dDevice->BeginScene();
// 這里繪制你需要的東西
// 結(jié)束場(chǎng)景繪制
g_pd3dDevice->EndScene();
// 顯示到屏幕上
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
// 消息處理
LRESULT WINAPI WinProc( HWND hWnd, UINT msg1, WPARAM wParam, LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
switch( msg1 )
{
case WM_DESTROY: // 退出消息
Cleanup();
PostQuitMessage( 0 );
// 結(jié)束處理
break;
case WM_LBUTTONDOWN:
//簡(jiǎn)單聲音的函數(shù)
MessageBeep(MB_ICONASTERISK);
break;
/*case WM_MOVE:
MessageBeep(MB_ICONASTERISK);
break;*/
//case WM_MOUSEMOVE:
// // MessageBeep(MB_ICONASTERISK);
// return 0;
case WM_PAINT: // 繪制
hdc = BeginPaint(hWnd,&ps);
Render();
// ValidateRect( hWnd, NULL );
EndPaint(hWnd,&ps);
break;
}
return DefWindowProc( hWnd, msg1, wParam, lParam );;
}
// WinMain程序入口
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
// 注冊(cè)窗口類
WNDCLASSEX wc ;
/*= { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
"D3D Tutorial", NULL };*/
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WinProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
wc.hInstance = hInst;
wc.lpszClassName = "D3D Tutorial";
wc.lpszMenuName = NULL;
wc.style = CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW;
RegisterClassEx( &wc );
// 創(chuàng)建窗口
/* HWND hWnd = CreateWindow( "D3D Tutorial", "D3D Tutorial 01: CreateDevice",
WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
GetDesktopWindow(), NULL, wc.hInstance, NULL );*/
HWND hWnd = CreateWindowEx(NULL,"D3D Tutorial","D3D Tutorial 01: CreateDevice",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,100,100,800,600,NULL,NULL,wc.hInstance,NULL);
// 初始化D3D
if( SUCCEEDED( InitD3D( hWnd ) ) )
{
// 顯示窗口
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
// 消息循環(huán)
while(TRUE)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if(msg.message == WM_QUIT)
break;
TranslateMessage( &msg );
DispatchMessage( &msg );
}
//Render();
//Game_Main();
}
}
UnregisterClass( "D3D Tutorial", wc.hInstance );
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -