|
SDLPainter 1.2.0
SDL3 + OpenGL/Vulkan 2B çizim kütüphanesi
|
Backend-agnostik soyut renderer arayüzü. Ayrıntılar...
#include <renderer.h>
Public Üye Fonksiyonlar | |
| virtual bool | Initialize (SDL_Window *window)=0 |
| Renderer'ı verilen pencere için başlat. | |
| virtual void | Shutdown ()=0 |
| Kaynakları serbest bırak. | |
| virtual void | BeginFrame ()=0 |
| Yeni frame'e başla. | |
| virtual void | EndFrame ()=0 |
| Frame'i tamamla ve ekrana sun. | |
| virtual void | SetViewport (int32_t x, int32_t y, int32_t width, int32_t height)=0 |
| Viewport'u ayarla (piksel koordinatları). | |
| virtual void | SetScissor (int32_t x, int32_t y, int32_t width, int32_t height)=0 |
| Scissor (kırpma) dikdörtgeni ayarla. | |
| virtual void | ClearScissor ()=0 |
| Scissor kırpmasını kaldır. | |
| virtual void | Clear (const Color &color)=0 |
| Ekranı belirtilen renkle temizle. | |
| virtual void | SetOpacity (float alpha)=0 |
| Global opaklığı ayarla [0.0, 1.0]. | |
| virtual void | SetBlendMode (BlendMode mode) |
| Renk karıştırma modunu ayarla. | |
| virtual void | DrawTriangles (const std::vector< Vertex > &vertices)=0 |
| Üçgenler çiz. Vertex listesi 3'ün katı olmalı. Renk vertex'te taşınır. | |
| virtual TextureHandle | CreateTexture (const uint8_t *data, int32_t width, int32_t height, int32_t channels)=0 |
| Ham piksel verisinden texture oluştur. Başarısızlıkta kInvalidTexture döner. | |
| virtual TextureHandle | CreateTexture (const uint8_t *data, int32_t width, int32_t height, int32_t channels, TextureFilter filter) |
| Örnekleme filtresi belirterek texture oluştur. | |
| virtual void | UpdateTexture (TextureHandle handle, int32_t x, int32_t y, int32_t width, int32_t height, const uint8_t *data)=0 |
| Var olan bir texture'ın alt bölgesini güncelle (sub-image yükleme). | |
| virtual void | DestroyTexture (TextureHandle handle)=0 |
| Texture'ı sil. | |
| virtual void | DrawTextured (const std::vector< TexturedVertex > &vertices, TextureHandle texture)=0 |
| Texture'lı vertex'leri çiz. Tint rengi vertex'te taşınır. | |
| virtual RenderTargetHandle | CreateRenderTarget (int32_t width, int32_t height, TextureFilter filter) |
| Çizilebilir bir offscreen hedef oluştur. | |
| virtual void | DestroyRenderTarget (RenderTargetHandle handle) |
| Hedefi ve ona ait tüm kaynakları serbest bırak. | |
| virtual TextureHandle | GetRenderTargetTexture (RenderTargetHandle handle) const |
| Hedefin içeriğini örneklemek için kullanılacak texture. | |
| virtual bool | SetRenderTarget (RenderTargetHandle handle) |
| Sonraki çizimlerin gideceği hedefi seç. | |
| virtual bool | ReadRenderTarget (RenderTargetHandle handle, uint8_t *out_rgba, std::size_t byte_capacity) |
| Hedefin piksellerini ana belleğe oku. | |
| virtual RendererBackend | GetBackend () const =0 |
| Backend tipini döndür — projeksiyon yönü için kullanılır. | |
| virtual void | SetProjectionMatrix (const float *mat4)=0 |
| Ortografik projeksiyon matrisini ayarla (4x4, sütun-major). | |
| virtual void | SetModelMatrix (const float *mat3)=0 |
| Model dönüşüm matrisini ayarla (3x3, sütun-major — glm::mat3 / glm::value_ptr düzeni). | |
| virtual double | GetLastGpuFrameMs () const |
| Son tamamlanan karenin GPU süresi (milisaniye). | |
Backend-agnostik soyut renderer arayüzü.
OpenGL ve Vulkan implementasyonları bu arayüzü uygular. Painter, IRenderer üzerinden çalışır — backend detaylarını bilmez.
|
inlinevirtual |
Çizilebilir bir offscreen hedef oluştur.
Hedefin içeriği GetRenderTargetTexture ile bir texture olarak örneklenebilir; yani "önce dokuya çiz, sonra o dokuyu ekrana bas" akışı mümkün olur (mini harita, son işlem efektleri, iz efekti).
| width | Genişlik (piksel, > 0). |
| height | Yükseklik (piksel, > 0). |
| filter | Sonucu örneklerken kullanılacak filtre. |
|
inlinevirtual |
Örnekleme filtresi belirterek texture oluştur.
Saf sanal değildir: varsayılan gövde filtreyi yok sayıp yukarıdaki aşırı yüklemeye düşer. Böylece bu arayüzü dışarıda implemente etmiş kod, filtre desteği gelmeden önce yazılmış olsa bile derlenmeye devam eder ve doğrusal filtreyle çalışır. Aynı yaklaşım GetLastGpuFrameMs için de kullanılıyor.
|
inlinevirtual |
Son tamamlanan karenin GPU süresi (milisaniye).
Saf sanal değildir: ölçüm desteklemeyen backend'ler ve tüketici tarafındaki basit implementasyonlar bunu görmezden gelebilir. Varsayılan 0.0 = "ölçülmüyor".
Sonuç bir kare gecikmeli olabilir; implementasyon, sorgu sonucunu beklemek yerine hazır olan en son değeri döndürmelidir (bekleme, ölçtüğü şeyi bozan bir CPU–GPU senkronizasyonu yaratır).
|
inlinevirtual |
Hedefin içeriğini örneklemek için kullanılacak texture.
|
inlinevirtual |
Hedefin piksellerini ana belleğe oku.
Formatı sıkı paketlenmiş, doğrusal RGBA8'dir ve satırlar yukarıdan aşağı sıralanır — iki backend'de de birebir aynı. Bu, hedeflerin ekran yüzeyinin formatını devralmamasının sebebidir: yüzey formatı sürücüye göre BGRA veya sRGB olabilir ve o zaman "iki backend aynı çizimde farklı bayt üretti" bulgusu gerçek bir hatayı değil, yalnızca format farkını gösterirdi.
Çağrı bloklar: GPU'nun işi bitene kadar bekler. Kare döngüsünde değil, ekran görüntüsü alma ve test gibi yerlerde kullanılmalıdır.
| handle | Okunacak hedef. |
| out_rgba | width * height * 4 bayt kapasiteli tampon. |
| byte_capacity | out_rgba'nın bayt kapasitesi; yetersizse çağrı başarısız olur (taşma yerine hata). |
true.
|
inlinevirtual |
Renk karıştırma modunu ayarla.
Saf sanal değildir: varsayılan gövde çağrıyı yok sayar, yani bu arayüzü dışarıda implemente etmiş kod derlenmeye devam eder ve standart alfa karıştırmayla çalışır. Aynı yaklaşım GetLastGpuFrameMs ve filtreli CreateTexture için de kullanılıyor.
|
pure virtual |
Model dönüşüm matrisini ayarla (3x3, sütun-major — glm::mat3 / glm::value_ptr düzeni).
examples/benchmarks/README.md). Arayüzde kalmasının sebebi, kendi backend'ini yazanların matris yolunu hâlâ kullanabilmesi ve mevcut shader'ların değişmemesidir.
|
inlinevirtual |
Sonraki çizimlerin gideceği hedefi seç.
| handle | Hedef; kInvalidRenderTarget verilirse çizim ekrana döner. |
true.
|
pure virtual |
Var olan bir texture'ın alt bölgesini güncelle (sub-image yükleme).
Glyph atlası gibi artımlı doldurulan texture'lar için gereklidir: her yeni glyph'te tüm sayfayı yeniden yaratmak yerine yalnızca ilgili dikdörtgen yüklenir.
| handle | Güncellenecek texture (CreateTexture ile üretilmiş). |
| x | Hedef bölgenin sol kenarı (piksel). |
| y | Hedef bölgenin üst kenarı (piksel). |
| width | Bölge genişliği (piksel, > 0). |
| height | Bölge yüksekliği (piksel, > 0). |
| data | Sıkı paketlenmiş RGBA8 piksel verisi (width * height * 4 bayt). |