Хорошо, если предположить, что где-то в моем шейдере есть следующее утверждение (обратите внимание, я включаю поддержку прежних версий для обмена шейдерами между 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»).