2012-09-29 42 views
0

是否可以創建並使用IDirect3DDevice9的子類?這樣做對我的代碼來說非常方便,但是我發現設備指針作爲IDirect3D9::CreateDevice()的輸出參數給出,我不能僅僅告訴它改寫我的子類的實例。IDirect3DDevice9的子類?

我希望能夠這樣做,以便使用IDirect3DDevice9的其他代碼在我希望使用具有擴展功能的設備的子類時不必更改。具體而言,子類需要讀取設備的渲染狀態設置並更新着色器變量,以便在實際繪製完成之前調用任何變體IDirect3DDevice9::Draw()。同樣,我不希望使用d3d設備的其他代碼進行更改,因爲我希望它能夠使用常規設備或我的擴展設備。

是否有可能使用基類的實例創建子類的實例?如果是這樣,是否會導致任何問題,例如Direct3D未設置爲使用子類實例或內存中的多個設備實例,因而不得不共享gfx卡資源等?或者我應該考慮另一種解決方法而不使用子類?

+2

爲什麼不使用'IDirect3DDevice9 *'作爲類的成員,而不是繼承? – ErikEsTT

+0

這樣做需要其他類和代碼使用'IDirect3DDevice9 *'來使用這個包含設備指針的其他類,以獲得額外的功能。也許這是最好的選擇,但我想要無縫地使用多態對我有利。 – may5694

回答

0

我最終按照上面建議的ErikEsTT的方式做了一個獨立的類,它包含IDirect3DDevice9指針並提供了額外的功能。這不是我想要的解決方案,因爲它不是一個無縫的界面 - 客戶端代碼仍然需要明確地調用一個單獨的方法。但它的工作。

相關問題