我有一個着色器不再繪製正確。它在XNA中工作,但必須重寫DX11和SharpDX,現在使用着色器模型5.沒有例外,着色器效果編譯得很好,沒有來自設備的調試層消息,除了無關的(?)默認採樣器 - 狀態投訴。這是一個普通的,全屏幕的四邊形做最簡單的紋理blit。 (使用用於測試的隨機噪聲紋理)SharpDX D3D11 VertexElement格式不匹配?
我饋送頂點着色器一個VertexPositionTexutre
,其中包含一個SharpDX對象:
[VertexElement("SV_Position")]
public Vector3 Position;
[VertexElement("TEXCOORD0")]
public Vector2 TextureCoordinate;
我懷疑有簽名之間的失配。 VertexPositionTexture
有一個爲「SV_Position」定義的Vector3
位置組件。
D3D11 defines「SV_Position」作爲float4
。它是一個帶有具體本地類型的系統值常量。我擔心着色器會在Vector3
的float3結束之後吃額外的浮點數。這也可以解釋爲什麼我的UV在幾個頂點被破壞。
這是我的頂點着色器:
struct V2P
{
float4 vPosition : SV_Position;
float2 vTexcoord : TEXCOORD0;
};
V2P VSCopy(float4 InPos : SV_Position,
float2 InTex : TEXCOORD0)
{
V2P Out = (V2P)0;
// transform the position to the screen
Out.vPosition = float4(InPos);
Out.vTexcoord = InTex;
return Out;
}
我曾嘗試的VSCopy()
輸入從float4
在結果沒有變化而變化,以float3
。在重新編譯SharpDX VertexPositionTexture
之後,我看不出如何解決這個問題,但SharpDX完全支持DirectX11,所以我必須做一些不正確的事情。
我定義我的頂點,並且將它們設置如下:
//using SharpDX.Toolkit.Graphics
[...]//In the initialization
verts = new VertexPositionTexture[]
{
new VertexPositionTexture(
new Vector3(1.0f,-1.0f,0),
new Vector2(1,1)),
new VertexPositionTexture(
new Vector3(-1.0f,-1.0f,0),
new Vector2(0,1)),
new VertexPositionTexture(
new Vector3(-1.0f,1.0f,0),
new Vector2(0,0)),
new VertexPositionTexture(
new Vector3(1.0f,1.0f,0),
new Vector2(1,0))
}
//vb is a Buffer<VertexPositionTexture>
short[] indeces = new short[] { 0, 1, 2, 2, 3, 0 };
vb = SharpDX.Toolkit.Graphics.Buffer.Vertex.New(Game.Instance.GraphicsDevice, verts, SharpDX.Direct3D11.ResourceUsage.Dynamic);
ib = SharpDX.Toolkit.Graphics.Buffer.Index.New(Game.Instance.GraphicsDevice, indeces, dx11.ResourceUsage.Dynamic);
[...] //In the Render method, called every frame to draw the quad
Game.Instance.GraphicsDevice.SetVertexBuffer<VertexPositionTexture>(vb, 0);
Game.Instance.GraphicsDevice.SetIndexBuffer(ib, false);
Game.Instance.GraphicsDevice.DrawIndexed(PrimitiveType.TriangleList, 6);
你是如何創建頂點緩衝區和輸入佈局的? – megadan 2014-09-29 20:38:44
我已經更新瞭如何設置頂點和索引緩衝區的問題 – selkathguy 2014-09-29 22:27:16
您是否正在創建'VertexInputLayout'並調用'SetVertexInputLayout'? – megadan 2014-09-29 22:49:19