C++ E_INVALIDARG CreatePixelShader()错误
我有以下代码:C++ E_INVALIDARG CreatePixelShader()错误,c++,windows-8,directx,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(c
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是一个空指针
有什么想法吗?这正是我的问题。我的硬件显示并报告对DirectX 11_0的支持,但是使用vs_5_0或ps_5_0的配置文件编译我的顶点或像素着色器会导致CreateVertexShader()| CreatePixelShader()返回E_INVALIDARG
一旦我用vs_4_0、ps_4_0的配置文件重新编译着色器,调用返回S_OK。PShader.cso文件是否包含编译的着色器或源代码?从fxc.exe编译的着色器代码(我在windows 8上使用visual studio 2012)哇。我刚刚将着色器模型从5.0降低到4.0。。我以为我的显卡可以使用shader model 5。。。最后工作了。谢谢你给我指引了正确的方向。哈方向完全正确:)顺便说一句,DirectX调试模式在这种情况下很有帮助:嗯。。这很奇怪,我使用shader model 4.0编译,CreatePixelShader()可以工作。。。但我知道我的图形卡(GeForce GT 440)支持DirectX 11。。这意味着我有着色器模型5.0。