D3DImage и SharpDX мерцают на медленном оборудовании

Я использую проект SharpDX.WPF для возможностей WPF, кажется, что это простая для понимания библиотека с низкими издержками по сравнению с набором инструментов, который поставляется с SharpDX (который имеет ту же проблему!)

Во-первых: я исправил проект SharpDX.WPF для последней версии SharpDX, используя следующее:https://stackoverflow.com/a/19791534/442833

Затем я сделал следующую хакерскую настройку DXElement.cs, решение, которое также было сделаноВот:

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.

Изображения для демонстрации вопроса:

ПлохойЛучшеПочтиПредназначена

Примечание: он случайным образом переключается между этими старыми изображениями. Я также использую действительно старое оборудование, которое делает мерцание намного более привлекательным (GeForce Quadro FX 1700)

Сделал репозиторий, который содержит точно такой же исходный код, который я использую, чтобы получить эту проблему:https://github.com/ManIkWeet/FlickeringIssue/

Ответы на вопрос(3)

Ваш ответ на вопрос