2015-09-16 68 views
0

我試圖繪製應用了着色器全屏四,但繪圖時我不斷收到以下錯誤:在準備提請發生Monogame 3.4 - 效果投擲「InvalidOperationException:準備繪製時發生錯誤。」

錯誤。這可能是因爲當前頂點聲明不包含當前頂點着色器所需的所有元素。當前的頂點聲明包含這些元素:SV_Position0,TEXCOORD0。

這是我宣佈我的verticies爲四:

_vertices = new VertexPositionTexture[4]; 
_vertices[0] = new VertexPositionTexture(new Vector3(-1, 1, 0), new Vector2(0, 0)); 
_vertices[1] = new VertexPositionTexture(new Vector3(1, 1, 0), new Vector2(1, 0)); 
_vertices[2] = new VertexPositionTexture(new Vector3(-1, -1, 0), new Vector2(0, 1)); 
_vertices[3] = new VertexPositionTexture(new Vector3(1, -1, 0), new Vector2(1, 1)); 

這就是我如何繪製四(與聯合國需要的東西省略了)

foreach (var pass in _lightEffect1.CurrentTechnique.Passes) 
{ 
    pass.Apply(); 
    GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleStrip, _vertices, 0, 2, VertexPositionTexture.VertexDeclaration); 
} 

這裏是適用於四邊形的着色器

// Vertex shader input structure 
struct VertexShaderInput 
{ 
    float4 Pos : SV_Position; 
    float2 TexCoord : TEXCOORD0; 
}; 

// Vertex shader output structure 
struct VertexShaderOutput 
{ 
    float4 Pos : SV_Position; 
    float2 TexCoord : TEXCOORD0; 
}; 

VertexShaderOutput VertexToPixelShader(VertexShaderInput input) 
{ 
    VertexShaderOutput output; 

    output.Pos = input.Pos; 
    output.TexCoord = input.TexCoord; 

    return output; 
} 

float4 PointLightShader(VertexShaderOutput PSIn) : COLOR0 
{ 
    //Pixel shader code here.... 
    return float4(shading.r, shading.g, shading.b, 1.0f); 
} 

technique DeferredPointLight 
{ 
    pass Pass1 
    { 
     VertexShader = compile vs_4_0_level_9_1 VertexToPixelShader(); 
     PixelShader = compile ps_4_0_level_9_1 PointLightShader(); 
    } 
} 

我注意到的一件事是,MonoGame提供的VertexPositionTexture中的定義是vec3的位置和texcords的vec2。然而在着色器中它是一個float4的位置和一個float2的texcoords。

我試着將它改爲float3,但着色器不能編譯。於是我試着創建自己的「VertexPositionTexture」結構,它有我自己定義的vec4,但我最終得到了同樣的錯誤。

我並不是那麼擅長DirectX,而且我嘗試過遍尋谷歌,但我找不到任何可能導致問題的原因。

我在着色器中做錯了什麼?我錯過了什麼嗎?

回答

0

事實證明,這是一個非常愚蠢的修復。

內容管道工具沒有編制,我以爲它會轉換後的.fx文件,我做了一個修復(改變POSITIONSV_POSITION)沒有實際使用...

着色器現在工作,現在它實際上使用了正確的着色器