У меня очень неприятная проблема со следующими строками кода:
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).