次のコード行で非常に厄介な問題が発生します。
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);
私のプログラムはイベントを発生させるタイマーを実行します。イベントが発生し、この時点でレンダリングしていない場合、プログラムはrendercallを強制します。別のタイマーとマウスイベントを同時に実行し、行列、頂点、バッファなどを更新しますが、レンダリング中は、これらの更新関数はすべてロックされますがDeviceContext.Draw(mNumVertices, 0);
、到達するまでは、同期オブジェクトのロックが解除されます。
VertexBufferBinding
今の私の質問-との間で変更された場合、アクセス違反が発生する可能性がDraw(..)
ありSwapChain.Present(..)
ますか?それともコピーされますか?そして、2番目の1つ-なぜこのアクセス違反をキャッチできないのですか?これは常に「未処理の例外」です。
編集:奇妙なことに、アクセス違反は私のWork Notebook(Core i5、Intel HD 3000、Radeon 6490M)にのみ表示され、自宅のラップトップ(Core i7、Intel HD 3000、NVidia GeForce 540M)には表示されません。