SDLPainter 1.4.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
92 [[nodiscard]] double Fps() const noexcept;
93
95 [[nodiscard]] const FrameStats& GetFrameStats() const noexcept;
96
98 void SetStatsOverlay(StatsOverlayMode mode) noexcept { mStatsMode = mode; }
99
101 [[nodiscard]] StatsOverlayMode GetStatsOverlay() const noexcept {
102 return mStatsMode;
103 }
104
105 protected:
107 [[nodiscard]] Painter& GetPainter() { return *mPainter; }
108
111 virtual bool OnInit() { return true; }
112
116 virtual void OnUpdate(float dt) { (void)dt; }
117
121 virtual void OnRender(Painter& painter) { (void)painter; }
122
133 virtual void OnRender(Painter& painter, float alpha) {
134 (void)alpha;
135 OnRender(painter);
136 }
137
139 virtual void OnKeyDown(const KeyEvent& event) { (void)event; }
140
142 virtual void OnKeyUp(const KeyEvent& event) { (void)event; }
143
145 virtual void OnMouseButtonDown(const MouseButtonEvent& event) { (void)event; }
146
148 virtual void OnMouseButtonUp(const MouseButtonEvent& event) { (void)event; }
149
151 virtual void OnMouseMove(const MouseMoveEvent& event) { (void)event; }
152
154 virtual void OnMouseWheel(const MouseWheelEvent& event) { (void)event; }
155
157 virtual void OnResize(const ResizeEvent& event) { (void)event; }
158
163 virtual bool OnRawEvent(const SDL_Event& event) {
164 (void)event;
165 return false;
166 }
167
169 virtual void OnShutdown() {}
170
171 private:
172 bool Initialize();
173 void Teardown() noexcept;
174 void ProcessEvents();
175
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
199 float mPixelDensity{1.0F};
200
201 std::unique_ptr<app_detail::StatsOverlay> mStatsOverlay;
202 StatsOverlayMode mStatsMode{StatsOverlayMode::kNone};
203 uint64_t mTitleUpdateNs{0};
204};
205
206} // 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:154
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:163
StatsOverlayMode GetStatsOverlay() const noexcept
Güncel gösterge modu.
Definition application.h:101
virtual void OnShutdown()
Döngü bittikten sonra bir kez çağrılır (temizlik).
Definition application.h:169
virtual void OnResize(const ResizeEvent &event)
Pencere yeniden boyutlandı.
Definition application.h:157
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:148
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:139
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:121
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:133
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:107
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:151
void SetStatsOverlay(StatsOverlayMode mode) noexcept
Ekran üstü gösterge modunu değiştir.
Definition application.h:98
virtual bool OnInit()
Döngü başlamadan bir kez çağrılır (kaynak yükleme vb.).
Definition application.h:111
virtual void OnMouseButtonDown(const MouseButtonEvent &event)
Fare düğmesine basıldı.
Definition application.h:145
virtual void OnKeyUp(const KeyEvent &event)
Tuş bırakıldı.
Definition application.h:142
virtual void OnUpdate(float dt)
Her frame'de güncelleme — dt saniye cinsinden delta zaman.
Definition application.h:116
Ana çizim sınıfı
Definition painter.h:63
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:140
Fare hareketi olayı.
Definition events.h:148
Fare tekerleği olayı.
Definition events.h:156
Pencere yeniden boyutlandırma olayı.
Definition events.h:164