SDLPainter 1.2.0
SDL3 + OpenGL/Vulkan 2D çizim kütüphanesi
Yüklüyor...
Arıyor...
Eşleşme Yok
renderer.h
1#pragma once
2
3#include "sdl_painter/export.h"
4
5#include <cstddef>
6#include <cstdint>
7#include <memory>
8#include <vector>
9
10// SDL forward declaration
11struct SDL_Window;
12
13namespace sdl_painter {
14
15struct Color;
16struct Vertex;
17struct TexturedVertex;
18
20using TextureHandle = uint32_t;
21
23constexpr TextureHandle kInvalidTexture = 0;
24
26enum class TextureFilter : uint8_t {
28 kLinear,
31 kNearest,
32};
33
38enum class BlendMode : uint8_t {
40 kAlpha,
43 kAdditive,
45 kMultiply,
48 kNone,
49};
50
52inline constexpr std::size_t kBlendModeCount = 4;
53
55enum class RendererBackend : uint8_t {
56 kOpenGL,
57 kVulkan,
58};
59
64class IRenderer {
65 public:
66 IRenderer() = default;
67 virtual ~IRenderer() = default;
68
69 // Soyut arayüz: kopyalama/taşıma kapalı (object slicing önlenir).
70 // Sahiplik daima std::unique_ptr<IRenderer> üzerinden taşınır.
71 IRenderer(const IRenderer&) = delete;
72 IRenderer& operator=(const IRenderer&) = delete;
73 IRenderer(IRenderer&&) = delete;
74 IRenderer& operator=(IRenderer&&) = delete;
75
76 // --- Yaşam döngüsü ---
77
79 virtual bool Initialize(SDL_Window* window) = 0;
80
82 virtual void Shutdown() = 0;
83
85 virtual void BeginFrame() = 0;
86
88 virtual void EndFrame() = 0;
89
90 // --- Durum ---
91
93 virtual void SetViewport(int32_t x, int32_t y, int32_t width,
94 int32_t height) = 0;
95
97 virtual void SetScissor(int32_t x, int32_t y, int32_t width,
98 int32_t height) = 0;
99
101 virtual void ClearScissor() = 0;
102
104 virtual void Clear(const Color& color) = 0;
105
107 virtual void SetOpacity(float alpha) = 0;
108
115 virtual void SetBlendMode(BlendMode mode) { (void)mode; }
116
117 // --- Çizim primitifleri (tessellated vertex'ler) ---
118
120 virtual void DrawTriangles(const std::vector<Vertex>& vertices) = 0;
121
122 // --- Texture işlemleri ---
123
125 virtual TextureHandle CreateTexture(const uint8_t* data, int32_t width,
126 int32_t height, int32_t channels) = 0;
127
135 virtual TextureHandle CreateTexture(const uint8_t* data, int32_t width,
136 int32_t height, int32_t channels,
137 TextureFilter filter) {
138 (void)filter;
139 return CreateTexture(data, width, height, channels);
140 }
141
160 virtual void UpdateTexture(TextureHandle handle, int32_t x, int32_t y,
161 int32_t width, int32_t height,
162 const uint8_t* data) = 0;
163
165 virtual void DestroyTexture(TextureHandle handle) = 0;
166
168 virtual void DrawTextured(const std::vector<TexturedVertex>& vertices,
169 TextureHandle texture) = 0;
170
171 // --- Transform ---
172
174 [[nodiscard]] virtual RendererBackend GetBackend() const = 0;
175
177 virtual void SetProjectionMatrix(const float* mat4) = 0;
178
187 virtual void SetModelMatrix(const float* mat3) = 0;
188
189 // --- Profilleme (isteğe bağlı) ---
190
200 [[nodiscard]] virtual double GetLastGpuFrameMs() const { return 0.0; }
201};
202
204SDLPAINTER_API std::unique_ptr<IRenderer> CreateRenderer(
205 RendererBackend backend);
206
207} // namespace sdl_painter
virtual void DestroyTexture(TextureHandle handle)=0
Texture'ı sil.
virtual void BeginFrame()=0
Yeni frame'e başla.
virtual void ClearScissor()=0
Scissor kırpmasını kaldır.
virtual bool Initialize(SDL_Window *window)=0
Renderer'ı verilen pencere için başlat.
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 SetScissor(int32_t x, int32_t y, int32_t width, int32_t height)=0
Scissor (kırpma) dikdörtgeni ayarla.
virtual RendererBackend GetBackend() const =0
Backend tipini döndür — projeksiyon yönü için kullanılır.
virtual void EndFrame()=0
Frame'i tamamla ve ekrana sun.
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 void SetProjectionMatrix(const float *mat4)=0
Ortografik projeksiyon matrisini ayarla (4x4, sütun-major).
virtual void Shutdown()=0
Kaynakları serbest bırak.
virtual void DrawTextured(const std::vector< TexturedVertex > &vertices, TextureHandle texture)=0
Texture'lı vertex'leri çiz. Tint rengi vertex'te taşınır.
virtual void SetBlendMode(BlendMode mode)
Renk karıştırma modunu ayarla.
Definition renderer.h:115
virtual void SetViewport(int32_t x, int32_t y, int32_t width, int32_t height)=0
Viewport'u ayarla (piksel koordinatları).
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).
Definition renderer.h:200
virtual void DrawTriangles(const std::vector< Vertex > &vertices)=0
Üçgenler çiz. Vertex listesi 3'ün katı olmalı. Renk vertex'te taşını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 TextureHandle CreateTexture(const uint8_t *data, int32_t width, int32_t height, int32_t channels, TextureFilter filter)
Örnekleme filtresi belirterek texture oluştur.
Definition renderer.h:135
RGBA renk temsili. Her kanal [0, 255] aralığında.
Definition color.h:8
Doku koordinatlı vertex — pozisyon + UV + renk (tint).
Definition vertex.h:21
Temel vertex — pozisyon + renk.
Definition vertex.h:8