Antwort schreiben  Thema schreiben 
Translate:
[SOLVED] Tearing SDL

   

Verfasser Nachricht
Littlefighter19
Profi
****


Beiträge: 441
Gruppe: User
Registriert seit: May 2010

Status: Offline
Danke erhalten: 89
Beitrag: #1
xGames  [SOLVED] Tearing SDL

Hi, an alle Entwickler, die hier angemeldet sind.
Ich wollte mal ein wenig was mit SDL anfangen und aus diesem Grund hatte ich mal ein Tutorial für die PSP "geported". Mein Problem ist jetzt nur, das bewegte Objekt unterliegt grauenhaftem Tearing und ich habe keinen Plan wie ich das vermeiden soll (Ich hab bereits einen Frame Limiter, der die Frames auf eine beliebige FPS Anzahl beschränkt.)
Wüsste da vllt. jemand eine Lösung? (Ich verwende kein OpenGl, btw.)
Danke, schon mal im Vorraus.


Verlorene PSP 2000 R.I.P Hoffentlich hat sie einen würdigen Besitzer gefunden.
Spoiler: (anzeigen)
PCs are machines which never move but are always crashing

Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2012 15:10 von Littlefighter19.

14.12.2012 20:50
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
vista200
Head of Awesomeness
***


Beiträge: 189
Gruppe: User
Registriert seit: Jul 2009

Status: Offline
Danke erhalten: 139
Beitrag: #2
RE: Tearing SDL

Ich schätze mal, dass Du bei der Portierung

Code:
sceDisplayWaitVBlankScreen();


als letzte Methode in Deiner Render-Funktion oder Render-Loop vergessen hast. Diese Methode limitiert die FPS-Zahl auf 60 und zwingt das Programm erst dann zu zeichnen, wenn das Bild wieder am oberen Bildschirmrand aufgebaut wird.

Falls Du das schon gemacht hast, dann könnte etwas Quelltext hilfreich sein Wink


15.12.2012 09:43
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
Littlefighter19 (Dec-15-2012)
Littlefighter19
Profi
****


Beiträge: 441
Gruppe: User
Registriert seit: May 2010

Status: Offline
Danke erhalten: 89
Beitrag: #3
xGames  RE: Tearing SDL

Danke für die Antwort.
Nein, ich habe diese Funktion noch nicht hinzugefügt. Ich schätze mal, du meintest die Funktion sceDisplayWaitVblank(); ?
EDIT: Ich hab die Funktion wie beschrieben hinzugefügt und jetzt befindet sich das Tearing permanent an der Hälfte vom Bild o.O Das heißt die OBERE Hälfte hinkt nach.... ich dachte der Bildaufbau erfolgt von oben nach unten? :/
EDIT2: Ich glaub ich darf den Source Code nicht erneut "veröffentlichen" weil:

Code:
/*This source code copyrighted by Lazy Foo' Productions (2004-2012)
and may not be redistributed without written permission.*/

EDIT3: Da ich nicht viel verändert habe, werde ich einfach den Link dazu posten ^^:
http://lazyfoo.net/SDL_tutorials/lesson20/index.php
EDIT4: Ich bin doch so bescheuert xD. Ich dachte ich hätte es vor dem Flippen des Bildschirms eingefügt. Nachdem ich es mir nochmal überprüft habe und mir aufgefallen ist, dass ich es vor dem Limitieren eingefügt habe, hat es funktioniert.
Vielen Dank!


Verlorene PSP 2000 R.I.P Hoffentlich hat sie einen würdigen Besitzer gefunden.
Spoiler: (anzeigen)
PCs are machines which never move but are always crashing

Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2012 15:25 von Littlefighter19.

15.12.2012 14:50
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
vista200
Head of Awesomeness
***


Beiträge: 189
Gruppe: User
Registriert seit: Jul 2009

Status: Offline
Danke erhalten: 139
Beitrag: #4
xGames  RE: Tearing SDL

Littlefighter19 :
EDIT4: Ich bin doch so bescheuert xD. Ich dachte ich hätte es vor dem Flippen des Bildschirms eingefügt. Nachdem ich es mir nochmal überprüft habe und mir aufgefallen ist, dass ich es vor dem Limitieren eingefügt habe, hat es funktioniert.
Vielen Dank!


Vor dem Limitieren? Oder vor dem Flippen?

Du musst die Framerate nicht mehr mit einer eigenen Funktion beschränken!
Das ist überflüssig, weil sceDisplayWaitVBlankStart() selbst die Framerate schon auf 60 FPS limitiert. Es kommt niemals mehr raus als 60.

sceDisplayWaitVBlank() wartet übrigens so lange, bis der Frame fertig gezeichnet wurde, sceDisplayWaitVBlankStart() eben so lange, bis der Framebuffer wieder bereit ist, einen neuen Frame zu zeichnen.
Das ist gut zu wissen, ich weiß zwar nicht, wofür, aber...
In meinen Projekten habe ich immer die Start-Variante verwendet. Du willst den Frame ja zeichnen, sobald es geht und nicht, wenn der letzte noch gerade so fertig gezeichnet wurde. Intern rattert die GPU nämlich noch ein bisschen weiter und setzt Pointer um etc...

Freut mich, wenn ich helfen konnte Smile

Viel Erfolg mit Deinen weiteren Projekten!


16.12.2012 00:16
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
Littlefighter19 (Dec-16-2012)
Littlefighter19
Profi
****


Beiträge: 441
Gruppe: User
Registriert seit: May 2010

Status: Offline
Danke erhalten: 89
Beitrag: #5
xGames  RE: Tearing SDL

wurzelbums :
Vor dem Limitieren? Oder vor dem Flippen?


Vor dem Flippen hat es hingehört, ist ja logisch (Es wartet jetzt ja, bis der FB wieder bereit ist Wink und erst danach soll das Bild angezeigt werden), hatte es nur aus Versehen vor dem Limitieren nach dem Flippen aufgerufen.

wurzelbums :
Du musst die Framerate nicht mehr mit einer eigenen Funktion beschränken!
Das ist überflüssig, weil sceDisplayWaitVBlankStart() selbst die Framerate schon auf 60 FPS limitiert. Es kommt niemals mehr raus als 60.

Dann werd ich das mal per define raushauen (für die PSP), sollte die Binary wesentlich schlanker machen Big Grin.

wurzelbums :
sceDisplayWaitVBlank() wartet übrigens so lange, bis der Frame fertig gezeichnet wurde, sceDisplayWaitVBlankStart() eben so lange, bis der Framebuffer wieder bereit ist, einen neuen Frame zu zeichnen.
Das ist gut zu wissen, ich weiß zwar nicht, wofür, aber...
In meinen Projekten habe ich immer die Start-Variante verwendet. Du willst den Frame ja zeichnen, sobald es geht und nicht, wenn der letzte noch gerade so fertig gezeichnet wurde. Intern rattert die GPU nämlich noch ein bisschen weiter und setzt Pointer um etc...


wurzelbums :
Freut mich, wenn ich helfen konnte Smile

Viel Erfolg mit Deinen weiteren Projekten!

Vielen Dank nochmals Smile


Verlorene PSP 2000 R.I.P Hoffentlich hat sie einen würdigen Besitzer gefunden.
Spoiler: (anzeigen)
PCs are machines which never move but are always crashing

16.12.2012 12:07
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Antwort schreiben  Thema schreiben 

Druckversion anzeigen
Thema einem Freund senden
Thema abonnieren | Thema zu den Favoriten hinzufügen




» zum Seitenanfang