我有點難以理解,只是把我困在一邊。比方說,我有一對夫婦的着色器都具有不同的頂點類型是這樣的:direct x 11智能地創建頂點緩衝區
// light shader
struct vertexInputType
{
float4 position : POSITION;
float2 tex : TEXCOORD0;
float3 normal : NORMAL;
};
// color shader
struct vertexInputType
{
float4 position : POSITION;
float4 color : COLOR;
};
// bump mapping shader
struct vertexInputType
{
float4 position : POSITION;
float2 tex : TEXCOORD0;
float3 normal : NORMAL;
float3 binormal : BINORMAL;
float3 tangent : TANGENT;
};
現在比方說,我有所有可用此數據的模型。我無法確切地將它全部放在同一個緩衝區中,並且按照我選擇的全部3進行渲染,因爲數據未針對所有這些數據進行正確佈局。我只看到兩種選擇來實現這一點,他們兩人都同樣痛苦。
1)我可以在RAM中有一個很大的緩衝區來保存所有的數據,然後每次繪製調用時,我從着色器對象,頂點類型中獲取並用正確的信息創建一個新的頂點緩衝區。正如你所看到的,這會很慢。
或...
2)當模型被初始化我可以創建多個ID3D11Buffers,其中一個緩衝器具有的位置和顏色,一個有位置,texcoord,和正常的,一個具有位置,texcoord,正常,binormal和tangent,以及該模型具有信息的任何其他頂點類型所需的緩衝區數量。相比之下,刪除你的可用vram,使其成爲nogo。
我看不到任何其他方式做到這一點。你其他的d3d傢伙如何做到這一點?
是的,到目前爲止,我在爲着色器創建輸入佈局時使用了教程,但現在我很好奇輸入佈局是如何設置的。你是說我可以擁有一個ID3D11Buffer,它包含位置,顏色,法線,紋理等所有數據,然後可以設置佈局來挑選這個着色器的單個元素?我將如何做到這一點?現在我只是定義了第一個輸入desc元素,它的字節對齊成員爲0,其餘的爲D3D11_INPUT_PER_VERTEX_DATA; 。這樣做背後的方法是什麼我想要的? – FatalCatharsis 2012-07-16 16:28:20
表示其餘的設置爲D3D11_APPEND_ALIGNED_ELEMENT。複製粘貼在它下面的一個:P – FatalCatharsis 2012-07-16 16:33:58
哇,現在,我知道它與輸入佈局有關,我只是設法谷歌下[這](http://msdn.microsoft.com/en-us/library /windows/desktop/bb205117(v=vs.85).aspx#Create_the_Input_Layout)文章。有點解釋我需要知道的一切:\。感謝您讓我走上正軌! – FatalCatharsis 2012-07-16 16:51:13