作者kisaraki (如月未绪)
看板GameDesign
标题Re: [请益] 请问 D3DSprite 贴图问题
时间Tue May 8 15:45:54 2012
※ 引述《kisaraki (如月未绪)》之铭言:
: 各位先进大家好
: 最近在写 Win32 D3D Sprite 练习的时候碰到一个问题
: 程式本身以 Windowsed Mode 执行
: Sprite 与 Background Surface 也可以正常贴图与更新
: 但在 Windows7 UAC 对话框 Popup 後,贴图便会停止,同时也不会产生任何错误讯息
: 若在此时尝试 Reset D3D Device,就会收到 D3DERR_INVALIDCALL ,接着 Crash
: 不晓得版上是否有先进也曾碰到这类贴图与 UAC 冲突的问题
: 我的开发环境
: Windows 7 Pro 32bit
: VS2008 + Direct9 SDK 2010 June + Win32 C++ Project
: 硬体为 Intel i3 530 + Intel HD Graphic
: 望大家赐教
: 谢谢
最後用暴力法解决了
Try 1:
UAC 会触发 WM_ACTIVATEAPP ,因此在此事件内进行
D3DDevice->TestCooperativeLevel(); <- 得到 D3DERR_DEVICENOTRESET
ReleaseD3DResource(); <- 释放 Sprite、Font
D3DDevice->Reset(&D3DParam); <- 得到 D3DERR_INVALIDCALL
结果失败
Try 2:
在 Render() 内的 D3DDevice->Present(...) 得到 D3DERR_DEVICELOST 後进行 Try1 的操作
D3DDevice->TestCooperativeLevel(); <- 得到 D3DERR_DEVICENOTRESET
D3DDevice->Reset(&D3DParam); <- 得到 S_OK;
D3DResourceOnReset(); <- 执行 Sprite、Font 的 OnReset()
结果画面并未恢复更新,简单说就是没反应
Try :
在 Render() 内的 D3DDevice->Present(...) 得到 D3DERR_DEVICELOST 後进行
D3DDevice->TestCooperativeLevel(); <- 得到 D3DERR_DEVICENOTRESET
ReleaseALLD3DResource(); <- 释放,并 Null 所有 Swap chain、Surface、Sprite
Font、Texture、Device
ReInitD3DDevice(); <- 重新建立 D3DDevice
ReInitD3DResource(); <- 重新建立所有 Sprite、Surface、Font、Texture....
结果可以动了,简单说就是不用 Device Reset,全部自己来.. Orz
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.190.68