2013-01-03 27 views
2

我有以下代碼:E_INVALIDARG CreatePixelShader()錯誤

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指針。

任何想法?

+0

PShader.cso文件是否包含編譯着色器或源代碼? –

+0

編譯來自fxc.exe的着色器代碼(即時通訊在Windows 8上使用visual studio 2012) – user1944605

+1

哇。我只是將着色器模型從5.0降低到了4.0 ..我認爲我的顯卡能夠使用着色器模型5 ...結束了工作。感謝您帶領我朝着正確的方向前進。哈哈 – user1944605

回答

1

這正是我的問題。我的硬件顯示並報告了對DirectX 11_0的支持,但是使用vs_5_0或ps_5_0的配置文件編譯我的頂點或像素着色器會導致CreateVertexShader()| CreatePixelShader()返回E_INVALIDARG。

一旦我用vs_4_0,ps_4_0的配置文件重新編譯着色器,調用返回S_OK。

相關問題