SDLPainter 1.2.0
SDL3 + OpenGL/Vulkan 2B çizim kütüphanesi
Yüklüyor...
Arıyor...
Eşleşme Yok
Public Üye Fonksiyonlar | Tüm üyelerin listesi
sdl_painter::IRenderer Sınıf Referansabstract

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).
 

Ayrıntılı tanımlama

Backend-agnostik soyut renderer arayüzü.

OpenGL ve Vulkan implementasyonları bu arayüzü uygular. Painter, IRenderer üzerinden çalışır — backend detaylarını bilmez.

Üye Fonksiyon Dokümantasyonu

◆ CreateRenderTarget()

virtual RenderTargetHandle sdl_painter::IRenderer::CreateRenderTarget ( int32_t  width,
int32_t  height,
TextureFilter  filter 
)
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).

Parametreler
widthGenişlik (piksel, > 0).
heightYükseklik (piksel, > 0).
filterSonucu örneklerken kullanılacak filtre.
Döndürdüğü değer
Hedef tanımlayıcısı; desteklenmiyorsa veya başarısızsa kInvalidRenderTarget.

◆ CreateTexture()

virtual TextureHandle sdl_painter::IRenderer::CreateTexture ( const uint8_t *  data,
int32_t  width,
int32_t  height,
int32_t  channels,
TextureFilter  filter 
)
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.

◆ GetLastGpuFrameMs()

virtual double sdl_painter::IRenderer::GetLastGpuFrameMs ( ) const
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).

◆ GetRenderTargetTexture()

virtual TextureHandle sdl_painter::IRenderer::GetRenderTargetTexture ( RenderTargetHandle  handle) const
inlinevirtual

Hedefin içeriğini örneklemek için kullanılacak texture.

Döndürdüğü değer
DrawTextured'a verilebilecek tanımlayıcı; hedef geçersizse kInvalidTexture.

◆ ReadRenderTarget()

virtual bool sdl_painter::IRenderer::ReadRenderTarget ( RenderTargetHandle  handle,
uint8_t *  out_rgba,
std::size_t  byte_capacity 
)
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.

Parametreler
handleOkunacak hedef.
out_rgbawidth * height * 4 bayt kapasiteli tampon.
byte_capacityout_rgba'nın bayt kapasitesi; yetersizse çağrı başarısız olur (taşma yerine hata).
Döndürdüğü değer
Başarıda true.

◆ SetBlendMode()

virtual void sdl_painter::IRenderer::SetBlendMode ( BlendMode  mode)
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.

◆ SetModelMatrix()

virtual void sdl_painter::IRenderer::SetModelMatrix ( const float *  mat3)
pure virtual

Model dönüşüm matrisini ayarla (3x3, sütun-major — glm::mat3 / glm::value_ptr düzeni).

Not
Painter bu matrisi kare başına bir kez ve daima birim olarak yazar: transform CPU'da vertex'lere gömülüyor (bkz. 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.

◆ SetRenderTarget()

virtual bool sdl_painter::IRenderer::SetRenderTarget ( RenderTargetHandle  handle)
inlinevirtual

Sonraki çizimlerin gideceği hedefi seç.

Parametreler
handleHedef; kInvalidRenderTarget verilirse çizim ekrana döner.
Döndürdüğü değer
Geçiş yapıldıysa true.
Uyarı
Bir hedefe çizerken o hedefin kendi texture'ından okumak tanımsızdır. Önce hedeften çıkın, sonra örnekleyin.

◆ UpdateTexture()

virtual void sdl_painter::IRenderer::UpdateTexture ( TextureHandle  handle,
int32_t  x,
int32_t  y,
int32_t  width,
int32_t  height,
const uint8_t *  data 
)
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.

Parametreler
handleGüncellenecek texture (CreateTexture ile üretilmiş).
xHedef bölgenin sol kenarı (piksel).
yHedef bölgenin üst kenarı (piksel).
widthBölge genişliği (piksel, > 0).
heightBölge yüksekliği (piksel, > 0).
dataSıkı paketlenmiş RGBA8 piksel verisi (width * height * 4 bayt).
Uyarı
Kare ortasında çağrılabilir; ancak o kare içinde daha önce çizim komutu verilmiş bir bölgenin üzerine yazmak tanımsızdır. Yalnızca henüz kullanılmamış bölgeleri doldurun (glyph atlası bunu şerf paketlemesiyle garanti eder).

Bu sınıf için dokümantasyon aşağıdaki dosyadan üretilmiştir: