diff options
| author | Yuqian Yang <crupest@crupest.life> | 2025-12-06 16:45:24 +0800 |
|---|---|---|
| committer | Yuqian Yang <crupest@crupest.life> | 2025-12-06 16:45:24 +0800 |
| commit | 2ba85046b80d2763ed41f4aad44f1ae2f11c3a86 (patch) | |
| tree | fe41a43853bf3607042dda7218ffbb8db9dfd196 /src/platform/gui/sdl | |
| parent | ad1ba6795040d569d3b4857fcd39cdb6a7ed1c21 (diff) | |
| download | cru-2ba85046b80d2763ed41f4aad44f1ae2f11c3a86.tar.gz cru-2ba85046b80d2763ed41f4aad44f1ae2f11c3a86.tar.bz2 cru-2ba85046b80d2763ed41f4aad44f1ae2f11c3a86.zip | |
Use derive for opengl renderer painter.
Diffstat (limited to 'src/platform/gui/sdl')
| -rw-r--r-- | src/platform/gui/sdl/OpenGLRenderer.cpp | 20 |
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; } |
