Я использую проект SharpDX.WPF для возможностей WPF, кажется, что это легко понять низкоуровневую библиотеку по сравнению с Toolkit, который поставляется с SharpDX (который имеет такую же проблему!)D3DImage и SharpDX мерцают на медленных аппаратных средствах
Во-первых: я установил проект SharpDX.WPF для последних SharpDX используя следующее: https://stackoverflow.com/a/19791534/442833
Тогда я сделал следующее Hacky корректировку DXElement.cs, решение, которое было также сделано here:
private Query queryForCompletion;
public void Render()
{
if (Renderer == null || IsInDesignMode)
return;
var test = Renderer as D3D11;
if (queryForCompletion == null)
{
queryForCompletion = new Query(test.Device,
new QueryDescription {Type = QueryType.Event, Flags = QueryFlags.None});
}
Renderer.Render(GetDrawEventArgs());
Surface.Lock();
test.Device.ImmediateContext.End(queryForCompletion);
// wait until drawing completes
Bool completed;
var counter = 0;
while (!(test.Device.ImmediateContext.GetData(queryForCompletion, out completed)
&& completed))
{
Console.WriteLine("Yielding..." + ++counter);
Thread.Yield();
}
//Surface.Invalidate();
Surface.AddDirtyRect(new Int32Rect(0, 0, Surface.PixelWidth, Surface.PixelHeight));
Surface.Unlock();
}
Тогда я сделать 8000 кубов в шаблон куба ...
Уступая ...
получает распечатанные на консоль довольно часто, но мерцающий все еще там. Я предполагаю, что WPF достаточно хорош, чтобы показать изображение, используя другой поток, прежде чем сделать рендеринг, но не уверен, хотя ... Эта же проблема также возникает, когда я использую вариант Toolkit поддержки WPF с помощью SharpDX.
Изображения на вопрос продемонстрировать режим:
Примечание: Это случайно переключается между этими старыми изображениями, случайным образом. Я также использую очень старое оборудование, которое делает мерцающий гораздо больше appearant (GeForce Quadro FX 1700)
выполненного репо, который содержит тот же исходный код, я использую, чтобы получить этот вопрос: https://github.com/ManIkWeet/FlickeringIssue/
Проблема заключается D3DImage синхронизации DirectX, вы не только один с этой проблемой. См. Этот conv с создателем SharpDX: https://twitter.com/xoofx/status/544974189430448128 Я ищу решение самостоятельно ... :( –