D3DImage und SharpDX flackern auf langsamer Hardware

Ich verwende das SharpDX.WPF-Projekt für die WPF-Funktionen. Im Vergleich zu dem Toolkit, das mit SharpDX geliefert wird (das das gleiche Problem hat!), Scheint es eine einfach zu verstehende Bibliothek mit geringem Overhead zu sein.

First: Ich habe das SharpDX.WPF-Projekt für das neueste SharpDX folgendermaßen repariert:https: //stackoverflow.com/a/19791534/44283

Dann habe ich die folgende hackige Anpassung an DXElement.cs vorgenommen, eine Lösung, die auch durchgeführt wurdeHie:

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();
    }

Dann rendere ich 8000 Würfel in einem Würfelmuster ...

Ergeben ...

gets werden ziemlich oft auf der Konsole ausgegeben, aber das Flackern ist immer noch da. Ich gehe davon aus, dass WPF gut genug ist, um das Bild vor dem Rendern in einem anderen Thread anzuzeigen. Ich bin mir jedoch nicht sicher ... Dasselbe Problem tritt auch auf, wenn ich die Toolkit-Variante der WPF-Unterstützung mit SharpDX verwende.

Bilder zur Demonstration des Problems:

SchlechBesseFasBeabsichtig

Hinweis: Es wird zufällig zwischen diesen alten Bildern gewechselt. Ich verwende auch wirklich alte Hardware, die das Flackern viel stärker erscheinen lässt (GeForce Quadro FX 1700)

A hat ein Repo erstellt, das genau den Quellcode enthält, mit dem ich dieses Problem behoben habe:https: //github.com/ManIkWeet/FlickeringIssue

Antworten auf die Frage(6)

Ihre Antwort auf die Frage