DirectX 9和Windows UAC问题,如何修复地面失真?

axzmvihb  于 2023-10-22  发布在  Windows
关注(0)|答案(1)|浏览(155)

为了提高自己,我使用现成的资源。然而,我现在面临着一个困扰我好几天的问题。当我第一次打开游戏时,一切都很好,但是当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;
7gcisfzg

7gcisfzg1#

根据屏幕截图,似乎在丢失设备和桌面开关后,Windows将用于从低分辨率纹理加载的采样器状态从线性重置为默认值D3DTEXF_POINT
您应该通过调用IDirect3DDevice9.SetSamplerState方法来恢复状态,方法与启动应用时的方法相同。
在这方面,Direct3D 11比9好得多,大多数时候它会自动管理这些状态。

相关问题