|
SDLPainter 1.2.0
SDL3 + OpenGL/Vulkan 2B çizim kütüphanesi
|
Türkçe | English version
Bu rehber SDLPainter'ı ilk defa kullananlar içindir.
Beş dakikada çalışan bir pencere ve birkaç şekil çizdirmek için doğru yerdesiniz. Kütüphanenin mimarisi ve diğer üst seviye hususlar için Mimari Genel Bakış sayfasına göz atabilirsiniz.
| Araç | Minimum Sürüm | Notlar |
|---|---|---|
| C++ derleyicisi | C++17 destekleyen GCC 11+, Clang 14+, MSVC 2022 | |
| CMake | 3.21 | PROJECT_IS_TOP_LEVEL, $<TARGET_RUNTIME_DLLS>, presets v3 için |
| Conan | 2.x | pip install conan |
| Git | — | repoyu klonlamak için |
| OpenGL sürücüsü | 3.3 Core | Çoğu sistemde mevcut |
| Vulkan loader | 1.1+ runtime (opsiyonel) | Hedef API 1.1; Conan paketi vulkan-loader/1.3.290 (geri uyumlu) |
Preset adı
--output-folderile eşleşmek zorunda: projeninCMakePresets.jsondosyası her preset için toolchain yolunubuild/<preset>/generators/...altında arıyor.Windows / MSVC için preset adları
windows-debugvewindows-releaseşeklindedir (--output-folder=build/windows-debug/generators). Cross-compile için Dockerfile içindekiwindows-crossstage'i vewindows-mingw-debug/windows-mingw-releasepresetleri kullanılır.
NOT: Conan install ve benzeri çağrıları, CMake presetleri içerisine de alacak bir takım çözümler mevcut, bununla birlikte şu an için bu şekilde durmasının daha iyi olduğunu düşünüyorum ileride belki bu opsiyonu da değerlendirebiliriz.
Tüm scriptler projenin root dizininden çalıştırılmalıdır. Argümanların tam listesi için Script Referansı *(İngilizce)*.
| Preset | Platform | Build Type | Notlar |
|---|---|---|---|
linux-debug | Linux | Debug | CI'da da kullanılır |
linux-release | Linux | Release | CI'da da kullanılır |
linux-debug-asan | Linux | Debug | ASan + UBSan aktif |
windows-debug | Windows | Debug | MSVC, Visual Studio 17 2022 |
windows-release | Windows | Release | MSVC, Visual Studio 17 2022 |
windows-mingw-debug | Windows (cross) | Debug | Linux host'ta MinGW-w64 cross-compile, Vulkan'sız |
windows-mingw-release | Windows (cross) | Release | Linux host'ta MinGW-w64 cross-compile, Vulkan'sız |
| Seçenek | Varsayılan | Açıklama |
|---|---|---|
SDLPAINTER_WITH_VULKAN | OFF | Vulkan backend |
SDLPAINTER_BUILD_EXAMPLES | ON | Örnek uygulamalar |
SDLPAINTER_BUILD_TESTS | ON | GTest birim testleri |
ENABLE_SANITIZERS | OFF | ASan + UBSan (GCC/Clang) |
Vulkan dahil tüm özelliklerle derleme:
Basit bir uygulama oluşturmak için, aşağıdaki dosyayı main.cpp olarak kaydedin:
| Satır | Neden | Atlanırsa |
|---|---|---|
SDL_GL_SetAttribute(...CORE) | OpenGL 3.3 Core profile şart | Compatibility profile'da çalışabilir ama undefined |
Painter scope içinde | GL context window'a bağlı | glDelete* çağrısı 1282 hatası verir |
painter.IsValid() | Constructor sessizce başarısız olabilir | Sonraki çağrılarda crash |
painter.Begin() / painter.End() | Frame sınırı | Çizimler ekrana yansımaz |
Pen::NoPen() ve Brush::NoBrush() görünmez varyantlardır; o anki çizimler atlanır (GPU yüküne girmez).
| Stroke (çerçeve) | Fill (dolgu) |
|---|---|
DrawLine(x1, y1, x2, y2) | — |
DrawRect(x, y, w, h) | FillRect(x, y, w, h) |
DrawCircle(cx, cy, r) | FillCircle(cx, cy, r) |
DrawEllipse(cx, cy, rx, ry) | FillEllipse(cx, cy, rx, ry) |
DrawPolygon(points) | FillPolygon(points) |
DrawPolyline(points) | — |
Save/Restore sayısı dengeli olmalı.
İlk çizimde GPU'ya yüklenir, sonraki çizimlerde cache kullanılır.
Scissor tabanlı, eksen-hizalı dikdörtgen.
Vulkan backend için kütüphane
with_vulkan=Trueile build edilmiş olmalı:conan install . -o "&:with_vulkan=True".
Diğer hiçbir kullanıcı kodu değişmez. Aynı painter.FillRect, painter.DrawText, painter.Save çağrıları çalışır. Bu IRenderer soyutlamasının somut karşılığıdır.
examples/ dizini her özellik için bağımsız bir demo içerir. Yeni başlayanlar için önerilen okuma sırası:
| Demo | Konu | İlgili API |
|---|---|---|
primitives.cpp | Tüm temel primitifler | DrawRect, FillCircle, DrawPolyline |
transforms.cpp | Transform stack | Save/Restore, Translate/Rotate/Scale |
clipping.cpp | Clipping | SetClipRect / ClearClip |
images.cpp | Image / texture | Image, DrawImage |
text.cpp | Metin | Font, DrawText, Alignment |
vulkan_clear.cpp | Vulkan: pencereyi temizle | RendererBackend::kVulkan |
vulkan_triangles.cpp | Vulkan: ilk üçgenler | — |
vulkan_textured.cpp | Vulkan: image | — |
vulkan_demo.cpp | Vulkan: tüm primitifler | — |
vulkan_text.cpp | Vulkan: metin | — |
SDL_WINDOW_OPENGL var mı?SDL_WINDOW_VULKAN var mı? Kütüphane with_vulkan=True ile build edildi mi?painter.Begin() ve painter.End() arasında mı?Pen veya Brush Transparent mi (alpha=0)?Save/Restore dengesi bozulmuş olabilir.Painter instance, SDL_DestroyWindow'dan önce yok edilmeli. En basit yöntem: Painter'ı bir scope (kıvrımlı blok) içine alın.SetPen/SetBrush değiştirmeyin (renk değişimi flush tetiklemez ama opacity değişimi tetikler).Font::GetGlyph ilk çağrıda maliyetlidir; sonra cache parasız.