【发布时间】:2011-01-14 10:43:38
【问题描述】:
我创建了 16 个大小约为 320x200 像素的 Direct3D 设备。我每 40 毫秒在一个单独的线程中为每个设备调用 IDirect3DDevice9::Present。在装有 Windows XP 和集成 Intel GMA945 显卡的笔记本电脑上,如果显示系统工具提示或开始菜单,则设备的一部分不会更新。 IDirect3DDevice9::Present 在那一刻没有返回任何错误代码,在程序中一切看起来都很好,但用户可以看到几个设备上的移动冻结。这可能是什么原因?
这在具有相同硬件的 Windows 7 和具有不同硬件的 Windows XP 上都可以正常工作,因此只有这种组合会出现问题。我应该支持这一点,因为我的客户正在使用这种硬件和操作系统的组合。 MSDN 没有说我应该只创建一个 D3D 设备(至少我找不到它)所以问题应该出在其他地方。
我试图找到的是,可能有一些标志组合可以解决我的问题。目前我使用以下内容:
D3DPRESENT_PARAMETERS param = {};
param.Windowed = TRUE;
param.SwapEffect = D3DSWAPEFFECT_DISCARD;
param.hDeviceWindow = GetSafeHwnd();
param.BackBufferCount = 1;
param.BackBufferFormat = D3DFMT_UNKNOWN;
param.BackBufferWidth = m_szDevice.Width;
param.BackBufferHeight = m_szDevice.Height;
param.MultiSampleType = D3DMULTISAMPLE_NONMASKABLE;
param.Flags = D3DPRESENTFLAG_VIDEO;
param.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
param.MultiSampleType = D3DMULTISAMPLE_NONE;
param.MultiSampleQuality = 0;
【问题讨论】:
标签: c++ graphics windows-xp directx direct3d