|
SDLPainter 1.2.0
SDL3 + OpenGL/Vulkan 2D çizim kütüphanesi
|
Ana çizim sınıfı Ayrıntılar...
#include <painter.h>
Public Üye Fonksiyonlar | |
| Painter (SDL_Window *window, RendererBackend backend) | |
| Belirtilen pencere ve backend ile Painter oluştur. | |
| Painter (std::unique_ptr< IRenderer > renderer, int32_t viewport_width, int32_t viewport_height) | |
| Hazır bir renderer ile pencere olmadan Painter oluştur. | |
| bool | IsValid () const noexcept |
| Renderer başarıyla başlatıldı mı? | |
| void | Begin () |
| Frame başlangıcı — her frame başında çağrılmalı. | |
| void | End () |
| Frame sonu — her frame sonunda çağrılmalı, ekrana sunar. | |
| void | SetDrawableSize (int32_t width, int32_t height) |
| Çizim yüzeyi boyutunu bildir (viewport + projeksiyon güncellenir). | |
| void | SetViewport (int32_t x, int32_t y, int32_t width, int32_t height) |
| Çizimi pencerenin bir alt dikdörtgeniyle sınırla. | |
| void | ResetViewport () |
| Viewport'u tüm çizim yüzeyine geri al. | |
| void | Clear (const Color &color) |
| Ekranı belirtilen renkle temizle. | |
| const FrameStats & | GetFrameStats () const noexcept |
| Son tamamlanan karenin çizim istatistikleri. | |
| void | SetPen (const Pen &pen) |
| Aktif kalemi ayarla (çizgi rengi ve kalınlığı). | |
| void | SetBrush (const Brush &brush) |
| Aktif fırçayı ayarla (dolgu rengi). | |
| void | SetFont (std::shared_ptr< Font > font) |
| Aktif fontu ayarla. | |
| const std::shared_ptr< Font > & | GetFont () const noexcept |
| Aktif font (yoksa nullptr). | |
| void | SetOpacity (float alpha) |
| Global opaklığı ayarla [0.0, 1.0]. | |
| void | SetBlendMode (BlendMode mode) |
| Renk karıştırma modunu ayarla. | |
| BlendMode | GetBlendMode () const noexcept |
| Yürürlükteki karıştırma modu. | |
| void | DrawLine (float x1, float y1, float x2, float y2) |
| İki nokta arasına çizgi çiz. | |
| void | DrawRect (float x, float y, float w, float h) |
| Dikdörtgen çerçeve çiz (dolgu yok). | |
| void | FillRect (float x, float y, float w, float h) |
| Dikdörtgeni doldur. | |
| void | DrawRoundedRect (float x, float y, float w, float h, float radius) |
| Yuvarlatılmış köşeli dikdörtgen çerçevesi çiz. | |
| void | FillRoundedRect (float x, float y, float w, float h, float radius) |
| Yuvarlatılmış köşeli dikdörtgeni doldur. | |
| void | DrawCircle (float cx, float cy, float radius) |
| Daire çerçeve çiz. | |
| void | FillCircle (float cx, float cy, float radius) |
| Daireyi doldur. | |
| void | DrawEllipse (float cx, float cy, float rx, float ry) |
| Elips çerçeve çiz. | |
| void | FillEllipse (float cx, float cy, float rx, float ry) |
| Elipsi doldur. | |
| void | DrawArc (float cx, float cy, float rx, float ry, float start_degrees, float sweep_degrees) |
| Yay çiz (açık — uçları birleştirilmez). | |
| void | DrawPie (float cx, float cy, float rx, float ry, float start_degrees, float sweep_degrees) |
| Dilim (pie) çerçevesi — yay artı merkeze giden iki yarıçap. | |
| void | FillPie (float cx, float cy, float rx, float ry, float start_degrees, float sweep_degrees) |
| Dilimi doldur. Çizelgelerin (pasta grafik) temel yapı taşı. | |
| void | DrawChord (float cx, float cy, float rx, float ry, float start_degrees, float sweep_degrees) |
| Kiriş (chord) çerçevesi — yay artı uçlarını birleştiren doğru. | |
| void | FillChord (float cx, float cy, float rx, float ry, float start_degrees, float sweep_degrees) |
| Kirişi doldur. | |
| void | DrawPolygon (const std::vector< Point > &points) |
| Çok kenarlı kapalı şeklin çerçevesini çiz. | |
| void | FillPolygon (const std::vector< Point > &points) |
| Çok kenarlıyı doldur (ear clipping tessellation). | |
| void | DrawPolyline (const std::vector< Point > &points) |
| Açık çizgi dizisi çiz. | |
| void | DrawImage (const Image &image, float x, float y, const Color &tint=Color::White(), ImageFlip flip=ImageFlip::kNone) |
| Görüntüyü orijinal boyutuyla çiz. | |
| void | DrawImage (const Image &image, const Rect &dest_rect, const Color &tint=Color::White(), ImageFlip flip=ImageFlip::kNone) |
| Görüntüyü hedef dikdörtgene ölçekleyerek çiz. | |
| void | DrawImageMesh (const Image &image, int32_t cols, int32_t rows, const std::vector< Point > &points, const Color &tint=Color::White()) |
| Dokuyu serbest biçimli bir ızgara üzerine çiz. | |
| void | UpdateImage (const Image &image, const uint8_t *rgba) |
| Yüklenmiş bir görüntünün doku içeriğini yerinde güncelle. | |
| void | DrawImage (const Image &image, const Rect &src_rect, const Rect &dest_rect, const Color &tint=Color::White(), ImageFlip flip=ImageFlip::kNone) |
| Görüntünün kaynak dikdörtgenini hedef dikdörtgene çiz. | |
| void | DrawText (float x, float y, const std::string &text) |
| Noktaya metin çiz. | |
| void | DrawText (const Rect &rect, const std::string &text, Alignment alignment=Alignment::kLeft, TextWrap wrap=TextWrap::kNone) |
| Dikdörtgen içine hizalanmış metin çiz. | |
| std::size_t | CountTextLines (const std::string &text, float max_width, TextWrap wrap) const |
| Sarmalanmış metnin kaç satır tutacağını hesapla (çizmeden). | |
| void | Save () |
| Mevcut render durumunu stack'e kaydet. | |
| void | Restore () |
| Son kaydedilen durumu geri yükle. | |
| void | Translate (float dx, float dy) |
| Öteleme uygula. | |
| void | Rotate (float angle_degrees) |
| Döndürme uygula (derece). | |
| void | Scale (float sx, float sy) |
| Ölçekleme uygula. | |
| void | ResetTransform () |
| Transform'u birim matrise sıfırla. | |
| void | SetClipRect (const Rect &rect) |
| Scissor kırpma dikdörtgeni ayarla. | |
| void | ClearClip () |
| Kırpma dikdörtgenini kaldır. | |
Ana çizim sınıfı
Painter, SDL penceresi üzerinde 2B çizim yapar. Backend (OpenGL/Vulkan) IRenderer arayüzü üzerinden soyutlanır.
| sdl_painter::Painter::Painter | ( | std::unique_ptr< IRenderer > | renderer, |
| int32_t | viewport_width, | ||
| int32_t | viewport_height ) |
Hazır bir renderer ile pencere olmadan Painter oluştur.
Renderer'ın sahipliği devralınır; Initialize() çağrısı yapılmaz (çağıranın sorumluluğu). Pencere olmadığı için Begin her karede yeniden boyutlandırma yoklaması yapmaz — viewport bu ctor'da verilen değerde sabit kalır.
Offscreen render ve birim testleri (sahte IRenderer enjeksiyonu) için.
|
nodiscard |
Sarmalanmış metnin kaç satır tutacağını hesapla (çizmeden).
Yerleşim hesabı için: kutunun yüksekliğini metne göre belirlemek isteyenin, metni önce çizip ölçmesi gerekmesin.
| void sdl_painter::Painter::DrawArc | ( | float | cx, |
| float | cy, | ||
| float | rx, | ||
| float | ry, | ||
| float | start_degrees, | ||
| float | sweep_degrees ) |
Yay çiz (açık — uçları birleştirilmez).
Açı birimi derece. 0° = +x ekseni ve açı, Rotate ile aynı yönde artar. Qt'nin 1/16 derece sözleşmesi bilinçli olarak izlenmez; kütüphane içi tutarlılık tercih edildi.
| sweep_degrees | Taranan açı; negatif olabilir (ters yön), mutlak değeri 360°'ye kırpılır. |
| void sdl_painter::Painter::DrawImage | ( | const Image & | image, |
| const Rect & | src_rect, | ||
| const Rect & | dest_rect, | ||
| const Color & | tint = Color::White(), | ||
| ImageFlip | flip = ImageFlip::kNone ) |
Görüntünün kaynak dikdörtgenini hedef dikdörtgene çiz.
| void sdl_painter::Painter::DrawImage | ( | const Image & | image, |
| float | x, | ||
| float | y, | ||
| const Color & | tint = Color::White(), | ||
| ImageFlip | flip = ImageFlip::kNone ) |
Görüntüyü orijinal boyutuyla çiz.
| tint | Doku rengiyle çarpılacak renk. Varsayılan beyaz = değişiklik yok. Alfası, SetOpacity ile çarpışmaz: opaklık tüm kareye uygulanan bir uniform, tint ise yalnızca bu görüntüye aittir. |
| flip | Aynalama (bkz. ImageFlip). |
| void sdl_painter::Painter::DrawImageMesh | ( | const Image & | image, |
| int32_t | cols, | ||
| int32_t | rows, | ||
| const std::vector< Point > & | points, | ||
| const Color & | tint = Color::White() ) |
Dokuyu serbest biçimli bir ızgara üzerine çiz.
DrawImage'ın üç aşırı yüklemesi de eksen hizalı Rect alır, yani dörtgenin köşeleri bağımsız hareket edemez. Dalgalanan bayrak, sayfa kıvrımı, perspektif taklidi gibi efektler bunu gerektirir; bu aşırı yükleme IRenderer::DrawTextured'a Painter seviyesinden erişim verir.
Doku koordinatları ızgara konumundan düzgün türetilir: (c, r) köşesinin UV'si (c / cols, r / rows)'tur. Yani deformasyon yalnızca konumdadır, dokunun kendisi ızgaraya eşit dağılır.
| cols | Yatay hücre sayısı (> 0). |
| rows | Dikey hücre sayısı (> 0). |
| points | Izgara köşeleri, satır-major ve tam (cols + 1) * (rows + 1) adet. Boyut tutmuyorsa çağrı yok sayılır ve hata loglanır — sessizce yanlış geometri çizmektense. |
| tint | DrawImage ile aynı anlamda. |
| void sdl_painter::Painter::DrawRoundedRect | ( | float | x, |
| float | y, | ||
| float | w, | ||
| float | h, | ||
| float | radius ) |
Yuvarlatılmış köşeli dikdörtgen çerçevesi çiz.
Arayüz çiziminin en sık kullanılan şekli; QPainter'daki drawRoundedRect karşılığı.
| radius | Köşe yarıçapı. <= 0 ise DrawRect ile birebir aynı sonucu verir. min(w, h) / 2'yi aşarsa oraya kırpılır — sonuç stadyum (kare girdide daire) şeklidir, taşma olmaz. w veya h pozitif değilse hiçbir şey çizilmez. |
| void sdl_painter::Painter::DrawText | ( | const Rect & | rect, |
| const std::string & | text, | ||
| Alignment | alignment = Alignment::kLeft, | ||
| TextWrap | wrap = TextWrap::kNone ) |
Dikdörtgen içine hizalanmış metin çiz.
Metin dikdörtgen içinde dikey olarak ortalanır; satır sonu karakteri (LF) satır böler.
| wrap | TextWrap::kWord ise satırlar dikdörtgen genişliğini aşmayacak şekilde sözcük sınırlarından bölünür. Tek bir sözcük bile sığmıyorsa karakter sınırından bölünür (UTF-8 güvenli). Varsayılan TextWrap::kNone: davranış eskisiyle birebir aynı, uzun metin dikdörtgenden taşar. |
| void sdl_painter::Painter::DrawText | ( | float | x, |
| float | y, | ||
| const std::string & | text ) |
Noktaya metin çiz.
Satır sonu karakteri (LF) satır böler; her satır bir öncekinden Font::LineHeight kadar aşağıya çizilir. y ilk satırın baseline'ıdır.
| void sdl_painter::Painter::FillRoundedRect | ( | float | x, |
| float | y, | ||
| float | w, | ||
| float | h, | ||
| float | radius ) |
Yuvarlatılmış köşeli dikdörtgeni doldur.
Kenar durumları DrawRoundedRect ile aynıdır.
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
Son tamamlanan karenin çizim istatistikleri.
Begin sayaçları sıfırlar, End değerleri tamamlar. Dolayısıyla anlamlı okuma noktası End() sonrası — tipik olarak bir sonraki karenin çizimi sırasında (ekran üstü FPS göstergesi bunu böyle kullanır).
| void sdl_painter::Painter::SetBlendMode | ( | BlendMode | mode | ) |
Renk karıştırma modunu ayarla.
Save / Restore kapsamındadır. Opaklık gibi bir GPU durumu olduğu için batch'i kırar: mod değiştikçe bir draw call daha çıkar. Renk ve tint'in aksine vertex'te taşınamaz.
| void sdl_painter::Painter::SetDrawableSize | ( | int32_t | width, |
| int32_t | height ) |
Çizim yüzeyi boyutunu bildir (viewport + projeksiyon güncellenir).
Boyut framebuffer piksel cinsindendir. Application bunu SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED olayında çağırır.
| void sdl_painter::Painter::SetViewport | ( | int32_t | x, |
| int32_t | y, | ||
| int32_t | width, | ||
| int32_t | height ) |
Çizimi pencerenin bir alt dikdörtgeniyle sınırla.
Bölünmüş ekran, mini harita ve kenar panelleri için. Viewport ayarlandıktan sonra çizim koordinatları o alt dikdörtgene göre yereldir: (0, 0) viewport'un sol üst köşesidir ve projeksiyon width × height'a göre kurulur.
| x | Sol kenar (framebuffer piksel, sol üst köşeden). |
| y | Üst kenar (framebuffer piksel, sol üst köşeden). |
| width | Genişlik (> 0; değilse çağrı yok sayılır). |
| height | Yükseklik (> 0; değilse çağrı yok sayılır). |
| void sdl_painter::Painter::UpdateImage | ( | const Image & | image, |
| const uint8_t * | rgba ) |
Yüklenmiş bir görüntünün doku içeriğini yerinde güncelle.
Her karede değişen prosedürel dokular içindir (plazma, ısı haritası, piksel tuvali). Görüntüyü her karede yeniden yaratmaya göre farkı, doku tahsis/serbest bırakma döngüsünün hiç yaşanmamasıdır.
Görüntü henüz yüklenmemişse bu çağrı onu yükler; sonraki çağrılar aynı dokuyu günceller.
| image | Güncellenecek görüntü. 4 kanallı (RGBA8) olmalıdır; değilse çağrı yok sayılır ve hata loglanır. |
| rgba | Sıkı paketlenmiş Width() * Height() * 4 baytlık veri. |