我最近一直试图进入DirectX编程(使用C ++ / Win32),但我遇到了一些问题。
一位朋友编写了一个非常简单的随机地形生成器,可以使用Perlin Noise,所以我试图抓住他的代码并为它制作一个DirectX 11渲染器,但是我的程序抛出了一个" Microsoft C ++ Exception",当我运行它时_com_error。
更糟糕的是,程序根据构建类型在不同的代码行中断...
在Debug上,程序会破坏这段代码:
// Load the pixel shader
std::ifstream pixelFile("pixel.cso");
if (!pixelFile)
return false;
std::string pixelContents((std::istreambuf_iterator<char>(pixelFile)),
std::istreambuf_iterator<char>());
pixelFile.close();
if (FAILED(mpDevice->CreatePixelShader(pixelContents.c_str(),
pixelContents.size(),
NULL,
&mpPixelShader)))
return false;
发布时间:
// Create and set the input layout
if (FAILED(mpDevice->CreateInputLayout(layoutDescription,
layoutDescriptionSize,
vertexContents.c_str(),
vertexContents.length(),
&mpVertexLayout)))
return false;
mpPixelShader是ID3D11PixelShader *类型的成员,mpVertexLayout是ID3D11InputLayout *类型的成员。
当然,当我看到错误不同时,我想到的第一件事就是检查内存损坏,我确实在运行ApplicationVerifier并设置_crtDbgFlag之后在我朋友的代码中找到了一个,但它是现在修复,我仍然有这个错误...
当渲染初始化函数填充了MSDN Win32 DirectX三角教程中的修改版本时,应用程序运行正常。
答案 0 :(得分:0)
cso文件不是文本,它是二进制文件。 std::string
不起作用,文件将包含0的字节。