作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有以下代码:
extern ID3D11Device* dev;
extern ID3D11DeviceContext* devcon;
//shaders
ID3D10Blob *VS, *PS, *error;
HRESULT r;
error = 0;
r = D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "VShader", "vs_5_0", D3DCOMPILE_DEBUG, 0, 0, &VS, &error, 0);
if(FAILED(r))
{
LPCWSTR errmsg = (LPCWSTR)error->GetBufferPointer();
MessageBox(hWnd, errmsg, L"error", MB_OK);
return;
}
error = 0;
r = D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "PShader", "ps_5_0", D3DCOMPILE_DEBUG, 0, 0, &PS, &error, 0);
if(FAILED(r))
{
LPCWSTR errmsg = (LPCWSTR)error->GetBufferPointer();
MessageBox(hWnd, errmsg, L"error", MB_OK);
return;
}
// encapsulate both shaders into shader objects
r = dev->CreateVertexShader(VS->GetBufferPointer(), VS->GetBufferSize(), NULL, &vertexShader);
r = dev->CreatePixelShader(PS->GetBufferPointer(), PS->GetBufferSize(), NULL, &pixelShader);
devcon->VSSetShader(this->vertexShader, 0, 0);
devcon->PSSetShader(this->pixelShader, 0, 0);
运行代码,顶点和像素着色器的 D3DX11CompileFromFile
返回 S_OK
,但是当代码命中 CreateVertexShader()
时,它会抛出一个访问违反,对于我的生活,我无法弄清楚为什么。我可能做了一些相当愚蠢的事情,我就是想不通。
最佳答案
此类错误的最常见原因是 dev
或 VS
为空/未初始化。如果访问冲突发生在 0x00000xxx,那么它就是一个空指针。如果它是 0xCCCCCxxx,则它是一个未初始化的指针(假设您在 Visual Studio 下运行)。此外,在分配接口(interface)指针(例如代码中的 VS 和 PS)之前和释放它们之后(并且指针即将超出范围)将接口(interface)指针(例如代码中的 VS 和 PS)归零是一种很好的做法,因为这可以防止双重在指针上释放并防止指针不触发设置为在指针未正确分配或以某种方式被覆盖时停止的断点。
关于c++ - D3DX11CompileFromFile 返回 S_OK 但 CreateVertexShader 抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17269711/
我正在尝试通过 ID3D11Device::CreateVertexShader() 创建一个顶点着色器对象。参数要求指向着色器字节码的指针和字节码的长度。因此,我有以下结构: struct shad
所以我有以下代码: extern ID3D11Device* dev; extern ID3D11DeviceContext* devcon; //shaders
我是一名优秀的程序员,十分优秀!