Как в наши дни использовать текстуры в вершинных шейдерах? - PullRequest
0 голосов
/ 20 июня 2020

Какой способ использовать текстуру в вершинном шейдере в последнее время?

Я портировал старый пример xna в моногейму и не могу найти реальное решение какой-то уловки.

sampler2D не работает в VertexShaderFunction Превышен индекс регистра, цель не поддерживает сэмплеры

как я понимаю, автор использовал цвет текстуры для установки высоты или направления

~

texture FlowMapTexture : register(t0);
sampler2D FlowMapSampler : register(s0) = sampler_state
{
    Texture = <FlowMapTexture>;
};

~

VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{

~

    float2 texCoord = (worldPosition.xz + WorldToFlowMapTexCoord.xy) * WorldToFlowMapTexCoord.zw;
    float2 flowVector = tex2Dlod(FlowMapSampler, float4(texCoord, 0, 0)).rg;

    worldPosition.xz -= flowVector * SquareSize * extendAmount;
    float4 viewPosition = mul(worldPosition, View);
    output.Position = mul(viewPosition, Projection);
    output.Color = input.Color;

    return output;
}

1 Ответ

0 голосов
/ 21 июня 2020

Я сам обнаружил //

Я использую Shader Model 4, но с набором функций уровня 9_1, который предназначен либо для использования API Direct3D11 на старых картах, которые не поддерживают «настоящий» уровень функций 4.0, либо встроенные устройства (читайте здесь, в основном телефоны).

Таким образом, даже если вы можете использовать синтаксис Shader Model 4, ваш шейдер все равно должен соответствовать аппаратным возможностям (что для уровня 9.1 - ps2.0).

См. Блог msdn об уровнях функций здесь

Вместо этого я использовал параметр компилятора (/ 4_0).

...