请教:我用DX9.0c开发了一个小游戏,发现可以在有独立显卡的机器上运行,但是在集成显卡的机器上却运行不了.为什么?
我用DX9.0c开发了一个小游戏,发现可以在有独立显卡的机器上运行,但是在集成显卡的机器上却运行不了.
其中创建DX对象的部分是这么写的:
bool GameFrame::initDirect3D()
{
//调整屏幕使用区大小
RECT rect;
rect.left = 0;
rect.top = 0;
rect.right = SCREENPELSX;
rect.bottom = SCREENPELSY;
AdjustWindowRectEx( &rect , GetWindowLong( HWINDOW , GWL_STYLE ) , (GetMenu( HWINDOW )!=NULL), GetWindowLong( HWINDOW , GWL_EXSTYLE) );
MoveWindow( HWINDOW , rect.left , rect.top , rect.right - rect.left , rect.bottom - rect.top , true );
//建立d3d对象
D3D = Direct3DCreate9( D3D_SDK_VERSION );
if( !D3D )
{
throw GameException( string( "建立d3d对象失败! "), true );
}
//取得目前桌面显示模式
D3DDISPLAYMODE d3ddm ;
if( D3D-> GetAdapterDisplayMode( D3DADAPTER_DEFAULT , &d3ddm ) != D3D_OK )
{
throw GameException( string( "取得目前桌面显示模式失败! "), true );
}
//建立绘图设备
D3DPRESENT_PARAMETERS d3dpp;
memset( &d3dpp , 0 , sizeof( d3dpp ));
d3dpp.Windowed= isWindows;
d3dpp.BackBufferFormat= d3ddm.Format;
d3dpp.BackBufferCount= 1;//后备缓冲的数目
d3dpp.BackBufferWidth= SCREENPELSX;//后备缓冲的宽度和高度
d3dpp.BackBufferHeight= SCREENPELSY;
d3dpp.SwapEffect= D3DSWAPEFFECT_DISCARD;//交换缓冲支持的效果类型
d3dpp.hDeviceWindow= HWINDOW ;//显示设备输出窗口的句柄
d3dpp.Flags= D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
d3dpp.AutoDepthStencilFormat= D3DFMT_D16;
d3dpp.EnableAutoDepthStencil= TRUE;
d3dpp.PresentationInterval= D3DPRESENT_INTERVAL_IMMEDIATE;
if( D3D-> CreateDevice( D3DADAPTER_DEFAULT ,
D3DDEVTYPE_HAL , HWINDOW , D3DCREATE_HARDWARE_VERTEXPROCESSING ,
&d3dpp , &D3DDEVICE ) != D3D_OK )
{
throw GameException( string( "建立绘图设备失败! "), true );
}
return true;
}
结果在集成显卡上运行老是出现 "建立绘图设备失败! "的错误,但是在独立显卡上却运行得很正常.请教原因.
[解决办法]
D3D-> CreateDevice( D3DADAPTER_DEFAULT ,
D3DDEVTYPE_HAL , HWINDOW , D3DCREATE_HARDWARE_VERTEXPROCESSING ,
&d3dpp , &D3DDEVICE )
这里面的D3DDEVTYPE_HAL和D3DCREATE_HARDWARE_VERTEXPROCESSING可以改为软件方式就可以了,因为集成显卡很多不支持硬件方式。