因此,我正在处理一些文本处理以使用DirectXTK的文本呈现,我想我可能已经"生气了#34;视觉工作室。在得到一些错误之后,因为我试图让它与数组一起工作超出界限它给了我错误,而且我不知道我是否只是错误地得到了错误,或者我是否错误地尝试继续运行程序错误,但现在我在一个完全不同的类中得到一个错误(我认为相同)。
HRESULT hr;
wchar_t VSFilepath[250] = L"";
wchar_t PSFilepath[250] = L"";
wchar_t SVSFilepath[250] = L"";
wchar_t SPSFilepath[250] = L"";
wcscat_s(VSFilepath, directory);
wcscat_s(VSFilepath, L"\\Shaders\\Player\\PlayerVertexShader.hlsl");
wcscat_s(PSFilepath, directory);
wcscat_s(PSFilepath, L"\\Shaders\\Player\\PlayerPixelShader.hlsl");
//create vertex shader
ID3DBlob* pVS = nullptr;
hr = D3DCompileFromFile(VSFilepath,
nullptr,
D3D_COMPILE_STANDARD_FILE_INCLUDE,
"VS_main",
"vs_5_0",
0,
NULL,
&pVS,
nullptr);
hr = gDevice->CreateVertexShader(pVS->GetBufferPointer(),
pVS->GetBufferSize(),
nullptr,
&playerVertexShader);
//create input layout (verified using vertex shader)
D3D11_INPUT_ELEMENT_DESC inputDesc[] =
{
{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 20, D3D11_INPUT_PER_VERTEX_DATA, 0},
};
hr = gDevice->CreateInputLayout(inputDesc,
ARRAYSIZE(inputDesc),
pVS->GetBufferPointer(),
pVS->GetBufferSize(),
&playerVertexLayout);
pVS->Release();
//create pixel shader
ID3DBlob* pPS = nullptr;
hr = D3DCompileFromFile(PSFilepath,
nullptr,
D3D_COMPILE_STANDARD_FILE_INCLUDE,
"PS_main",
"ps_5_0",
0,
NULL,
&pPS,
nullptr);
hr = gDevice->CreatePixelShader(pPS->GetBufferPointer(),
pPS->GetBufferSize(),
nullptr,
&playerPixelShader);
pPS->Release();
通过逐步完成该计划,我得出以下结论:
在我使用创建着色器函数CreateVertexShader之后,下次我尝试使用D3DCompileFromFile时,程序会停止并且在游戏脚本中的0x772BDBB7处出现"第一次机会异常:0xC0000008:指定了无效句柄"
如果我尝试注释掉CreateVertexShader并不重要,确定它可以创建下一个像素着色器,但下一个D3DCompileFromFile会给我相同的错误,所有hr结果都是S_OK。
问题是他的代码在此之前已经工作了大约一百次并且我没有改变任何与之相关的内容,所以我对发生的事情感到非常困惑。