gpt4 book ai didi

c++ - D3DX11CompileFromFile 返回 S_OK 但 CreateVertexShader 抛出错误

转载 作者:行者123 更新时间:2023-11-28 07:33:07 27 4
gpt4 key购买 nike

所以我有以下代码:

    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() 时,它会抛出一个访问违反,对于我的生活,我无法弄清楚为什么。我可能做了一些相当愚蠢的事情,我就是想不通。

最佳答案

此类错误的最常见原因是 devVS 为空/未初始化。如果访问冲突发生在 0x00000xxx,那么它就是一个空指针。如果它是 0xCCCCCxxx,则它是一个未初始化的指针(假设您在 Visual Studio 下运行)。此外,在分配接口(interface)指针(例如代码中的 VS 和 PS)之前和释放它们之后(并且指针即将超出范围)将接口(interface)指针(例如代码中的 VS 和 PS)归零是一种很好的做法,因为这可以防止双重在指针上释放并防止指针不触发设置为在指针未正确分配或以某种方式被覆盖时停止的断点。

关于c++ - D3DX11CompileFromFile 返回 S_OK 但 CreateVertexShader 抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17269711/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com