2012-06-05 42 views
1

如果您創建了一個新的空紋理,例如direct3d是否初始化新​​創建的紋理

的IDirect3DDevice9 :: CreateTexture 或 D3DXCreateTexture

它是保證被填充零 - 因爲在我看來,通過測試? 有沒有人有關於這個微軟的聲明的鏈接?我找不到任何東西。

+3

我沒有看到有關新紋理初始化的明確意見。 MSDN通常描述API/D3D調用的任何其他行爲,因此,如果您沒有看到有關填充紋理的任何內容,那麼它很可能不會發生。此外,我會說填充任何新的紋理是一個重大的性能問題,因爲紋理通常是預渲染的,清理內存沒有意義。如果我是你,我會建議新的紋理內容沒有初始化。 – real4x

回答

2

不,沒有明確的保證(我見過)。事實上,我已經看到了一些相反的行爲:來自先前(釋放)紋理的數據和看似隨機的數據出現。

但是,紋理之間的行爲差​​異很大,這取決於紋理在格式中的分配位置。如果CPU需要,分配到系統內存或某些共享池可能會導致數據清零。通常,在視頻內存中分配時,不會發生這種情況。 IDirect3DDevice9::CreateTextureD3DXCreateTexture之間也可能有差異; D3DX通常會做更多的初始化或爲此提供選項。

如果您看到紋理顯示爲零填充,這可能是由於調試構建或新系統。運行一些其他圖形應用程序,然後嘗試運行發佈版本(確保您的系統未設置爲D3D調試模式)。

1

如果您看看DXGI API和DX10 + DDI,驅動程序有很多機會通過DXGI/D3D填滿請求的內存。這就是說,由於沒有關於內存被填滿的API保證,我不會依賴它。