E_INVALIDARG CreatePixelShader()错误

时间:2013-01-03 07:33:33

标签: c++ windows-8 directx

我有以下代码:

struct shaderData
{
    char *shaderCode;
    UINT size;
};

struct shaderData *CubeApp::GetShaderByteCode(char *compiledShader)
{
    struct shaderData *sData = (struct shaderData *)malloc(sizeof(struct shaderData));

    std::ifstream fin(compiledShader, std::ios::binary);

    fin.seekg(0, std::ios_base::end);
    UINT size = (int)fin.tellg();
    fin.seekg(0, std::ios_base::beg);

    sData->shaderCode = (char *)malloc(size);

    fin.read(sData->shaderCode, size);
    fin.close();

    sData->size = size;

    return sData;
}

void CubeApp::InitShaders()
{
    struct shaderData *sData = GetShaderByteCode("PShader.cso");

    HRESULT hr = m_d3dDevice->CreatePixelShader(sData->shaderCode, sData->size, NULL, &m_d3dPShader);
}

但是这会在调用CreatePixelShader()时返回E_INVALIDARG,而m_d3dPShader是一个NULL指针。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这正是我的问题。我的硬件显示并报告对DirectX 11_0的支持,但是使用vs_5_0或ps_5_0的配置文件编译我的顶点或像素着色器导致CreateVertexShader()| CreatePixelShader()返回E_INVALIDARG。

使用vs_4_0,ps_4_0的配置文件重新编译着色器后,调用返回了S_OK。