2015-04-06 1 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

+0

Мы перестраиваем наш двигатель, и мы хотим знать, правильны ли наши предположения. – DannyX

ответ

1

Это, в общем, метод, который можно использовать для сопоставления текстурных массивов от выполнения до исполнения шейдера. Не имеет значения, что размеры текстуры в массиве совпадают, однако вам может понадобиться учитывать это в вашем шейдерном коде, в зависимости от того, как вы производите выборку текстур.

Кроме того, в вашем HLSL предполагается, shader source), то вы не будете устанавливать целевой ресурс в соответствующий слот. Я считаю, что лучше отобразить их в явном виде, например:

Texture2D g_textures[3] : register(t0); 

Если есть конфликт, он будет найден в (шейдер) время компиляции.