我正在玩DirectX,我已经到了必须在其他方面玩着色器的地步。因为D3DX不再存在(:P)我必须使用D3DCompile来编译着色器。我用这段代码:
D3DCompile(//Vertex Shader
L"shaders.hlsl",//Pointer to shader data
sizeof(L"shaders.hlsl"),//Shader size
NULL,//OPTIONAL, name used in error msgs
NULL,//OPTIONAL, An array of NULL-terminated macro definitions(wut?)
D3D_COMPILE_STANDARD_FILE_INCLUDE,//OPTIONAL, DONT PASS NULL, pass D3D_COMPILE_STANDARD_FILE_INCLUDE which is the defualt
"VShader",//Name of shaders starting function
"vs_5_0",//Shader target, vs_5_0 for vertex shader and ps_5_0 for pixel shader
NULL,//Shader compile options --> http://msdn.microsoft.com/en-us/library/windows/apps/gg615083(v=vs.85).aspx, set to NULL
0,//Shader effect compile options --> http://msdn.microsoft.com/en-us/library/windows/apps/gg615084(v=vs.85).aspx, set to 0
&VS,//Pointer to var that will hold shader
NULL//OPTIONAL, Pointer to var that holds error messages
);
正如您所见,我指向VS
将输出已编译的代码。然后我使用此代码将着色器封装在着色器对象中:
m_pDevice->CreatePixelShader(VS->GetBufferPointer(), VS->GetBufferSize(), NULL, &pVS);
VS
初始化为ID3D10Blob *VS
,pVS
初始化为ID3D11VertexShader *pVS
当我运行它时(其余代码与之关联)我得到Unhandled expression
Unhandled exception at 0x009188FC in Hello_DirectX11.exe: 0xC0000005: Access violation reading location 0x00000000.
当我突破时,当我将着色器封装在着色器对象中时,它会破坏上面的代码。
我该如何解决这个/什么是错的?
还有什么好方法可以用VS 2013来调试这种东西吗?