为了提高自己,我会利用现成的资源。然而,我现在面临着一个困扰我好几天的问题。当我第一次打开游戏时,一切正常,但当通过任何程序出现 Windows 用户控制 (UAC) 屏幕时,游戏中的背景视觉效果会失真。我在这些问题上很新手,如果您能以我能理解的方式帮助我,我将非常高兴。 非常感谢你
原文:
UAC 之后:
第一个代码:
if (FAILED(hr = ms_lpd3dDevice->TestCooperativeLevel()))
{
if (D3DERR_DEVICELOST == hr)
return DEVICESTATE_BROKEN;
if (D3DERR_DEVICENOTRESET == hr)
return DEVICESTATE_NEEDS_RESET;
return DEVICESTATE_BROKEN;
}
然后这个地方就被触发了:
case CGraphicDevice::DEVICESTATE_NEEDS_RESET:
m_pyBackground.ReleaseCharacterShadowTexture();
CRenderTargetManager::Instance().ReleaseRenderTargetTextures();
Trace("DEVICESTATE_NEEDS_RESET - attempting");
if (!m_grpDevice.Reset())
{
return DEVICE_STATE_SKIP;
}
CRenderTargetManager::Instance().CreateRenderTargetTextures();
m_pyBackground.CreateCharacterShadowTexture();
break;
根据屏幕截图,似乎在丢失设备和桌面切换后,Windows 会将您用于从低分辨率纹理加载的采样器状态从线性重置为默认值,即
D3DTEXF_POINT
。
您应该通过调用
IDirect3DDevice9.SetSamplerState
方法来恢复状态,就像启动应用程序时一样。
附注在这方面,Direct3D 11 比 9 好得多,大多数时候它会自动管理这些状态。