diff --git a/Libraries/LibWeb/WebGL/WebGLFramebuffer.cpp b/Libraries/LibWeb/WebGL/WebGLFramebuffer.cpp index 42792e8a838..6da513a11fd 100644 --- a/Libraries/LibWeb/WebGL/WebGLFramebuffer.cpp +++ b/Libraries/LibWeb/WebGL/WebGLFramebuffer.cpp @@ -4,6 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include @@ -11,8 +12,13 @@ namespace Web::WebGL { GC_DEFINE_ALLOCATOR(WebGLFramebuffer); -WebGLFramebuffer::WebGLFramebuffer(JS::Realm& realm) - : WebGLObject(realm, 0) +GC::Ptr WebGLFramebuffer::create(JS::Realm& realm, GLuint handle) +{ + return realm.heap().allocate(realm, handle); +} + +WebGLFramebuffer::WebGLFramebuffer(JS::Realm& realm, GLuint handle) + : WebGLObject(realm, handle) { } diff --git a/Libraries/LibWeb/WebGL/WebGLFramebuffer.h b/Libraries/LibWeb/WebGL/WebGLFramebuffer.h index 84d3ad8e154..f5d5f5d77e7 100644 --- a/Libraries/LibWeb/WebGL/WebGLFramebuffer.h +++ b/Libraries/LibWeb/WebGL/WebGLFramebuffer.h @@ -15,10 +15,12 @@ class WebGLFramebuffer final : public WebGLObject { GC_DECLARE_ALLOCATOR(WebGLFramebuffer); public: + static GC::Ptr create(JS::Realm& realm, GLuint handle); + virtual ~WebGLFramebuffer(); protected: - explicit WebGLFramebuffer(JS::Realm&); + explicit WebGLFramebuffer(JS::Realm&, GLuint handle); }; } diff --git a/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl b/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl index f612796a22c..27a3bd042b5 100644 --- a/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl +++ b/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl @@ -69,7 +69,7 @@ interface mixin WebGLRenderingContextBase { [FIXME] undefined copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); WebGLBuffer? createBuffer(); - [FIXME] WebGLFramebuffer? createFramebuffer(); + WebGLFramebuffer? createFramebuffer(); WebGLProgram? createProgram(); [FIXME] WebGLRenderbuffer? createRenderbuffer(); WebGLShader? createShader(GLenum type); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp index 5e338f06f43..4cc3590c6a6 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp @@ -415,6 +415,15 @@ public: continue; } + if (function.name == "createFramebuffer"sv) { + function_impl_generator.append(R"~~~( + GLuint handle = 0; + glGenFramebuffers(1, &handle); + return WebGLFramebuffer::create(m_realm, handle); +)~~~"); + continue; + } + if (function.name == "shaderSource"sv) { function_impl_generator.append(R"~~~( Vector strings;