![]() |
#2
hahayezhe2013-02-27 16:51
|

pD3D=Direct3DCreate9(D3D_SDK_VERSION);
if(pD3D!=NULL)
{
D3DPRESENT_PARAMETERS d3dpp;
memset(&d3dpp,0,sizeof(d3dpp));
d3dpp.BackBufferWidth=SURFACE_WIDTH;
d3dpp.BackBufferHeight=SURFACE_HEIGHT;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat=D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount=1;
d3dpp.Windowed=false;
d3dpp.hDeviceWindow=g_hWnd;
d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality=0;
d3dpp.EnableAutoDepthStencil=FALSE;
d3dpp.AutoDepthStencilFormat=D3DFMT_D24FS8;
d3dpp.Flags=0;
d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
HRESULT hr=pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,g_hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&pd3dDevice);
if(!FAILED(hr))
{
return true;
}
else
{
switch(hr)
{
case D3DERR_INVALIDCALL:
OutputDebugString(L"函数的参数为一个无效值\n");
break;
case D3DERR_NOTAVAILABLE:
OutputDebugString(L"当前设备不支持所设类型\n");
break;
case D3DERR_OUTOFVIDEOMEMORY:
OutputDebugString(L"没有足够的显存执行操作\n");
break;
default:
OutputDebugString(L"未知错误\n");
break;
}
}
}
return false;
if(pD3D!=NULL)
{
D3DPRESENT_PARAMETERS d3dpp;
memset(&d3dpp,0,sizeof(d3dpp));
d3dpp.BackBufferWidth=SURFACE_WIDTH;
d3dpp.BackBufferHeight=SURFACE_HEIGHT;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat=D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount=1;
d3dpp.Windowed=false;
d3dpp.hDeviceWindow=g_hWnd;
d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality=0;
d3dpp.EnableAutoDepthStencil=FALSE;
d3dpp.AutoDepthStencilFormat=D3DFMT_D24FS8;
d3dpp.Flags=0;
d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
HRESULT hr=pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,g_hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&pd3dDevice);
if(!FAILED(hr))
{
return true;
}
else
{
switch(hr)
{
case D3DERR_INVALIDCALL:
OutputDebugString(L"函数的参数为一个无效值\n");
break;
case D3DERR_NOTAVAILABLE:
OutputDebugString(L"当前设备不支持所设类型\n");
break;
case D3DERR_OUTOFVIDEOMEMORY:
OutputDebugString(L"没有足够的显存执行操作\n");
break;
default:
OutputDebugString(L"未知错误\n");
break;
}
}
}
return false;
以上代码设备能初始化成功运行正常,后面的画图都没问题。
可是我只要把自动深度缓冲选项打开(d3dpp.EnableAutoDepthStencil=TRUE;),pD3D->CreateDevice函数就调用失败,返回D3DERR_INVALIDCALL错误。
我的显卡是Geforce 540M。
尝试修改各种参数还是不行,哪位大哥知道为什么啊?