我有一個掛鉤其他應用程序的D3D調用的DLL。特別是,它創建了一些用於渲染的紋理。但是,當目標應用程序在掛鉤被移除之前關閉時,它有時會導致出現「非零引用計數」錯誤消息。顯然這是因爲鉤子擁有的紋理沒有及時發佈。從D3D掛鉤釋放資源
我可以通過掛接Reset
調用和釋放資源來調整窗口大小等時擺脫此錯誤;不過,我不確定該窗口實際發佈時該怎麼做。我可以掛鉤Release
方法,但是我沒有看到清楚的方式來告訴設備是否實際上被銷燬或者它的引用計數是簡單遞減的。原始Release
調用的返回值並沒有多大的意義,因爲鉤子的紋理仍然保存對設備的引用,並且跟蹤這些引用看起來像是太多工作。
當我調用Release
時,我總是可以釋放所有紋理,然後在我再次需要時重新創建,但由於Release
鉤子可能會由D3D代碼中的隱式釋放調用觸發,因此可能會造成太多開銷。例如。如果主機應用程序創建一些小資源並在每個幀中釋放它,這可能會導致掛鉤丟棄並重新創建每個幀的所有紋理,這相當昂貴。