Использование постоянных данных буфера в качестве индекса при возврате из шейдера

Итак, у меня есть пиксельный шейдер, который смешивает различные текстуры, используя карту наложения, но я пытаюсь сделать смешивание одним из вариантов. Таким образом, мое решение состояло в том, что я вычисляю 3 различных float3, которые находятся в массиве (0 — это не смешивание, 1 — это смешивание между двумя текстурами, а 2 — это смешивание между тремя текстурами), а затем я подумал, что могу использовать значение из константного буфера чтобы определить, какой из них следует использовать примерно так.

cbuffer VSConstants : register(b13)
{
float4 i;
}int index = i[0];
return float4(finalized[index], 1.0f);

но результатом этого является то, что D3DCompileFromFile возвращает E_FAIL, а затем CreatePixelShader аварийно завершает работу с нарушением прав доступа.

Я предполагаю, что компилятору не нравится, что я использую index как случай «index», если я устанавливаю его в ручное значение, такое как 1, он работает отлично. Единственный другой способ, которым я мог бы обойти это, — это использовать if для проверки того, что я [0], но из того, что мы узнали, если кейсы не очень полезны в шейдерах с точки зрения оптимизации (и посмотреть, как нужно несколько раз, если дела становятся еще хуже). Так кто-нибудь знает, как я могу решить проблему, или альтернативно есть другое решение?

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]