XNA - вершинные потоки? - PullRequest
       7

XNA - вершинные потоки?

1 голос
/ 19 января 2011

Кто-нибудь предоставит / укажет мне объяснение или руководство по использованию нескольких потоков вершин в 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.

1 Ответ

1 голос
/ 20 января 2011

Поскольку никто еще не присоединился, я попробую :-) Это отличная тема на форумах AppHub о Vertex Streams:
http://forums.create.msdn.com/forums/p/46229/276901.aspx

от одного изответы:

Суть в том, что разные потоки могут иметь разные макеты данных, и ваш VertexDeclaration определяет, какие данные извлекаются из какого потока.Так, например, у вас может быть один буфер, в котором хранятся все ваши позиции, и один буфер, в котором хранятся все ваши цвета, и вы можете установить их для разных потоков;в качестве альтернативы вы можете объединить их в один поток, но это не всегда удобно.

Надеюсь, это поможет; -)

...