Поэтому я возился с некоторой обработкой текста, связанной с рендерингом текста в DirectXTK, и я думаю, что я, возможно, «разозлил» визуальную студию. После получения некоторых ошибок, потому что я пытался заставить его работать с массивами за пределами, это дало мне ошибки, и я не знаю, просто ли я получал ошибку слишком много раз или я по ошибке пытался продолжить выполнение программы после ошибки но теперь я получаю ошибку (то же самое, что я думаю) в совершенно другом классе.
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 в game.exe: 0xC0000008: указан неверный дескриптор».
Не имеет значения, если я попытаюсь закомментировать CreateVertexShader, уверен, что он может создать следующий пиксельный шейдер, но следующий D3DCompileFromFile выдаст мне ту же ошибку, и все hr-результаты будут S_OK.
Дело в том, что его код работал, вероятно, сто раз до этого, и я ничего не изменил, так что я очень запутался в том, что произошло.
Задача ещё не решена.