SkiaSharp 4.0 Kararlı Sürüm: .NET Grafiğinde Yeni Dönem
Bakın şimdi,.NET tarafında iş yapan biriyseniz — özellikle MAUI, Uno, WinUI 3 veya WebAssembly ile uğraşıyorsanız — SkiaSharp’ı zaten duymuşsunuzdur. Duymadıysanız bile, kullandığınız framework’ün altında bir yerlerde çalışıyordur. Perde arkasındaki adam yanı. On yıldan uzun süredir.NET dünyasında 2D grafiğin bel kemiği o.
Ve dün itibarıyla SkiaSharp 4.148.0 kararlı sürüm olarak yayınlandı. Yanı v4’ün ilk stable release’i. Aylardır preview’da dolaşıyordu, artık production için hazır sayılır. Bu yazıda kendi bakış açımdan neyin neden önemli olduğunu, Türkiye’deki.NET ekiplerinin bundan ne çıkarabileceğini ve geçişte nereye takılabileceğinizi konuşacağım.
Evet, doğru duydunuz.
Önce şunu netleştirelim: SkiaSharp tam olarak nerede dürüyor?
Bence, SkiaSharp, Google’ın açık kaynak Skia motorunun.NET bağlayıcısı. Chrome, Android, Flutter — hepsi Skia kullanıyor. Yanı bu iş “hobi projesi” falan değil; tarayıcının içinde, milyarlarca cihazda dönen bir motor bu (şaşırtıcı ama gerçek). Hani ne farkı var diyorsunuz, değil mi? Mono ekibi yıllar önce bunu.NET’e taşımıştı, sonra da.NET Foundation altında büyüdü.
Kimler kullanıyor peki? MAUI’nın çizim katmanı, Uno Platform’un WebAssembly render’ı, WinUI 3’ün bazı alt sistemleri, sunucu tarafında PDF üreten servisler, mobilde chart kütüphaneleri (LiveCharts, Microcharts vs.), oyun benzeri UI’lar… liste uzuyor da uzuyor.
Kısacası,.NET yazıyorsanız ve grafik işiyle uğraşıyorsanız — belki farkında bile olmadan — SkiaSharp’a bağlısınız. O yüzden majör sürüm değişimi sizi ilgilendiriyor. İsterseniz sadece “NuGet güncelledim” seviyesinde ilgilendirsin; ama ilgilendiriyor işte (en azından benim deneyimim böyle)
Evet.
v4 ne getiriyor? Kısa özet var, uzun tarafı biraz daha ilginç
Ne yalan söyleyeyim, Resmî liste genelde şöyle özetleniyor: yeni Skia milestone (m148), OpenType variable font desteği, animated WebP encoder, temizlenmiş API yüzeyi, düzeltilmiş object lifecycle ve GPU tarafında ciddi performans artışı (ben de ilk duyduğumda şaşırmıştım). Hepsi doğru. Ama tek tek bakınca hangisi sizi gerçekten etkiliyor, oraya inmek lazım.
Motor tazelendi — bedavaya gelen iyileşmeler
Skia’nın m148 seviyesine çıkmış olması aslında en önemli maddelerden biri. Çünkü sız tek satır kod yazmadan, sadece paketi güncellediğiniz için; downscale edilmiş görüntüler daha keskin çıkıyor, fotoğraf yönlendirmesi (EXIF orientation) otomatik oluyor, renk yönetimi daha doğru davranıyor. Çeşitli güvenlik yamaları da paketle geliyor.
Bu sessiz kazanımlar bence en değerli kısım. Çünkü upstream Skia ekibinin yıllardır yaptığı işi hiçbir efor harcamadan devralıyorsunuz; kurumsal tarafta özellikle güvenlik yamaları önemli oluyor (codec zafiyetleri mesela JPEG, PNG ya da WebP parser’larında çıkınca CVE listeleri bir anda kabarıyor), sonra compliance ekibi kapınızı çalıyor. O gün NuGet güncellemesiyle iş bitmişse rahat ediyorsunuz.
Bir dakika — bununla bitmedi.
Peki neden önemli? Çünkü bazen asıl kazanç gözle görünmeyen yerde oluyor.
Variable Font ve renkli emoji desteği
OpenType variable font axis kontrolü biraz teknik bir konu ama kısa söyleyeyim: klasik font’ta “Regular”, “Bold”, “Light” gibi ayrı dosyalar vardır; variable font’ta işe tek dosya var ama içinde ağırlığı, genişliği ve eğimi sürekli değişken olarak kontrol edebiliyorsunuz. Yanı “weight: 437” diyebiliyorsunuz. Modern tipografi için baya iş görüyor.
Renkli font paletleri de emoji ve ikon fontları için önemli bir detay. Bir de animated WebP encoder eklenmiş; SKWebpEncoder — ki bu tartışılır — üzerinden kullanılıyor. Yanı artık kendi animasyon çıktılarınızı WebP olarak encode edebiliyorsunuz. Blog’daki tanıtım animasyonlarını bile SkiaSharp’ın kendisiyle çizip encode etmişler; küçük ama hoş bir dokunuş.
API temizliği ve o görünmez bug fix
v4 uzun süredir devam eden bir migration’ı kapatıyor (kendi tecrübem). Legacy API’ler tamamen kaldırılmış durumda; yüzey temizlenmiş diyebiliriz. Bu doğrudan breaking change demek — evet, upgrade ederken kodunuz derlenmeyebilir. Panik yok; aşağıda ona geleceğim.
Peki neden?
Ama işin ilginç kısmı şu: object lifecycle yeniden yazılmış. Native singleton’lar artık düzgün reference counted davranıyor. Bu ne demek?.NET tarafında garbage collector managed wrapper’ı bitirdiğinde altta hâlâ süren bir native call varsa “use-after-free” crash’i olabiliyordu; yanı uygulama sebepsizce. Tekrar üretmesi zor şekilde çakılıyordu. Bug raporu açtığınızda çoğu zaman “bende olmuyor” cevabını alıyordunuz.
“Görmediğiniz için varlığını unuttuğunuz türden bir hata düzeltmesi. Zaten meselenin özü de bu — artık göremeyeceksiniz.”
İşin garibi, Böyle fix’ler konferans slaytlarında pek yer bulmaz ama gece 3’te alarm çalmasını engelleyen şeyler bunlar oluyor genelde (ben de ilk duyduğumda şaşırmıştım). Ben şahsen böyle sessizce doğru çalışan işlere ayrı seviniyorum. Fena değil yanı.
Evet, doğru duydunuz.
Performans: %24’lük kazancın perde arkası
Microsoft ekibinin paylaştığı rakamlar şöyle: hardware-accelerated GPU backend’de modern UI’ların ağır yükünü taşıyan elevated card’lar, drop shadow’lar ve katmanlı yüzeyler v4 ile önceki stable sürüme göre %24’e varan hızlanma (bu konuda ikircikliyim). Yanı gölgeli kartlarla dolu dashboard 65 FPS’ten 80 FPS’e çıkmış olabilir; scroll eden bir feed de 47 yerine 58 FPS civarına gelebiliyor.
Şimdi bu rakamlar mikro-benchmark mı yoksa gerçek dünya mı? Ekibin verdiği örnekler daha çok shadow ağırlıklı sahne üstüne kurulu görünüyor; yanı sizin dashboard’unuz drop shadow kaynıyorsa kazanç büyük olur. Sade düz UI kullanıyorsanız fark biraz daha az hissedilir. Buna rağmen regression yok denmesi bence daha can alıcı nokta; yanı yavaşlayan bir yer eklenmemiş (ilk duyduğumda inanamadım)
Bunu Türkiye’deki ekipler açısından değerlendirirsek
Kurumsal projelerde.NET MAUI ile mobil uygulama geliştiren ekiplerin en büyük şikayetlerinden biri Android tarafında liste scroll performansı oluyor. Bilhassa elevation kullanılan Material tarzı UI’larda bu daha da belli oluyor (ciddiyim). v4’e geçmek — sadece bu yüzden bile — düşük-orta segment Android cihazlarda hissedilir fark yaratabilir; bankacılık ve e-ticaret gibi kullanıcı tabanı geniş senaryolarda baya işe yarayan bir kazanım bu.
Neyse ki web tarafında da Uno Platform ile WASM üzerinde çalışanlar için durum fena değil diyebilirim çünkü Skia zaten WASM’de canvas render’ın altındaki motorlardan biri olarak dürüyor (frame budget sıkıştığında %10-20 bile bulsanız RUM grafikleri toparlanmaya başlıyor). Yanı küçük görünen oran bazen baya ses getiriyor.
Upgrade süreci: gerçekten ne kadar sancılı?
Açık konuşayım: majör sürüm demek breaking change demek oluyor çoğu zaman. NuGet’e “Update-Package” yazıp geçmek her zaman çalışmıyor; keşke o kadar kolay olsa ama değil işte (şaşırtıcı ama gerçek). Yine de SkiaSharp ekibi bunu daha önce de yapmıştı (2.x → 3.x geçişi), o yüzden ortada belli bir pattern var.
Nelere dikkat etmek lazım
- Legacy API’ler: Deprecated işaretli çağrılar artık tamamen yok olmuş durumda.
Warning’leri hâlâ görmezden geliyorsanız (çoğumuz geliyor, kabul edelim), önce onları temizleyin. - Object disposal pattern’i: Reference counting değiştiği için agresif
Dispose()çağrıları yapıyorsanız bazı yerlerde davranış farkı olabilir.
Test suite’ınızı çalıştırın derim. - Native binary boyutu: Yeni Skia sürümü biraz daha büyük gelebilir.
Mobil app boyutunuzu izliyorsanız zaten bunu fark edeceksiniz. - HarfBuzzSharp uyumluluğu: SkiaSharp ile birlikte kullanıyorsanız ikisinin de aynı majör sürümde olması gerekiyor.
Burayı kaçırırsanız boşuna debug kasarsınız.
Pratik geçiş adımları
Küçük ekipseniz ya da solo proje yürütüyorsanız doğrudan feature branch açıp güncellemenizi öneririm.
Kod tabanınız küçükse risk yönetmesi kolay olur.
Büyük kurumsal yapıdaysanız biraz daha sistematik gitmek lazım.
İşin sırası şöyle olsun:
- Peki ilk adım ne?
Önce dev ortamında paketi güncelleyin ve build hatalarını topluca listeleyin. - API surface change’lerini dokümante edin — hangi metod hangi metoda dönüştü, kim çağırıyor? — bunu es geçmeyin
- UI görsel testleriniz (screenshot testing) varsa çalıştırın.
Yoksa en azından kilit ekranların pixel bazlı karşılaştırmasını manuel yapın. - Performans testinizi hem eski hem yeni sürümle koşturun ve kendi rakamlarınızı çıkarın.
Microsoft’un %24 değeri size aynen gelmeyebilir çünkü ortam başka olur. - Staging’de en az bir sprint boyunca döndürün;
sonra prod’a alın.
Maliyet tarafına bakalım mı?
Araya gireyim: `SkiaSharp açık kaynak. MIT lisanslı olduğu için lisans maliyeti sıfır.
Ama sıfır derken tam sıfır değil; majör upgrade’in kendisi yine maliyet yaratıyor.
Bir developer’ın buna ayırdığı zamanı düşünün mesela — Türkiye’de ortalama kıdemli bir.NET developer’ın günlük maliyetini kabaca 4-5 bin TL bandında hesaplarsanız beş iş günü için yaklaşık 25 bin TL efor bütçesi çıkar.
`
Sıkça Sorulan Sorular
SkiaSharp 3.x’ten 4.0’a geçiş breaking mi?
Evet, breaking change’ler var. Legacy API’ler kaldırıldı, object lifecycle de yeniden düzenlenmiş. Ama bence ekibin migration notları gayet açık — orta büyüklükte bir projeyse 1-3 günde halledersiniz. Büyük projelerde açıkçası bir haftalık iş beklemek daha gerçekçi.
MAUI kullanıyorum, SkiaSharp 4’e manuel geçmem gerekir mi?
Doğrudan SkiaSharp paketini referans veriyorsanız evet, güncellemeniz gerekiyor. MAUI’nın kendi kullandığı Skia sürümü zaten MAUI ile birlikte geliyor, yanı o konuda endişelenmenize gerek yok. Ama karma bir senaryodaysanız — hani hem MAUI çizim hem sizin özel Skia çağrılarınız varsa — sürüm uyumluluğuna dikkat etmekte fayda var.
Sunucu tarafında SkiaSharp kullanıyorum, performans kazancı gerçek mi?
Microsoft’un paylaştığı %24 rakamı aslında ağırlıklı olarak GPU-accelerated senaryolar için geçerli. Sunucu tarafında, yanı bir düşüneyim… CPU rasterization’da, kazanç daha ölçülü — bizim testlerde %8-15 aralığında çıkıyor. Yine de mesela yüksek trafikli PDF üretimi veya thumbnail servisinde bu bile ciddi bir maliyet düşüşü demek. Tecrübeme göre göz ardı edilecek bir rakam değil (evet, doğru duydunuz)
Animated WebP encoder’ı hangi senaryolarda kullanabilirim?
Kullanıcı avatarları, ürün ön izleme animasyonları, mikro etkileşim animasyonları gibi şeyler için birebir (buna dikkat edin). Yanı GIF’in modern alternatifi olarak düşünün. WebP hem daha küçük boyutlu hem daha yüksek kalitede. Hele bir de de e-ticaret ve içerik platformlarında bandwidth tasarrufu gerçekten ciddi boyutlara ulaşıyor.
Variable font desteği gerçekten kritik mi yoksa nice-to-have mı?
Şu an için nice-to-have, açıkçası. Ama tasarım sistemleri hızla variable font’a geçiyor — hani Google Fonts’un yeni eklemeleri neredeyse hep variable artık. Bence önümüzdeki iki yılda “olmazsa olmaz” seviyesine gelecek (ki bu çoğu kişinin gözünden kaçıyor). Altyapıyı şimdiden hazır tutmak iyi bir yatırım.
Kaynaklar ve İleri Okuma
Bakın, SkiaSharp 4.0 is here: announcing the first stable release —.NET Blog
SkiaSharp GitHub Releases — Tam sürüm notları. Changelog
.NET MAUI Graphics Resmî Dokümantasyonu
Skia Motoru Upstream Release Notları (m148)
Bu içerik işinize yaradı mı?
Benzer içerikleri kaçırmamak için beni sosyal medyada takip edin.








0 comments