我在下面的代码行有一个很烦人的问题:访问冲突在SwapChain.Present
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(..)
之间变化,是否可以提高访问冲突?还是被复制? 而且,secound之一 - 为什么我不能捕获此访问冲突?它总是一个“未处理的异常”。
编辑:奇怪的是,该访问冲突只出现在我的工作笔记本电脑(酷睿i5,英特尔HD 3000 &的Radeon 6490M),但不是我的家用笔记本电脑(酷睿i7,英特尔HD 3000 &的NVIDIA GeForce 540M)。
望着SwapChain.Present的文档:http://msdn.microsoft.com/en-us/library/windows/desktop/bb153037(v=vs.85).aspx它看起来像这个功能并不会抛出一个AccessViolationException,所以问题来自我假设的其他地方。 –
什么是访问冲突的调用堆栈? – jeroenh
赫姆..你是对的。我已经搜查在sharpdx代码,但我认为它的自动生成的功能..我没有得到调用堆栈上的任何信息,因为它是“外部代码” .. 。更多的测试表明我来说,这大多出现访问冲突,如果相机/对象的矩阵,经常会.. – lunatix