2015-04-06 206 views
1

我想在我的HLSL着色器中設置幾個紋理作爲數組。 每個紋理都表示爲ID3D11ShaderResourceView *。 每個紋理可能是不同的大小。將紋理數組發送到DirectX 11中的着色器中

現在,如果我在D3D將它們設置爲數組:

ID3D11ShaderResourceView* m_array[3]; 

    m_array[0] = ...; 
    m_array[1] = ...; 
    m_array[2] = ...; 

    m_deviceContext->PSSetShaderResources(
     0, // Start slot 
     3, // Nb of textures 
     m_array); // Array 

而在我的HLSL着色我宣佈:

Texture2D  g_textures[3]; 

它是否將正確映射?

+0

是否有理由不能嘗試查看結果? – mins 2015-04-06 09:49:55

+0

我們正在重建我們的引擎,我們想知道我們的假設是否正確。 – DannyX 2015-04-06 09:59:54

回答

1

這通常是一種可用於將紋理數組從運行時映射到着色器執行的方法。數組中的紋理尺寸無關緊要,但是,您可能需要在着色器代碼中對此進行說明,具體取決於您如何對紋理進行採樣。

另外,在你的HLSL中,你假定g_textures數組被分配到0號插槽,所以如果由於某種原因它實際上並不在那裏(例如,在它之前有另一個紋理資源着色器源代碼),那麼您將不會將預期資源設置到正確的插槽。我發現明確地映射它們會更好,例如:

Texture2D g_textures[3] : register(t0); 

如果發生碰撞,它將在(着色器)編譯時找到。