在以下代码行中,我遇到了一个非常烦人的问题:
try{
mSwapChain.Present(0, PresentFlags.None); //AccessViolationException, caught by debugger
}catch(Exception Ex){
throw Ex; //Debugstop here, but not reached
}
//DeviceContext: SharpDX.Direct3D11.DeviceContext
//mVertexBinding: SharpDX.Direct3D11.VertexBufferBinding
DeviceContext.InputAssembler.SetVertexBuffers(0, mVertexBinding);
DeviceContext.Draw(mNumVertices, 0);
我的程序运行一个引发事件的计时器,如果它被引发并且我此时没有渲染,则程序会强制执行渲染调用。同时运行另一个计时器 + 鼠标事件,更新矩阵、顶点、缓冲区和其他东西 - 但在渲染时,所有这些更新功能都被锁定 - 但只有在DeviceContext.Draw(mNumVertices, 0);
达到之前,同步对象才会解锁。
我现在的问题 - 如果在和VertexBufferBinding
之间更改,是否会引发访问冲突?还是抄袭?而且,第二个 - 为什么我不能捕捉到这种访问冲突?它总是一个“未处理的异常”。Draw(..)
SwapChain.Present(..)
编辑:奇怪的是,访问冲突只出现在我的工作笔记本(Core i5、Intel HD 3000 和 Radeon 6490M)上,而不出现在我的家用笔记本电脑(Core i7、Intel HD 3000 和 NVidia GeForce 540M)上。