diff --git a/Userland/Libraries/LibWeb/Painting/PaintingCommandExecutorGPU.cpp b/Userland/Libraries/LibWeb/Painting/PaintingCommandExecutorGPU.cpp index 13fd5fd57a..ac39c18118 100644 --- a/Userland/Libraries/LibWeb/Painting/PaintingCommandExecutorGPU.cpp +++ b/Userland/Libraries/LibWeb/Painting/PaintingCommandExecutorGPU.cpp @@ -14,6 +14,7 @@ PaintingCommandExecutorGPU::PaintingCommandExecutorGPU(AccelGfx::Context& contex : m_target_bitmap(bitmap) , m_context(context) { + m_context.activate(); auto canvas = AccelGfx::Canvas::create(bitmap.size()); auto painter = AccelGfx::Painter::create(m_context, canvas); m_stacking_contexts.append({ .canvas = canvas, @@ -25,6 +26,7 @@ PaintingCommandExecutorGPU::PaintingCommandExecutorGPU(AccelGfx::Context& contex PaintingCommandExecutorGPU::~PaintingCommandExecutorGPU() { + m_context.activate(); VERIFY(m_stacking_contexts.size() == 1); painter().flush(m_target_bitmap); } @@ -418,6 +420,11 @@ void PaintingCommandExecutorGPU::prepare_glyph_texture(HashMap& immutable_bitmaps) { painter().update_immutable_bitmap_texture_cache(immutable_bitmaps); diff --git a/Userland/Libraries/LibWeb/Painting/PaintingCommandExecutorGPU.h b/Userland/Libraries/LibWeb/Painting/PaintingCommandExecutorGPU.h index 008b6412cf..4623098750 100644 --- a/Userland/Libraries/LibWeb/Painting/PaintingCommandExecutorGPU.h +++ b/Userland/Libraries/LibWeb/Painting/PaintingCommandExecutorGPU.h @@ -52,6 +52,8 @@ public: virtual bool needs_prepare_glyphs_texture() const override { return true; } void prepare_glyph_texture(HashMap> const&) override; + virtual void prepare_to_execute() override; + bool needs_update_immutable_bitmap_texture_cache() const override { return true; } void update_immutable_bitmap_texture_cache(HashMap&) override; diff --git a/Userland/Libraries/LibWeb/Painting/RecordingPainter.cpp b/Userland/Libraries/LibWeb/Painting/RecordingPainter.cpp index dc3b8c6c69..8b427de3e1 100644 --- a/Userland/Libraries/LibWeb/Painting/RecordingPainter.cpp +++ b/Userland/Libraries/LibWeb/Painting/RecordingPainter.cpp @@ -448,6 +448,8 @@ void RecordingPainter::apply_scroll_offsets(Vector const& offsets void RecordingPainter::execute(PaintingCommandExecutor& executor) { + executor.prepare_to_execute(); + if (executor.needs_prepare_glyphs_texture()) { HashMap> unique_glyphs; for (auto& command_with_scroll_id : m_painting_commands) { diff --git a/Userland/Libraries/LibWeb/Painting/RecordingPainter.h b/Userland/Libraries/LibWeb/Painting/RecordingPainter.h index 5499009e23..1f6e4f5a1c 100644 --- a/Userland/Libraries/LibWeb/Painting/RecordingPainter.h +++ b/Userland/Libraries/LibWeb/Painting/RecordingPainter.h @@ -486,6 +486,8 @@ public: virtual bool needs_prepare_glyphs_texture() const { return false; } virtual void prepare_glyph_texture(HashMap> const& unique_glyphs) = 0; + virtual void prepare_to_execute() { } + virtual bool needs_update_immutable_bitmap_texture_cache() const = 0; virtual void update_immutable_bitmap_texture_cache(HashMap&) = 0; };