2012-04-19 48 views
1

如何从HLSL顶点着色器读取顶点声明?我的意思是这样的信息:如何从着色器读取顶点声明?

struct VS_INPUT 
{ 
    float4 position : POSITION; 
    float2 uv  : TEXCOORD; 
    float4 color : COLOR; 
}; 

我试过的IDirect3DDevice9 :: GetVertexDeclaration()和其他一些东西,但无法得到它的工作。我需要这些信息,以便在绘制调用之前知道我的着色器处理它要呈现的网格。

回答

1

用方法SetVertexDeclaration或SetFVF描述在下一个DrawCall中使用的Vertexbuffer的格式。在大多数情况下,FVF是足够的,但是如果你正在使用normalmapping,例如你需要切线和binormals,它们只能通过顶点声明来描述。

Shader没有顶点声明或类似的东西。该结构只描述了顶点着色器的输入是什么。因此,在顶点数据和着色器输入之间有标记POSITION,TEXCOORD0,COLOR0等之间的映射。如果用标记“位置”标记你的顶点数据,映射器将把这些数据填充到标记为POSITION的shaderstruct变量中。如果标签的顶点缓冲区中没有信息,则值字段不明确。所有存在但shaderstruct中没有标签的数据将被省略。

正确的方法是,你看看你的下一个drawcall哪个vertexdata,并选择正确的着色器,它需要给定的输入。