Uwp 错误0x80070057,具体取决于包含顶点着色器代码的文件

Uwp 错误0x80070057,具体取决于包含顶点着色器代码的文件,uwp,directx,directx-11,direct3d11,directxtk,Uwp,Directx,Directx 11,Direct3d11,Directxtk,这是我的第一个问题,请原谅我。我目前正在使用像素着色器中的以下着色器代码: struct PixelShaderInput { float4 pos : SV_POSITION; }; float4 main(PixelShaderInput input) : SV_TARGET { return float4(0.1f, 0.1f, 0.1f, 1.0f); } 在顶点着色器中: cbuffer ModelViewProjectionConstantBuffer :

这是我的第一个问题,请原谅我。我目前正在使用像素着色器中的以下着色器代码:

struct PixelShaderInput
{
        float4 pos : SV_POSITION;
};

float4 main(PixelShaderInput input) : SV_TARGET
{
    return float4(0.1f, 0.1f, 0.1f, 1.0f);
}
在顶点着色器中:

cbuffer ModelViewProjectionConstantBuffer : register(b0)
{
    matrix model;
    matrix view;
    matrix projection;
};

struct VertexShaderInput
{
    float3 pos : POSITION;
};

struct PixelShaderInput
{
    float4 pos : SV_POSITION;
};

PixelShaderInput main(VertexShaderInput input)
{
    PixelShaderInput output;
    float4 pos = float4(input.pos, 1.0f);

    pos = mul(pos, model);
    pos = mul(pos, view);
    pos = mul(pos, projection);
    output.pos = pos;

    return output;
}
现在是奇怪的部分。在不支持DirectX11的虚拟机上,如果我将上述着色器代码复制到由项目骨架创建的两个文件中,则此版本的代码可以工作:

void SUS3DApp1Main::SUSCreateDeviceResources()
{
    //auto loadVSTask = DX::ReadDataAsync(L"SUSPixelShader.cso");
    //auto loadPSTask = DX::ReadDataAsync(L"SUSVertexShader.cso");

    // Load shaders asynchronously.
    //this version works
    auto loadVSTask = DX::ReadDataAsync(L"SampleVertexShader.cso");
    auto loadPSTask = DX::ReadDataAsync(L"SamplePixelShader.cso");
而这一条没有:

void SUS3DApp1Main::SUSCreateDeviceResources()
{
    auto loadVSTask = DX::ReadDataAsync(L"SUSPixelShader.cso");
    auto loadPSTask = DX::ReadDataAsync(L"SUSVertexShader.cso");

我在VisualStudio中反复检查了编译设置,但在我看来它们是一样的。有谁知道在创建项目骨架期间创建的“特殊”文件中有什么不同吗?

由于文件名不同,因此问题可能是您没有生成预期的着色器名称。查看HLSL代码的项目设置。你好,chuck,非常感谢您的回复。我使用相同的着色器代码-两个HLSL文件包含相同的代码!当然可以,但它们实际上都是由VisualStudio生成的吗?如果是这样,那么两个CSO文件都应该在布局文件夹中Hello,奇怪的是,是的。它们都被复制到/Debug!此外,通过将SuspexElshader重命名为XSUSPixelShader,我测试了这不是文件加载错误。这将引发的异常更改为0x80070002,因为文件名不同,因此问题可能是您没有生成预期的着色器名称。查看HLSL代码的项目设置。你好,chuck,非常感谢您的回复。我使用相同的着色器代码-两个HLSL文件包含相同的代码!当然可以,但它们实际上都是由VisualStudio生成的吗?如果是这样,那么两个CSO文件都应该在布局文件夹中Hello,奇怪的是,是的。它们都被复制到/Debug!此外,通过将SuspexElshader重命名为XSUSPixelShader,我测试了这不是文件加载错误。这将引发的异常更改为0x80070002