1

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

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

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

4

1 回答 1

1

使用 SetVertexDeclaration 或 SetFVF 方法,您可以在下一个 DrawCall 中描述使用的 Vertexbuffer 的格式。在大多数情况下,FVF 就足够了,但是如果您使用法线贴图,例如,您需要切线和副法线,这只能通过顶点声明来描述。

着色器没有顶点声明或类似的东西。该结构仅描述了顶点着色器的预期输入。因此,在顶点数据和着色器输入之间存在一个映射,带有 POSITION、TEXCOORD0、COLOR0 等标签。如果您用标签“Position”标记顶点数据的某些内容,则映射器会将这些数据填充到用 POSITION 标记的着色器结构的变量中. 如果顶点缓冲区中没有标签的信息,则值字段不明确。所有存在但在 shaderstruct 中没有标签的数据将被忽略。

正确的方法是您正在寻找下一个绘制调用的顶点数据并选择正确的着色器,它需要给定的输入。

于 2012-06-02T10:39:43.070 回答