SDLPainter 1.2.0
SDL3 + OpenGL/Vulkan 2D çizim kütüphanesi
Yüklüyor...
Arıyor...
Eşleşme Yok
application.h
1#pragma once
2
3#include "sdl_painter/app/app_config.h"
4#include "sdl_painter/app/events.h"
5#include "sdl_painter/app/export.h"
6#include "sdl_painter/painter.h"
7
8#include <cstdint>
9#include <memory>
10#include <string>
11
12// SDL forward declaration'ları — public başlığa SDL sızmasın.
13struct SDL_Window;
14union SDL_Event; // SDL3'te SDL_Event bir union'dır (typedef ile aynı etiket).
15
16namespace sdl_painter {
17
18namespace app_detail {
19class StatsOverlay;
20} // namespace app_detail
21
54class SDLPAINTER_APP_API Application {
55 public:
57 explicit Application(AppConfig config = {});
58
60 virtual ~Application();
61
62 Application(const Application&) = delete;
63 Application& operator=(const Application&) = delete;
64 Application(Application&&) = delete;
65 Application& operator=(Application&&) = delete;
66
69 int Run();
70
72 void Quit() noexcept;
73
77 [[nodiscard]] int32_t Width() const noexcept { return mWidth; }
78
80 [[nodiscard]] int32_t Height() const noexcept { return mHeight; }
81
83 void SetTitle(const std::string& title);
84
86 [[nodiscard]] SDL_Window* GetWindow() const noexcept { return mWindow; }
87
88 // --- Kare hızı ve istatistik göstergesi ---
89
94 [[nodiscard]] double Fps() const noexcept;
95
97 [[nodiscard]] const FrameStats& GetFrameStats() const noexcept;
98
100 void SetStatsOverlay(StatsOverlayMode mode) noexcept { mStatsMode = mode; }
101
103 [[nodiscard]] StatsOverlayMode GetStatsOverlay() const noexcept {
104 return mStatsMode;
105 }
106
107 protected:
109 [[nodiscard]] Painter& GetPainter() { return *mPainter; }
110
113 virtual bool OnInit() { return true; }
114
118 virtual void OnUpdate(float dt) { (void)dt; }
119
123 virtual void OnRender(Painter& painter) { (void)painter; }
124
135 virtual void OnRender(Painter& painter, float alpha) {
136 (void)alpha;
137 OnRender(painter);
138 }
139
141 virtual void OnKeyDown(const KeyEvent& event) { (void)event; }
142
144 virtual void OnKeyUp(const KeyEvent& event) { (void)event; }
145
147 virtual void OnMouseButtonDown(const MouseButtonEvent& event) { (void)event; }
148
150 virtual void OnMouseButtonUp(const MouseButtonEvent& event) { (void)event; }
151
153 virtual void OnMouseMove(const MouseMoveEvent& event) { (void)event; }
154
156 virtual void OnMouseWheel(const MouseWheelEvent& event) { (void)event; }
157
159 virtual void OnResize(const ResizeEvent& event) { (void)event; }
160
165 virtual bool OnRawEvent(const SDL_Event& event) {
166 (void)event;
167 return false;
168 }
169
171 virtual void OnShutdown() {}
172
173 private:
174 bool Initialize();
175 void Teardown() noexcept;
176 void ProcessEvents();
177
179 void UpdateDrawableSize();
180
182 void UpdateTitleFps(uint64_t frame_ns);
183
184 AppConfig mConfig;
185 SDL_Window* mWindow{nullptr};
186 std::unique_ptr<Painter> mPainter;
187 bool mRunning{false};
188 bool mSdlInitialized{false};
189 bool mHasRun{false};
190 uint64_t mLastTickNs{0};
191 int32_t mWidth{0};
192 int32_t mHeight{0};
193
194 // --- Istatistik gostergesi ---
195 std::unique_ptr<app_detail::StatsOverlay> mStatsOverlay;
196 StatsOverlayMode mStatsMode{StatsOverlayMode::kNone};
197 uint64_t mTitleUpdateNs{0};
198};
199
200} // namespace sdl_painter
int32_t Height() const noexcept
Güncel çizim yüzeyi yüksekliği (framebuffer piksel).
Definition application.h:80
virtual void OnMouseWheel(const MouseWheelEvent &event)
Fare tekerleği döndü.
Definition application.h:156
double Fps() const noexcept
Yumuşatılmış kare hızı (kare/saniye).
virtual bool OnRawEvent(const SDL_Event &event)
Ham SDL olayı — kaçış kapısı.
Definition application.h:165
StatsOverlayMode GetStatsOverlay() const noexcept
Güncel gösterge modu.
Definition application.h:103
virtual void OnShutdown()
Döngü bittikten sonra bir kez çağrılır (temizlik).
Definition application.h:171
virtual void OnResize(const ResizeEvent &event)
Pencere yeniden boyutlandı.
Definition application.h:159
SDL_Window * GetWindow() const noexcept
Alttaki SDL penceresi — belgelenmiş kaçış kapısı (ileri kullanım).
Definition application.h:86
virtual void OnMouseButtonUp(const MouseButtonEvent &event)
Fare düğmesi bırakıldı.
Definition application.h:150
virtual ~Application()
Painter → pencere → SDL_Quit sırasıyla kaynakları serbest bırakır.
virtual void OnKeyDown(const KeyEvent &event)
Tuşa basıldı.
Definition application.h:141
Application(AppConfig config={})
Verilen yapılandırma ile uygulamayı oluştur (init Run içinde).
const FrameStats & GetFrameStats() const noexcept
Son tamamlanan karenin çizim istatistikleri.
virtual void OnRender(Painter &painter)
Her frame'de çizim.
Definition application.h:123
void SetTitle(const std::string &title)
Pencere başlığını güncelle.
virtual void OnRender(Painter &painter, float alpha)
İnterpolasyonlu çizim — alpha son sabit adımdan bu yana biriken artık zamanın oranı [0,...
Definition application.h:135
int Run()
Uygulamayı başlat ve olay döngüsünü çalıştır.
Painter & GetPainter()
Aktif Painter — yalnızca Run çalışırken (OnInit dahil) geçerli.
Definition application.h:109
void Quit() noexcept
Olay döngüsünden çıkışı iste (bir sonraki iterasyonda durur).
int32_t Width() const noexcept
Güncel çizim yüzeyi genişliği (framebuffer piksel).
Definition application.h:77
virtual void OnMouseMove(const MouseMoveEvent &event)
Fare hareket etti.
Definition application.h:153
void SetStatsOverlay(StatsOverlayMode mode) noexcept
Ekran üstü gösterge modunu değiştir.
Definition application.h:100
virtual bool OnInit()
Döngü başlamadan bir kez çağrılır (kaynak yükleme vb.).
Definition application.h:113
virtual void OnMouseButtonDown(const MouseButtonEvent &event)
Fare düğmesine basıldı.
Definition application.h:147
virtual void OnKeyUp(const KeyEvent &event)
Tuş bırakıldı.
Definition application.h:144
virtual void OnUpdate(float dt)
Her frame'de güncelleme — dt saniye cinsinden delta zaman.
Definition application.h:118
Ana çizim sınıfı
Definition painter.h:58
Application penceresi ve backend yapılandırması.
Definition app_config.h:43
Bir karenin çizim maliyeti — profilleme ve ekran üstü gösterim için.
Definition frame_stats.h:16
Klavye olayı.
Definition events.h:134
Fare düğmesi olayı.
Definition events.h:141
Fare hareketi olayı.
Definition events.h:149
Fare tekerleği olayı.
Definition events.h:157
Pencere yeniden boyutlandırma olayı.
Definition events.h:165