You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DirectX9与Windows UAC问题:如何修复游戏地面失真?

问题:UAC触发后游戏背景画面失真

我正在基于现成资源开发游戏提升技术,现在碰到个棘手问题:游戏刚启动时一切正常,但只要有程序触发Windows用户账户控制(UAC)界面,游戏背景就会失真。我是新手,求易懂的解决办法。

初始状态:
初始画面

触发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;

解决方案

这个问题本质是UAC弹窗导致Direct3D设备失去焦点,触发了设备重置流程,但你的重置代码只处理了阴影纹理和渲染目标纹理,漏掉了背景的主纹理,所以背景画面才会失真。按下面步骤修改即可:

  1. 在DEVICESTATE_NEEDS_RESET分支的重置设备前,先释放背景的主纹理(函数名根据你的资源管理代码调整,比如m_pyBackground.ReleaseMainTexture())
  2. 设备重置成功后,重新创建或加载背景的主纹理(比如m_pyBackground.CreateMainTexture())
  3. 额外检查:确保所有自定义纹理、着色器等资源,在设备重置时都做了「释放-重置后重建」的操作,不能只处理部分资源

修改后的代码示例:

case CGraphicDevice::DEVICESTATE_NEEDS_RESET:

   // 新增:释放背景主纹理
   m_pyBackground.ReleaseMainTexture();
   // 原有代码
   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();
   // 新增:重建背景主纹理
   m_pyBackground.CreateMainTexture();

   break;

新手额外注意点:

  • 确认你的纹理管理类中,ReleaseXXX和CreateXXX是成对的,释放时要彻底清理COM对象,创建时要重新从文件/内存加载资源
  • 如果后续发现其他UI、场景纹理也出现类似问题,同样要把它们加入重置流程的释放和重建步骤

内容的提问来源于stack exchange,提问作者cvaqabond

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:03:28