2017-01-02 1 views
0

Ich schreibe ein Programm auf Basis SDL2, für Raspberry Pi 3 und einen 3,5" Waveshare SPI LCD verwenden. Es ist langsam, weil die SPI-Schnittstelle parallel.Wie wird nur ein Teil des Fensters in SDL aktualisiert?

In meinem Programm, das ich Linie zeichnen, Text & tut andere grafische Mitarbeiter , dann rufe ich SDL_RenderPresent Bildschirm zu aktualisieren. Diese Funktion ist ziemlich langsam.

In meiner Anwendung nur ein wenig Teil des Fensters geändert wird, jedes Mal. ich finde eine Lösung, die nur kleinen Teil des Fensters zu aktualisieren in DirectFB anstelle der gesamten Anzeige, und das Ergebnis ist genial.Wie kann ich nur ein bestimmtes Rechteck in SDL aktualisieren?

Antwort

0

SDL_RenderPresent könnte "langsam" sein, da es vertikale Synchronisation durchführt.

Von wiki.libsdl.org:

Wenn Sie auf der ganzen Renderer Idee stecken von 1,2 Oberflächen und Blitten kommen, denken Sie an den Renderer als Hauptoberfläche und SDL_RenderCopy() als blit Funktion mit dieser Hauptoberfläche, mit SDL_RenderPresent() als die alte SDL_Flip() - Funktion.

Und von wiki.libsdl.org/MigrationGuide:

SDL_Surface/2D-Rendering: Oberflächen bestehen nach wie vor, aber es wird empfohlen, anstelle SDL_Surfaces zu verwenden, Sie SDL_Textures mit einer 2D-beschleunigten Renderer (SDL_CreateRenderer()), wenn möglich.

Also, wenn Sie stattdessen auf eine Textur machen, dann können Sie verwenden SDL_RenderCopy (die einen Clippingrechteck nehmen) Teile der Textur zu Ihrem Haupt-SDL_Renderer zu kopieren.

Wenn Sie mit dem Rendern fertig sind, verwenden Sie , um es auf dem Display anzuzeigen/anzuzeigen. Dies könnte - abhängig vom Backend - nur auf vsync warten und dann einen Pufferaustausch durchführen.

Haftungsausschluss: Ich habe nie das DirectFB Backend mit SDL2 verwendet; nur die OpenGL eins.

+0

ist keine Lösung, um nur einen Teil des Bildschirms in SDL zu aktualisieren? – SAP

+0

@SAP Ja, indem Sie in 'SDL_Textures' rendern und dann' SDL_RenderCopy' verwenden, um auszuwählen, welcher Teil aktualisiert werden soll (mit dem Argument 'dstrect'). –

+0

Es gibt 'SDL_RenderDrawLine', wo das erste Argument _renderer_ bearbeitet wird. Wie zeichne ich die Linie direkt auf die Textur? – SAP

Verwandte Themen