aboutsummaryrefslogtreecommitdiff
path: root/src/platform/gui/sdl/OpenGLRenderer.cpp
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-12-06 16:45:24 +0800
committerYuqian Yang <crupest@crupest.life>2025-12-06 16:45:24 +0800
commit2ba85046b80d2763ed41f4aad44f1ae2f11c3a86 (patch)
treefe41a43853bf3607042dda7218ffbb8db9dfd196 /src/platform/gui/sdl/OpenGLRenderer.cpp
parentad1ba6795040d569d3b4857fcd39cdb6a7ed1c21 (diff)
downloadcru-2ba85046b80d2763ed41f4aad44f1ae2f11c3a86.tar.gz
cru-2ba85046b80d2763ed41f4aad44f1ae2f11c3a86.tar.bz2
cru-2ba85046b80d2763ed41f4aad44f1ae2f11c3a86.zip
Use derive for opengl renderer painter.
Diffstat (limited to 'src/platform/gui/sdl/OpenGLRenderer.cpp')
-rw-r--r--src/platform/gui/sdl/OpenGLRenderer.cpp20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/platform/gui/sdl/OpenGLRenderer.cpp b/src/platform/gui/sdl/OpenGLRenderer.cpp
index 78eb578e..dbd59db2 100644
--- a/src/platform/gui/sdl/OpenGLRenderer.cpp
+++ b/src/platform/gui/sdl/OpenGLRenderer.cpp
@@ -38,6 +38,21 @@ void main()
{
FragColor = texture(ourTexture, TexCoord);
})";
+
+class SdlOpenGLCairoRendererPainter : public graphics::cairo::CairoPainter {
+ public:
+ SdlOpenGLCairoRendererPainter(cairo_t* cairo, cairo_surface_t* surface,
+ SdlOpenGLRenderer* renderer)
+ : CairoPainter(nullptr, cairo, false, surface), renderer_(renderer) {}
+
+ void EndDraw() override {
+ CairoPainter::EndDraw();
+ renderer_->Present();
+ }
+
+ private:
+ SdlOpenGLRenderer* renderer_;
+};
} // namespace
SdlOpenGLRenderer::SdlOpenGLRenderer(SdlWindow* window, int width, int height) {
@@ -166,9 +181,8 @@ std::unique_ptr<graphics::IPainter> SdlOpenGLRenderer::BeginPaint() {
assert(cairo_surface_);
assert(gl_texture_);
- auto painter = std::make_unique<graphics::cairo::CairoPainter>(
- nullptr, cairo_, false, cairo_surface_);
- painter->SetEndDrawCallback([this] { Present(); });
+ auto painter = std::make_unique<SdlOpenGLCairoRendererPainter>(
+ cairo_, cairo_surface_, this);
return painter;
}