2

次のコードがあります。

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 ポインターです。

何か案は?

4

1 に答える 1

1

これはまさに私の問題でした。私のハードウェアは DirectX 11_0 のサポートを示し、レポートしますが、vs_5_0 または ps_5_0 のプロファイルを使用して頂点シェーダーまたはピクセル シェーダーをコンパイルすると、CreateVertexShader() | CreatePixelShader() は E_INVALIDARG を返します。

vs_4_0、ps_4_0 のプロファイルでシェーダーを再コンパイルすると、呼び出しは S_OK を返しました。

于 2017-01-21T09:00:00.393 に答える