VSync — nedir, çalışma prensibi ve yapılandırma

Yazar: IT Sectr Yayınlanma: 2026-04-01 Okuma süresi: 8 dk

VSync (Dikey Senkronizasyon), GPU'nun her yeni kare çıktısını ekran yenileme hızıyla senkronize ederek görüntü yırtılmasını ortadan kaldıran bir teknolojidir. Apple Metal Documentation'a göre, mobil cihazlarda pürüzsüz render için VBlank ile senkronizasyon zorunludur. Ekran yırtılması, dikey tazeleme sırasında kare güncellendiğinde oluşur ve VSync bu karışmayı önler.

Önemli Noktalar

  • VSync — VBlank'i bekleyerek GPU'yu ekranla senkronize eden mekanizma
  • Ekran yırtılması — tarama ortasında kare değiştiğinde oluşan görünür görüntü bölünmesi
  • Çift tamponlama — front buffer ve back buffer ile VSync'in ana uygulama yöntemi
  • Giriş gecikmesi — VSync'in yan etkisi, kullanıcı eylemi ile görüntüleme arasındaki gecikmeyi artırır
  • Uyarlanabilir senkronizasyon — VSync'in dezavantajlarını ortadan kaldıran modern alternatif

VSync Nedir

VSync (Dikey Senkronizasyon), yeni bir kare çıktısı vermeden önce GPU'yu dikey boşluk sinyalini (VBlank) beklemeye zorlayan bir donanım-yazılım mekanizmasıdır. VSync olmadan GPU, ekran mevcut kareyi çizerken bile herhangi bir zamanda kare gönderebilir ve bu da yatay bir çizgi boyunca görüntü yırtılmasına neden olur.

Mobil cihazlarda VSync, grafik sürücüsü ve işletim sistemi düzeyinde uygulanır. iOS, Metal aracılığıyla VBlank senkronizasyonu kullanır, Android ise SurfaceFlinger ve BufferQueue aracılığıyla kullanır. Dikey senkronizasyon etkinleştirildiğinde, uygulamanın FPS değeri ekran yenileme hızını (cihaz modeline bağlı olarak 60, 90 veya 120 Hz) aşamaz.

Dikey senkronizasyon terimi, bir elektron ışınının görüntüyü yukarıdan aşağıya satır satır çizdiği CRT monitörlerin çalışma prensibinden gelir. Kare tamamlandıktan sonra ışın sol üst köşeye dönerdi — bu ana dikey boşluk denirdi. Modern LCD ve OLED ekranlar fiziksel olarak farklı çalışsalar da bu terimi korumuştur.

Dikey Senkronizasyon Nasıl Çalışır

GPU kareleri back buffer'da render ederken, ekran front buffer'dan okur. VSync, tampon değişiminin yalnızca VBlank sırasında — ekran mevcut kareyi göstermeyi bitirdiğinde ve bir sonrakine hazır olduğunda — gerçekleşmesini sağlar. Bu mekanizmaya VBlank senkronizasyonlu çift tamponlama denir.

Çift Tamponlama Mekanizması

Çift tamponlama iki tampon kullanır: ekranda görüntülenen front buffer ve GPU'nun mevcut kareyi yazdığı back buffer. Kare hazır olduğunda, tamponlar değiştirilir. VSync etkinken bu değişim en yakın VBlank'e kadar ertelenir. Kare VBlank'ten önce hazırsa GPU boşta kalır, bu da performansı düşürür ancak yırtılmayı ortadan kaldırır.

cpp
// OpenGL — WGL_EXT_swap_control ile VSync etkinleştirme
HDC hdc = wglGetCurrentDC();
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT =
    reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(
        wglGetProcAddress("wglSwapIntervalEXT"));
wglSwapIntervalEXT(1); // 1 = VSync etkin, 0 = devre dışı

VBlank Bekleme Süresi

VBlank, mevcut karenin son satırı ile sonraki karenin ilk satırı arasındaki kısa bir aralıktır. Bu anda ekran pikselleri güncellemez ve tampon değişimi eser olmadan gerçekleşir. VBlank süresi yenileme hızına bağlıdır: 1080p ekranda 60 Hz'de VBlank yaklaşık 1,4 ms sürer. GPU, VBlank'ten önce render'ı tamamlayamazsa kare atlanır ve ekran önceki kareyi bir döngü daha gösterir — bu, takılma olarak algılanır.

Üçlü tamponlama, üçüncü bir tampon ekleyerek GPU boşta kalma sorununu çözer. GPU, back buffer'lardan biri VBlank beklese bile bir sonraki kareyi hemen render etmeye başlayabilir. Bu, VSync ile FPS'yi artırır ancak fazladan bir kare gecikme ekler. Mobil cihazlarda üçlü tamponlama, bazı oyun motorlarında ve Vulkan'da Mailbox modu aracılığıyla kullanılır.

VSync Olmadan Temel Sorunlar

VSync devre dışı bırakıldığında maksimum FPS ve minimum giriş gecikmesi elde edilir, ancak görsel eserler pahasına. Mobil oyunlar ve pürüzsüz animasyonlu uygulamalar için VSync ile devre dışı bırakılması arasındaki seçim, görüntü netliği ile kontrol tepkiselliği arasında bir ödünleşimdir.

Ekran Yırtılması

Ekran yırtılması, ekranın üst kısmının önceki kareyi ve alt kısmının zaten sonraki kareyi gösterdiği yatay bir bölünmedir. Bu, GPU tarama ortasında tamponları değiştirdiğinde oluşur. Mobil cihazlarda yırtılma, özellikle hızlı kaydırma veya yüksek kare hızlı dinamik sahnelerde fark edilir. OLED ekranlar anlık tepkileriyle yırtılmayı LCD'ye kıyasla daha kontrastlı hale getirir.

Yırtılma yoğunluğu, FPS'nin yenileme hızına oranına bağlıdır. 60 Hz ekranda 60 FPS'de yırtılma tek bir statik çizgi olarak görünürken, 60 Hz'de 300 FPS'de yukarıdan aşağıya hareket eden birden çok dalgalı yırtılma olarak görünür. FPS yenileme hızına göre ne kadar yüksekse, o kadar fazla yırtılma olur ve o kadar belirgin hale gelirler.

Giriş Gecikmesi

Giriş gecikmesi VSync ile — bir düğmeye basma ile sonucun ekranda görülmesi arasındaki gecikmedir. Dikey senkronizasyon ortalama bir kare gecikme (60 Hz'de 16,7 ms) ekler ve üçlü tamponlama ile — iki kareye kadar. Sıradan uygulamalar için bu gecikme fark edilmez, ancak nişancı, dövüş ve ritim oyunları için kritiktir: profesyoneller 8 ms'lik gecikmeyi bile fark eder.

NVIDIA (2024) araştırmasına göre, CS:GO'da VSync olmadan 60 FPS'de ortalama giriş gecikmesi 22 ms ve VSync ile — 39 ms'dir. 144 FPS'de fark sırasıyla 14'e karşı 18 ms'ye düşer. Mobil platformlarda VSync giriş gecikmesi, dokunmatik giriş nedeniyle daha az kritiktir; donanım dokunmatik ekran gecikmesi (10–30 ms) ek senkronizasyon gecikmesini maskeler.

Mobil Geliştirmede VSync Yapılandırması

Mobil geliştirmede VSync, grafik API'leri, oyun motorları ve işletim sistemi ayarları aracılığıyla kontrol edilir. iOS daha az kontrol sağlarken, Android Vulkan ve OpenGL ES aracılığıyla daha fazla kontrol sağlar. Mod seçimi uygulama türüne bağlıdır: oyunlar, UI veya video.

Unity ve Unreal Engine'de VSync

Unity QualitySettings.vSyncCount ayarını kullanır: 0 — devre dışı, 1 — her VBlank'te VSync, 2 — her ikinci VBlank'te (FPS yarıya iner). Unreal Engine'de VSync, r.VSync konsol komutu ve DefaultEngine.ini aracılığıyla kontrol edilir. Mobil derlemeler için Unity'de VSync'i devre dışı bırakıp özel bir FPS sınırlayıcı kullanılması önerilir, çünkü Android SurfaceFlinger'daki yerleşik VSync öngörülemez gecikmeler yaratabilir.

csharp
// Unity — VSync ve FPS kontrolü
void Awake()
{
    // 0 = VSync devre dışı, 1 = VSync etkin
    QualitySettings.vSyncCount = 0;
    // VSync yerine özel FPS sınırlayıcı
    Application.targetFrameRate = 60;
}

Vulkan ve Metal'de VSync

Vulkan, VkSwapchainPresentInfo ve presentMode aracılığıyla tam kontrol sağlar: VK_PRESENT_MODE_FIFO_KHR — klasik VSync, VK_PRESENT_MODE_MAILBOX_KHR — beklemesiz üçlü tamponlama, VK_PRESENT_MODE_IMMEDIATE_KHR — senkronizasyon yok. Metal iOS'te VSync'i CAMetalLayer.displaySyncEnabled aracılığıyla kontrol eder. iOS 14'ten itibaren Apple, arcade tarzı oyunlar dışındaki tüm uygulamalar için varsayılan olarak displaySyncEnabled = true kullanılmasını önerir.

ModAçıklamaGecikme
FIFOVBlank bekleme ile klasik VSync1 kare
MailboxÜçlü tamponlama, eski kareleri atma1–2 kare
ImmediateSenkronizasyon yok, maksimum FPS0 kare

VSync Olmadan FPS Sınırlama

FPS sınırlayıcı, uygulamanın VBlank'i beklemeden programlı olarak kare hızını sınırladığı VSync'e bir alternatiftir. Bu yaklaşım öngörülebilir gecikme sağlar ve ekran yenileme hızına bağlı değildir. Android'de FPS sınırlama Choreographer aracılığıyla, iOS'te — manuel çıkış zamanlama kontrolü ile CADisplayLink aracılığıyla uygulanır.

VSync ve Modern Senkronizasyon Teknolojileri

Geleneksel VSync'in temel bir dezavantajı vardır: ekranın sabit yenileme hızına bağlıdır. GPU 60 Hz ekranda 45 FPS üretiyorsa, VSync 45 kare gösteremez — 30 kare gösterir (her ikinci VBlank'i atlayarak) veya düzensiz aralıklarla 60 ve 30 arasında geçiş yapar. Bu, yırtılmadan daha çok oyun deneyimini bozan takılma yaratır.

Uyarlanabilir Senkronizasyon (FreeSync, G-Sync, Apple ProMotion), ekran yenileme hızını uygulamanın FPS'ine göre dinamik olarak değiştirerek bu sorunu çözer. Uygulama 47 FPS üretiyorsa, ekran 47 Hz'e geçer — her kare yırtılma veya takılma olmadan tam olarak bir kez gösterilir. iOS'te ProMotion, 24 ila 120 Hz arasında otomatik olarak bir frekans seçerek pürüzsüzlük ve güç tüketimini dengeler.

Mobil cihazlarda Uyarlanabilir Senkronizasyon standart haline geliyor: ProMotion ile iPad Pro (2017+), LTPO ekranlı Android amiral gemileri (Samsung Galaxy S23 Ultra, Google Pixel 8 Pro) 1 ila 120 Hz arasında dinamik yenileme hızını destekler. Geliştirici için bu, geleneksel anlamda VSync'in sistem yönetimiyle değiştirildiği anlamına gelir — targetFrameRate ayarlamak yeterlidir ve işletim sistemi, pürüzsüzlük ve pil ömrünün optimum dengesi için yenileme hızını kendisi ayarlar.

Sıkça Sorulan Sorular

Mobil oyunlarda VSync her zaman etkinleştirilmeli mi?

Hayır. Dinamik oyunlar için (nişancı, dövüş oyunları) VSync, anlamlı bir fayda olmadan giriş gecikmesini artırır — mobil OLED ekranlarda yırtılma, küçük ekran boyutu nedeniyle daha az fark edilir. Sıradan oyunlar ve UI için VSync, pürüzsüzlük algısını iyileştirir.

VSync mobil cihaz pilini nasıl etkiler?

VSync güç tüketimini azaltır çünkü GPU gereksiz kareler render etmez. VSync devre dışıyken GPU maksimum frekansta çalışır ve görüntülenmeyen her kare enerji harcar ve kullanıcıya fayda sağlamadan cihazı ısıtır.

VSync ve FPS sınırlayıcı arasındaki fark nedir?

VSync, kare çıktısını ekranın VBlank ile senkronize ederken, FPS sınırlayıcı uygulama kodunda render frekansını sınırlar. FPS sınırlayıcı yırtılmayı ortadan kaldırmaz ancak ekran yenileme hızına bağlı olmadan öngörülebilir gecikme sağlar.

VSync etkinken FPS neden yarıya düşebilir?

GPU VBlank'ten önce kareyi tamamlayamazsa, VBlank atlanır ve kare iki yenileme döngüsü boyunca gösterilir. 60 Hz'de bu, 30 FPS verir. Üçlü tamponlama, GPU'nun beklemeden sonraki kareye başlamasına izin vererek bu etkiyi hafifletir.

iOS ve Android Uyarlanabilir Senkronizasyonu destekliyor mu?

Evet. iOS ProMotion (iPad Pro, iPhone 13 Pro+) 24–120 Hz dinamik frekansı destekler. Android LTPO paneller aracılığıyla 1–120 Hz destekler. Geliştiricinin bunu manuel olarak yönetmesi gerekmez — sistem optimum frekansı otomatik olarak seçer.

Özet

  • VSync — ekran yırtılmasını ortadan kaldıran GPU-ekran senkronizasyon mekanizması
  • VBlank bekleme ile çift tamponlama — dikey senkronizasyonun klasik uygulaması
  • Ekran yırtılması — VSync devre dışının ana sorunu, özellikle yüksek FPS'de belirgin
  • Giriş gecikmesi — VSync'in bedeli, bir ila iki kare gecikme ekler
  • Üçlü tamponlama takılmayı azaltır ancak giriş gecikmesini artırır
  • Uyarlanabilir Senkronizasyon (ProMotion, LTPO) — dinamik yenileme hızlı VSync'in modern alternatifi
  • Mobil oyunlar için, öngörülebilir gecikme için VSync yerine FPS sınırlayıcı kullanın

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun