Кто-нибудь предоставит / укажет мне объяснение или руководство по использованию нескольких потоков вершин в HLSL и XNA? Меня интересует, как они хранятся / доступны для графического процессора, преимущества или использование потоков в пользовательских шейдерах и т. Д.
Я видел несколько примеров использования нескольких потоков вершин для инстанцированной геометрии, но мне тяжело оборачиваться вокруг основного механизма.
Обновление
Если у меня есть вершинный шейдер, который принимает два параметра (заимствовано из этого урока )
InstancingVSoutput InstancingVS(InstancingVSinput input, float4x4 instanceTransform : TEXCOORD0, float4 color : TEXCOORD4)
{
InstancingVSoutput output;
float4 pos = input.Position;
pos = mul(pos, transpose(instanceTransform));
pos = mul(pos, WVP);
output.Position = pos;
output.Color = color;
return output;
}
Из примера видно, что я извлек это из того, что instanceTransform
и input
извлекаются из отдельных потоков. Однако в этом случае поток input
представляет собой список из шести вершин, а instanceTransform
происходит из потока гораздо большего числа элементов, состоящих из матриц перевода. Предполагается, что это будет использоваться для инстанции геометрии.
Я не уверен, сколько раз этот шейдер выполняется - VertexBuffer0.VertexCount * VertexBuffer1.VertexCount? Проблема с такими вещами заключается в том, что, как только кто-то это выяснил, они не потрудились предоставить хорошо написанный документ обратно в сообщество, в котором подробно описывается их открытие.
Argh.