Browse Source

LibWeb/WebGL: Implement createFramebuffer

Luke Wilde 7 months ago
parent
commit
c5e9615c29

+ 8 - 2
Libraries/LibWeb/WebGL/WebGLFramebuffer.cpp

@@ -4,6 +4,7 @@
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
+#include <LibJS/Runtime/Realm.h>
 #include <LibWeb/Bindings/WebGLFramebufferPrototype.h>
 #include <LibWeb/WebGL/WebGLFramebuffer.h>
 
@@ -11,8 +12,13 @@ namespace Web::WebGL {
 
 GC_DEFINE_ALLOCATOR(WebGLFramebuffer);
 
-WebGLFramebuffer::WebGLFramebuffer(JS::Realm& realm)
-    : WebGLObject(realm, 0)
+GC::Ptr<WebGLFramebuffer> WebGLFramebuffer::create(JS::Realm& realm, GLuint handle)
+{
+    return realm.heap().allocate<WebGLFramebuffer>(realm, handle);
+}
+
+WebGLFramebuffer::WebGLFramebuffer(JS::Realm& realm, GLuint handle)
+    : WebGLObject(realm, handle)
 {
 }
 

+ 3 - 1
Libraries/LibWeb/WebGL/WebGLFramebuffer.h

@@ -15,10 +15,12 @@ class WebGLFramebuffer final : public WebGLObject {
     GC_DECLARE_ALLOCATOR(WebGLFramebuffer);
 
 public:
+    static GC::Ptr<WebGLFramebuffer> create(JS::Realm& realm, GLuint handle);
+
     virtual ~WebGLFramebuffer();
 
 protected:
-    explicit WebGLFramebuffer(JS::Realm&);
+    explicit WebGLFramebuffer(JS::Realm&, GLuint handle);
 };
 
 }

+ 1 - 1
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);

+ 9 - 0
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<GLchar*> strings;