V-Sync: Unterschied zwischen den Versionen
(Layout verändert) |
(→V-Sync aktivieren: Fehler bei glXSwapIntervalEXT behoben) |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Bildwunsch|Ein Beispielbild mit Tearing}} | {{Bildwunsch|Ein Beispielbild mit Tearing}} | ||
− | '''V-Sync''' (auch '''vertikale Synchronisation''') ist eine Technik, die mit dem Tauschen von Back- und Frontbuffer wartet, bis die Grafikkarte vom Monitor ein Signal bekommt, dass dieser mit dem Auslesen des Frontbuffers fertig ist.<br><br> | + | '''V-Sync''' (auch '''vertikale Synchronisation''') ist eine Technik, die mit dem Tauschen von [[Doppelpufferung|Back- und Frontbuffer]] wartet, bis die Grafikkarte vom Monitor ein Signal bekommt, dass dieser mit dem Auslesen des Frontbuffers fertig ist.<br><br> |
==Tearing== | ==Tearing== | ||
Tearing ist ein unerwünschter Effekt, der auftreten kann, wenn V-Sync nicht aktiviert ist. Er entsteht dadurch, dass der Inhalt des Backbuffers in den Frontbuffer geschrieben wird, während letzterer noch an den Bildschirm übertragen wird. Die Bilddaten des Frontbuffers werden in der Regel von oben nach unten an den Monitor übertragen. Wird der Frontbuffer während dieses Vorgangs aktualisiert, so zeigt der Bildschirm in der oberen Hälfte noch das alte Bild, während der untere Teil schon das neue Bild anzeigt. Gerade bei schnellen Kameraschwenks kann das Bild dadurch "zerrissen" aussehen.<br><br> | Tearing ist ein unerwünschter Effekt, der auftreten kann, wenn V-Sync nicht aktiviert ist. Er entsteht dadurch, dass der Inhalt des Backbuffers in den Frontbuffer geschrieben wird, während letzterer noch an den Bildschirm übertragen wird. Die Bilddaten des Frontbuffers werden in der Regel von oben nach unten an den Monitor übertragen. Wird der Frontbuffer während dieses Vorgangs aktualisiert, so zeigt der Bildschirm in der oberen Hälfte noch das alte Bild, während der untere Teil schon das neue Bild anzeigt. Gerade bei schnellen Kameraschwenks kann das Bild dadurch "zerrissen" aussehen.<br><br> | ||
Zeile 10: | Zeile 10: | ||
// Linux | // Linux | ||
− | glXSwapIntervalEXT(1); // aktivieren | + | glXSwapIntervalEXT(dpy, glXGetCurrentDrawable(), 1); // aktivieren |
− | glXSwapIntervalEXT(0); // deaktivieren</source> | + | glXSwapIntervalEXT(dpy, glXGetCurrentDrawable(), 0); // deaktivieren</source> |
Dazu sind die Extensions '''WGL_EXT_swap_control''' bzw. '''GLX_EXT_swap_control''' notwendig.<br><br> | Dazu sind die Extensions '''WGL_EXT_swap_control''' bzw. '''GLX_EXT_swap_control''' notwendig.<br><br> | ||
Wer SDL einsetzt, kann V-Sync auch anders aktivieren. Dazu wird [[SDL_GL_SetAttribute]] mit dem Argument '''SDL_GL_SWAP_CONTROL''' aufgerufen: | Wer SDL einsetzt, kann V-Sync auch anders aktivieren. Dazu wird [[SDL_GL_SetAttribute]] mit dem Argument '''SDL_GL_SWAP_CONTROL''' aufgerufen: | ||
Zeile 17: | Zeile 17: | ||
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 0); // deaktivieren</source> | SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 0); // deaktivieren</source> | ||
Wichtig ist, dass dieser Aufruf geschieht, bevor [[SDL_SetVideoMode]] aufgerufen wird.<br><br> | Wichtig ist, dass dieser Aufruf geschieht, bevor [[SDL_SetVideoMode]] aufgerufen wird.<br><br> | ||
+ | |||
==Auswirkungen auf die Framerate== | ==Auswirkungen auf die Framerate== | ||
V-Sync begrenzt die [[Framerate]] auf die Refreshfrequenz des Bildschirms. Unter bestimmten Umständen kann die Framerate aber noch weiter begrenzt werden. Mehr dazu erfahrt ihr [[Framerate#Bildschirmfrequenz_und_V-Sync|hier]]. | V-Sync begrenzt die [[Framerate]] auf die Refreshfrequenz des Bildschirms. Unter bestimmten Umständen kann die Framerate aber noch weiter begrenzt werden. Mehr dazu erfahrt ihr [[Framerate#Bildschirmfrequenz_und_V-Sync|hier]]. |
Aktuelle Version vom 6. Dezember 2013, 10:02 Uhr
Ein Beispielbild mit Tearing |
V-Sync (auch vertikale Synchronisation) ist eine Technik, die mit dem Tauschen von Back- und Frontbuffer wartet, bis die Grafikkarte vom Monitor ein Signal bekommt, dass dieser mit dem Auslesen des Frontbuffers fertig ist.
Tearing
Tearing ist ein unerwünschter Effekt, der auftreten kann, wenn V-Sync nicht aktiviert ist. Er entsteht dadurch, dass der Inhalt des Backbuffers in den Frontbuffer geschrieben wird, während letzterer noch an den Bildschirm übertragen wird. Die Bilddaten des Frontbuffers werden in der Regel von oben nach unten an den Monitor übertragen. Wird der Frontbuffer während dieses Vorgangs aktualisiert, so zeigt der Bildschirm in der oberen Hälfte noch das alte Bild, während der untere Teil schon das neue Bild anzeigt. Gerade bei schnellen Kameraschwenks kann das Bild dadurch "zerrissen" aussehen.
V-Sync aktivieren
Wer V-Sync in seinem Programm aktivieren will, ruft dazu je nach Betriebssystem wglSwapIntervalEXT oder glXSwapIntervalEXT auf:
// Windows
wglSwapIntervalEXT(1); // aktivieren
wglSwapIntervalEXT(0); // deaktivieren
// Linux
glXSwapIntervalEXT(dpy, glXGetCurrentDrawable(), 1); // aktivieren
glXSwapIntervalEXT(dpy, glXGetCurrentDrawable(), 0); // deaktivieren
Dazu sind die Extensions WGL_EXT_swap_control bzw. GLX_EXT_swap_control notwendig.
Wer SDL einsetzt, kann V-Sync auch anders aktivieren. Dazu wird SDL_GL_SetAttribute mit dem Argument SDL_GL_SWAP_CONTROL aufgerufen:
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1); // aktivieren
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 0); // deaktivieren
Wichtig ist, dass dieser Aufruf geschieht, bevor SDL_SetVideoMode aufgerufen wird.
Auswirkungen auf die Framerate
V-Sync begrenzt die Framerate auf die Refreshfrequenz des Bildschirms. Unter bestimmten Umständen kann die Framerate aber noch weiter begrenzt werden. Mehr dazu erfahrt ihr hier.