Would someone provide/point me to an explanation of or tutorial on using multiple vertex streams in HLSL and XNA? I’m interested in how they’re stored/accessed by the GPU, advantages of or uses for streams in custom shaders, etc.
I’ve seen a few examples on using multiple vertex streams for instanced geometry, but I’m having a hard time wrapping my head around the underlying mechanism.
Update
If I have a vertex shader which accepts two parameters (borrowed from this tutorial)
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;
}
It seems from the example that I pulled this from that instanceTransform and input are pulled from separate streams. However, in this case, the input stream is a list of six vertices, and the instanceTransform comes from a stream of a much larger number of elements, consisting of translation matrices. This is supposed to be used for instanced geometry.
I’m confused about how many times this shader gets executed – is it VertexBuffer0.VertexCount*VertexBuffer1.VertexCount? The problem with this kind of thing is that, once someone’s figured it out, they don’t bother contributing a well-written document back to the community detailing their discovery.
Argh.
Since no one else has chimed in yet, I’ll give it a go 🙂 this is a great thread on the apphub forums about Vertex Streams:
http://forums.create.msdn.com/forums/p/46229/276901.aspx
from one of the answers:
Hope it helps 😉