Analiz: Skia, SDL3, GPU backendleri ve geliştirme ortamı #1
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Amaç
Skia'nın SDL3, OpenGL ve Vulkan ile ilişkisini; modern CSS çizimleri için yeterliliğini ve mevcut geliştirme ortamının Kubbe'nin derleme/debug ihtiyaçlarına uygunluğunu kaydetmek.
1. SDL3, Skia ve GPU API'lerinin görevleri
SDL3 ve Skia birbirinin alternatifi değildir:
Bağlantı katmanları:
Skia'nın doğrudan SDL backend'i yoktur. SDL pencereyi ve işletim sistemi bağlantısını sağlar; Skia, bu pencereye ait OpenGL/Vulkan render target'ına çizim yapar.
OpenGL yolu
Vulkan yolu
VkSurfaceKHRoluşturur.SkSurfacenesnesine bağlanır.SDL'nin resmî API'si
SDL_WINDOW_OPENGLveSDL_WINDOW_VULKANpencere türlerini destekler: https://wiki.libsdl.org/SDL3/SDL_CreateWindowSDL'nin Vulkan entegrasyonu surface oluşturma yardımcılarını sağlar: https://wiki.libsdl.org/SDL3/CategoryVulkan
Skia OpenGL context veya Vulkan device'ı uygulama adına oluşturmaz: https://skia.org/docs/user/api/skcanvas_creation/
Skia'nın Vulkan ve OpenGL GPU backend'leri aynı build içinde bulunabilir ve çalışma sırasında seçilebilir: https://skia.org/docs/user/special/vulkan/
Kubbe'de SDL'nin
SDL_Renderer/SDL_GPUçizim katmanını kullanmak zorunlu değildir. SDL'den pencere, olaylar ve platform yüzeyi; çizim için Skia kullanılmalıdır.2. Modern CSS çizimleri için Skia'nın yeterliliği
Skia, Kubbe'nin paint/raster katmanı için yeterlidir. Ancak CSS ayrıştırma, layout ve CSS semantiğini kendisi uygulamaz.
border-radiuslinear-gradientradial-gradientconic-gradientbox-shadow,text-shadowclip-pathSkBlendModeSkImageGradient API: https://api.skia.org/classSkGradientShader.html
Canvas ve temel çizim API'si: https://skia.org/docs/user/api/
SkSL runtime effects: https://skia.org/docs/user/sksl/
Kubbe'nin kendisinin uygulaması gerekenler:
Metin tarafında Skia glyph'leri çizebilir; Unicode shaping, bidi, font fallback ve line breaking için ileride HarfBuzz, ICU ve FreeType gibi bileşenler ayrıca değerlendirilmelidir.
3. Yerel geliştirme ortamı
Denetim tarihi: 28 Temmuz 2026.
Toolchain
Sanitizer doğrulaması
Geçici bir C++23 probe hem GCC hem Clang ile
-fsanitize=address,undefinedkullanılarak derlendi.Sonuç: ASan ve UBSan mevcut ortamda bugün kullanılabilir durumdadır. Sistem kütüphanelerinde ayrıca
libasan,libubsanvelibtsanruntime'ları bulunuyor.Donanım
Normal OpenGL oturumu Intel GPU'yu kullanıyor.
prime-runile NVIDIA OpenGL yolu da doğrulandı. Vulkan NVIDIA GPU'yu görüyor. Hibrit GPU yapısı renderer'ı iki farklı sürücü üzerinde test etmek için faydalıdır.15 GiB RAM Skia için yeterlidir. V8 ve Skia'nın ağır debug/sanitizer build'lerinde başlangıçta yaklaşık
ninja -j4veya-j6tercih edilmelidir. Çok sayıda build profili onlarca GiB disk kullanabilir.4. Eksik veya daha sonra eklenecek araçlar
Mevcut denetimde bulunmayanlar:
ccacheVK_LAYER_KHRONOS_validationperfİlk CMake/build mimarisini kurmaya engel değiller. İlk Vulkan grafik kodundan önce validation layer; GPU kare analizi aşamasında RenderDoc öncelikli olmalıdır.
5. Projeye özel ve portable debug toolchain
Sanitizer kullanmak sistem genelinde bir ayar değildir. Yalnızca sanitizer flag'leriyle derlenen Kubbe hedeflerini etkiler. Önerilen ayrık build dizinleri:
Her profil yalnızca kendi çıktısını üretir. Shared library kullanılan sanitizer profilinde Kubbe'nin bütün iç
.somodülleri aynı sanitizer ayarlarıyla birlikte derlenmelidir.Derleyicinin ve araçların da sistemden bağımsız olması istenirse depo içinde Git tarafından izlenmeyen bir toolchain alanı kullanılabilir:
Sabit sürümlü LLVM/CMake/Ninja paketleri checksum doğrulayan bir bootstrap betiğiyle buraya indirilebilir.
CMakePresets.jsonbu araçlara yönlendirilir. Büyük binary dosyaları Git'e eklenmez; sürümler ve SHA256 değerleri kaydedilir.Sonuç