/* * Copyright (c) 2024, Aliaksandr Kalenik * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::WebGL { class WEB_API OpenGLContext { public: enum class WebGLVersion { WebGL1, WebGL2, }; static OwnPtr create(NonnullRefPtr, WebGLVersion); void notify_content_will_change(); void clear_buffer_to_default_values(); void allocate_painting_surface_if_needed(); struct Impl; OpenGLContext(NonnullRefPtr, Impl, WebGLVersion); ~OpenGLContext(); void make_current(); void present(bool preserve_drawing_buffer); void set_size(Gfx::IntSize const&); RefPtr surface(); u32 default_framebuffer() const; u32 default_renderbuffer() const; Vector get_supported_extensions(); void request_extension(char const* extension_name); private: NonnullRefPtr m_skia_backend_context; Gfx::IntSize m_size; RefPtr m_painting_surface; NonnullOwnPtr m_impl; Optional> m_requestable_extensions; WebGLVersion m_webgl_version; void free_surface_resources(); #if defined(AK_OS_MACOS) void allocate_iosurface_painting_surface(); #elif defined(USE_VULKAN_IMAGES) void allocate_vkimage_painting_surface(); #endif }; }