Re: [請益] 請問 D3DSprite 貼圖問題
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章