Итак, предположим, что где-то в моем шейдере есть следующая инструкция (обратите внимание, я включаю устаревшую поддержку для совместного использования шейдеров между DX9 и DX10):
Texture2D DiffuseMap;
Я могу скомпилировать шейдер без проблем, но я немного не понимаю, как связать ShaderResourceView с «DiffuseMap». Когда я «отражал» шейдер, я скорее предполагал, что он появится среди переменных в буфере констант. Это не так. На самом деле я не могу его нигде идентифицировать. Итак, как мне узнать, на какой «стадии» текстуры (используя термин DX9) я также должен связать ShaderResourceView?
Изменить: я обнаружил, что могу определить имя сэмплера, используя «GetResourceBindingDesc». Я не уверен, что это мне вообще поможет :(
Edit2: Точно так же я не заметил, что то же самое и под DX9 ... т.е. я могу получить только сэмплер.
Edit3: Мои Texture2D и Sampler выглядят так:
Texture2D DiffuseMap : DiffuseTexture;
sampler DiffuseSampler = sampler_state
{
Texture = (DiffuseMap);
MinFilter = Linear;
MaxFilter = Linear;
};
Теперь в работе с рамкой эффекта я мог получить Texture2D с помощью семантики «DiffuseTexture». Затем я мог бы установить ResourceView(D3D10)/Texture(D3D9) в Texture2D. Увы, похоже, нет никакого способа справиться с «семантикой» с использованием стандартных шейдеров болота (было бы здорово узнать, как это делает D3D, но изучение структуры эффектов D3D11 пока ни к чему не привело. Кажется, я читал это. из бинарных, т.е. скомпилированных данных, и я сам вижу там только "DiffuseSampler").