LibWeb: Increase SkSurface's generation id when it's modified by WebGL

Skia is not aware of surface modifications done by WebGL, so we need to
manually increase generation id whenver WebGL invokes a writing
function.
This commit is contained in:
Aliaksandr Kalenik 2024-11-29 23:15:43 +01:00 committed by Alexander Kalenik
commit 46cbbda944
Notes: github-actions[bot] 2024-12-03 22:37:09 +00:00
5 changed files with 17 additions and 0 deletions

View file

@ -114,6 +114,11 @@ SkSurface& PaintingSurface::sk_surface() const
return *m_impl->surface;
}
void PaintingSurface::notify_content_will_change()
{
m_impl->surface->notifyContentWillChange(SkSurface::kDiscard_ContentChangeMode);
}
template<>
sk_sp<SkImage> PaintingSurface::sk_image_snapshot() const
{

View file

@ -34,6 +34,8 @@ public:
void read_into_bitmap(Bitmap&);
void write_from_bitmap(Bitmap&);
void notify_content_will_change();
IntSize size() const;
IntRect rect() const;

View file

@ -108,6 +108,11 @@ OwnPtr<OpenGLContext> OpenGLContext::create(NonnullRefPtr<Gfx::SkiaBackendContex
#endif
}
void OpenGLContext::notify_content_will_change()
{
m_painting_surface->notify_content_will_change();
}
void OpenGLContext::clear_buffer_to_default_values()
{
}

View file

@ -15,6 +15,7 @@ class OpenGLContext {
public:
static OwnPtr<OpenGLContext> create(NonnullRefPtr<Gfx::SkiaBackendContext>);
void notify_content_will_change();
void clear_buffer_to_default_values();
void allocate_painting_surface_if_needed();

View file

@ -205,6 +205,10 @@ public:
m_context->make_current();
)~~~");
if (gl_function_modifies_framebuffer(function.name)) {
function_impl_generator.append(" m_context->notify_content_will_change();\n"sv);
}
Vector<ByteString> gl_call_arguments;
for (size_t i = 0; i < function.parameters.size(); ++i) {
auto const& parameter = function.parameters[i];