aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/cru/platform/graphics/cairo/CairoPainter.h4
-rw-r--r--include/cru/platform/gui/sdl/OpenGLRenderer.h27
-rw-r--r--include/cru/platform/gui/sdl/Window.h7
3 files changed, 35 insertions, 3 deletions
diff --git a/include/cru/platform/graphics/cairo/CairoPainter.h b/include/cru/platform/graphics/cairo/CairoPainter.h
index 0833e42b..039cef60 100644
--- a/include/cru/platform/graphics/cairo/CairoPainter.h
+++ b/include/cru/platform/graphics/cairo/CairoPainter.h
@@ -4,6 +4,7 @@
#include <cru/base/Base.h>
#include <cru/platform/graphics/Painter.h>
+#include <functional>
#include <vector>
namespace cru::platform::graphics::cairo {
@@ -48,6 +49,8 @@ class CRU_PLATFORM_GRAPHICS_CAIRO_API CairoPainter : public CairoResource,
void EndDraw() override;
+ void SetEndDrawCallback(std::function<void()> action);
+
private:
void CheckValidation();
@@ -55,6 +58,7 @@ class CRU_PLATFORM_GRAPHICS_CAIRO_API CairoPainter : public CairoResource,
cairo_t* cairo_;
bool auto_release_;
+ std::function<void()> end_draw_callback_;
cairo_surface_t* cairo_surface_;
diff --git a/include/cru/platform/gui/sdl/OpenGLRenderer.h b/include/cru/platform/gui/sdl/OpenGLRenderer.h
index 2db9d68d..18de3d55 100644
--- a/include/cru/platform/gui/sdl/OpenGLRenderer.h
+++ b/include/cru/platform/gui/sdl/OpenGLRenderer.h
@@ -3,8 +3,13 @@
#include "gl.h"
#include <cru/base/Base.h>
+#include <cru/base/Guard.h>
+#include <cru/platform/GraphicsBase.h>
+#include <cru/platform/graphics/Painter.h>
+#include <cru/platform/gui/Base.h>
#include <SDL3/SDL_video.h>
+#include <cairo.h>
namespace cru::platform::gui::sdl {
class SdlWindow;
@@ -12,14 +17,34 @@ class SdlWindow;
class SdlOpenGLRenderer {
CRU_DEFINE_CLASS_LOG_TAG("cru::platform::gui::sdl::SdlOpenGLRenderer")
public:
- explicit SdlOpenGLRenderer(SdlWindow* window);
+ SdlOpenGLRenderer(SdlWindow* window, int width, int height);
~SdlOpenGLRenderer();
+ void Resize(int width, int height);
+ std::unique_ptr<graphics::IPainter> BeginPaint();
+ void Present();
+
+ private:
+ GLuint CreateGLProgram();
+ Guard MakeContextCurrent();
+
private:
SdlWindow* window_;
SDL_Window* sdl_window_;
SDL_WindowID sdl_window_id_;
+
+ int width_, height_;
+
SDL_GLContext sdl_gl_context_;
GladGLContext glad_gl_context_;
+
+ GLuint gl_shader_program_;
+ GLuint gl_vertex_array_;
+ GLuint gl_vertex_buffer_;
+ GLuint gl_element_buffer_;
+ GLuint gl_texture_;
+
+ cairo_surface_t* cairo_surface_;
+ cairo_t* cairo_;
};
} // namespace cru::platform::gui::sdl
diff --git a/include/cru/platform/gui/sdl/Window.h b/include/cru/platform/gui/sdl/Window.h
index 28837c71..41e5befb 100644
--- a/include/cru/platform/gui/sdl/Window.h
+++ b/include/cru/platform/gui/sdl/Window.h
@@ -2,6 +2,7 @@
#include "Base.h"
#include <cru/platform/GraphicsBase.h>
+#include <cru/platform/gui/UiApplication.h>
#include <cru/platform/gui/Window.h>
#include <SDL3/SDL_events.h>
@@ -114,11 +115,13 @@ class SdlWindow : public SdlResource, public virtual INativeWindow {
#ifdef __unix
private:
- void UnixOnCreateWindow();
- void UnixOnDestroyWindow();
+ void UnixOnCreate(int width, int height);
+ void UnixOnDestroy();
+ void UnixOnResize(int width, int height);
private:
std::unique_ptr<SdlOpenGLRenderer> renderer_;
+ TimerAutoCanceler repaint_timer_canceler_;
#endif
};
} // namespace cru::platform::gui::sdl