创建着色器时出现奇怪的D3D11错误[SharpDX / MONOGAME]

时间:2015-03-17 03:14:16

标签: direct3d monogame vertex-shader sharpdx pixel-shader

我是着色器编程的真正初学者,我使用的是monogame框架。我试图按照本书中的例子进行操作

  

使用xna game studio 4.0打包3d图形

但在过去的4天里,我一直试图让预制渲染器工作(第3章,如果你们中的一些人知道这本书) https://www.packtpub.com/books/content/advanced-lighting-3d-graphics-xna-game-studio-40

  1. 代码编译正常,但是应用了le prelighting着色器的任何网格都无法显示 2.在VS2013当地人中钻取着色器时,我发现了这种异常

  2. VertexShader' this.depthNormalEffect._shaders [0] .VertexShader'扔 类型的例外 ' System.Runtime.InteropServices.SEHException' SharpDX.Direct3D11.VertexShader  {System.Runtime.InteropServices.SEHException}

    使用DX本机调试器转换为

    D3D11错误:ID3D11Device :: CreateVertexShader:着色器必须是vs_4_0,vs_4_1或vs_5_0。提供的着色器版本:ps_4_0 [STATE_CREATION错误#167:CREATEVERTEXSHADER_INVALIDSHADERTYPE] D3D11: BREAK 为上一条消息启用,即:[ERROR STATE_CREATION#167:CREATEVERTEXSHADER_INVALIDSHADERTYPE] 3dTest.exe中0x75FAC41F(KernelBase.dll)的第一次机会异常:0x0000087A(参数:0x00000001,0x003DB5D0,0x003DC328)。 D3D11错误:ID3D11Device :: CreatePixelShader:着色器必须是ps_4_0,ps_4_1或ps_5_0。提供的着色器版本:vs_4_0 [STATE_CREATION错误#193:CREATEPIXELSHADER_INVALIDSHADERTYPE] D3D11: BREAK 为上一条消息启用,即:[ERROR STATE_CREATION#193:CREATEPIXELSHADER_INVALIDSHADERTYPE]

    令人困惑的事情(对我来说)库似乎将错误的编译着色器函数链接到顶点或像素着色器

      

    D3D11错误:ID3D11Device :: CreatePixelShader:着色器必须是ps_4_0,   ps_4_1或ps_5_0。提供的着色器版本:vs_4_0 [STATE_CREATION   ERROR#193:CREATEPIXELSHADER_INVALIDSHADERTYPE]


    这里有一些着色器代码(效果跨越三个着色器,其中2个渲染用于渲染目标,因此第三个可用于最终传递)

    float4x4 World;
    float4x4 View;
    float4x4 Projection;
    
    struct VertexShaderInput
    {
        float4 Position : SV_POSITION;
        float3 Normal : NORMAL0;
    };
    
    struct VertexShaderOutput
    {
        float4 Position : SV_POSITION;
        float2 Depth : TEXCOORD0;
        float3 Normal : TEXCOORD1;
    };
    
    VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
    {
        VertexShaderOutput output;
        float4x4 viewProjection = mul(View, Projection);
            float4x4 worldViewProjection = mul(World, viewProjection);
    
            output.Position = mul(input.Position, worldViewProjection);
            output.Normal = mul(input.Normal, World);
    
            //les composante z et w de Position correspondent a la distance % camera et % plan lointain
            output.Depth.xy = output.Position.zw;
    
            return output;
    }
    
    struct PixelShaderOutput
    {
        float4 Normal : COLOR0;
        float4 Depth : COLOR1;
    };
    
    PixelShaderOutput PixelShaderFunction(VertexShaderOutput input)
    {
        PixelShaderOutput output;
    
        output.Depth = input.Depth.x / input.Depth.y;
        output.Normal.xyz = (normalize(input.Normal).xyz/ 2) + .5;
    
        output.Depth.a = 1;
        output.Normal.a = 1;
        return output;
    }
    
    technique Technique0
    {
        pass Pass0
        {
            VertexShader = compile vs_4_0 VertexShaderFunction();
            PixelShader = compile ps_4_0 PixelShaderFunction();
        }
    };
    

    好吧,谷歌上的搜索让我在这个问题上干了,这让我觉得我在做一些绝对愚蠢的事情并没有意识到这一点(着色器n00b记得:D)。

    任何想法??

0 个答案:

没有答案