|
bool d3d::InitD3D(
HINSTANCE hInstance,
int width,int height,
bool windowed,
D3DDEVTYPE deviceType,
IDirect3DDevice9** device)
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)d3d::WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(0, IDI_APPLICATION);
wc.hCursor = LoadCursor(0, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = L"Direct3D9App";
if(!RegisterClass(&wc))
{
::MessageBox(0,L"RegisterClass ERROR",0,0);
return false;
}
HWND hwnd=0;
hwnd=::CreateWindow(L"Direct3D9App",L"冒险岛demo",
WS_EX_TOPMOST,
0,0,width,height,
0,0,hInstance,0);
if(!hwnd)
{
::MessageBox(0,L"CreateWindow ERROR",0,0);
return false;
}
::ShowWindow(hwnd,SW_SHOW);
::UpdateWindow(hwnd);
HRESULT hr=0;
IDirect3D9* d3d9=0;
d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
assert(d3d9!=0);
D3DCAPS9 caps;
d3d9->GetDeviceCaps(1,deviceType,&caps);
int vp=0;
if(caps.DevCaps&D3DDEVCAPS_HWTRANSFORMANDLIGHT)
vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
else
vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.BackBufferWidth =width;
d3dpp.BackBufferHeight =height;
d3dpp.BackBufferFormat =D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount =1;
d3dpp.MultiSampleQuality =0;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE ;
d3dpp.SwapEffect =D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow =hwnd;
d3dpp.Windowed =windowed;
d3dpp.EnableAutoDepthStencil =1;
d3dpp.AutoDepthStencilFormat =D3DFMT_D24S8;
d3dpp.Flags =0;
d3dpp.FullScreen_RefreshRateInHz =D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
//step 4
hr =d3d9->CreateDevice(
D3DADAPTER_DEFAULT,
deviceType,
hwnd,
vp,
&d3dpp,
device);
if(FAILED(hr))
{
d3d9->Release();
::MessageBox(0,L"CreateDevice()-FAILED",0,0);
return false;
}
d3d9->Release();
return true;
}
错误在于CreateDevice那个函数,messageBox执行了,感觉不应该啊,看了好久,编译也通过了,不知道什么原因。。。第一次用directX,求指导 |
|