所以我有以下代碼:D3DX11CompileFromFile返回S_OK但CreateVertexShader拋出錯誤
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'非NULL? –