D3DCompile E_INVALIDARG

时间:2018-03-29 06:45:15

标签: c++ direct3d

我在这里遇到了D3DCompile的问题。我正在编写一个具有CX \ C ++ Runtime的UWP应用程序。 有一个代码

    const std::string shaderSource =
        "struct PixelShaderInput\n"
        "{\n"
        "    float3 color : COLOR0;\n"
        "};\n\n"
        "float4 main(PixelShaderInput input) : SV_TARGET\n"
        "{\n"
        "    return float4(1.0f, 1.0f, 0.0f, 1.0f);\n"
        "}";


    HRESULT hr = D3DCompile(
        shaderSource.c_str(), 
        shaderSource.length(),
        NULL, 
        NULL, 
        NULL, 
        "main", 
        "ps_5_0", 
        NULL,
        NULL, 
        &pShaderCode, 
        &errorBlob);

结果,我得到了E_INVALIDARG。

有趣的是,如果我在着色器的文本中出错(例如,不要写另一个入口点),那么结果就是特定的编译错误。

可能是什么问题?

2 个答案:

答案 0 :(得分:0)

是的,删除旧的SDK,它可以工作!

答案 1 :(得分:0)

旧版DirectX SDK不应用于UWP应用程序开发。

请参阅MSDN: Where is the DirectX SDK?this blog post

适用于Windows 8.0,Windows 8.1和Windows 10的Windows SDK已包含所有最新的DirectX标头,包括最新版本的D3DCompile(版本#47,而不是旧版DirectX SDK的#43版本)。见HLSL, FXC, and D3DCompile

旧版DirectX SDK的一些部分已弃用,在Windows SDK中不可用,特别是D3DX9,D3DX10和D3DX11。请参阅Living without D3DX

  

实际上,即使是针对Win32桌面开发,您也不需要传统的DirectX SDK,除非您仍然使用Windows XP - 或者 - 如果您需要在Windows 7上使用XAudio2,请参阅The Zombie DirectX SDK