2012-04-19 81 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,並選擇正確的着色器,它需要給定的輸入。