如何从HLSL顶点着色器读取顶点声明?我的意思是这个信息:
struct VS_INPUT
{
float4 position : POSITION;
float2 uv : TEXCOORD;
float4 color : COLOR;
};
我尝试了IDirect3DDevice9 :: GetVertexDeclaration()和其他一些东西,但无法让它工作。我需要这些信息,所以我可以在绘制调用之前知道我的着色器处理它正在尝试渲染的网格。
答案 0 :(得分:1)
使用方法SetVertexDeclaration或SetFVF,您可以在下一个DrawCall中描述使用的Vertexbuffer的格式。对于大多数情况,FVF就足够了,但是如果你使用法线贴图,你需要切线和副法线,这只能通过顶点声明来描述。
Shader没有顶点声明或类似的东西。该结构仅描述了顶点着色器的输入预期。因此,顶点数据和着色输入之间存在映射,标记为POSITION,TEXCOORD0,COLOR0等。如果使用标记“位置”标记顶点数据的某些内容,则映射器将在标记为POSITION的着色器的变量中填充此数据。 。如果标签的顶点缓冲区中没有信息,则值字段不明确。存在但在着色器结构中没有标记的所有数据都将被省略。
正确的方法是查看下一个drawcall的顶点数据,并选择正确的着色器,它需要给定的输入。