2013-03-06 50 views
1

我試圖創建一個具有CPU寫入權限的Texture2D數組。具體來說,我使用的代碼如下所示:創建一個具有CPU寫入權限的Texture2D數組

D3D10_TEXTURE2D_DESC texDesc; 

texDesc.Width    = 32; 
texDesc.Height    = 32; 
texDesc.MipLevels   = 1; 
texDesc.ArraySize   = 2; 
texDesc.SampleDesc.Count = 1; 
texDesc.SampleDesc.Quality = 0; 
texDesc.Usage    = D3D10_USAGE_DYNAMIC; 
texDesc.CPUAccessFlags  = CPU_ACCESS_WRITE; 
texDesc.Format    = DXGI_FORMAT_R32G32B32_FLOAT; 
texDesc.BindFlags   = D3D10_BIND_SHADER_RESOURCE; 
texDesc.MiscFlags   = 0; 

ID3D10Texture2D* texture2D; 
CHECK_SUCCESS(device->CreateTexture2D(&texDesc, NULL, &texture2D)); 

但是,這會失敗,並顯示E_INVALIDARG。創建具有相同尺寸(即32x32x2)和參數的3D紋理效果很好,但在這種情況下不需要。 有誰知道爲什麼這個設置不會有效?

回答

0

您需要提供一個長度爲texDesc.ArraySize的D3D11_SUBRESOURCE_DATA數組作爲CreateTexture2D()的第二個參數的輸入。

如需更多幫助,請參閱此example

+0

我知道,並與ArraySize等於1這將工作。然而,在這種情況下,我需要一個具有寫訪問權限的紋理數組(即多個片)。 – user2139157 2013-03-07 15:04:07

+0

對不起,我誤解了,希望我的編輯能幫助你。 – alanw 2013-03-08 02:37:06

+0

在編輯中提到的示例中,提供子資源指針在他嘗試創建不可變的紋理數組時是有意義的。但是,我想創建一個動態緩衝區,因爲我希望能夠多次更新紋理的內容。總之,我不需要一個不可變的緩衝區,因此不需要提供數據。然而,我測試了它,並仍然得到相同的錯誤(即使提供所描述的數據)。 – user2139157 2013-03-08 07:57:06

相關問題