Browse Source

LibWeb: Add WebGLObject interface

Jelle Raaijmakers 8 months ago
parent
commit
e6ee7f3e64

+ 1 - 0
Libraries/LibWeb/CMakeLists.txt

@@ -779,6 +779,7 @@ set(SOURCES
     WebGL/OpenGLContext.cpp
     WebGL/OpenGLContext.cpp
     WebGL/WebGLContextAttributes.cpp
     WebGL/WebGLContextAttributes.cpp
     WebGL/WebGLContextEvent.cpp
     WebGL/WebGLContextEvent.cpp
+    WebGL/WebGLObject.cpp
     WebGL/WebGLRenderingContext.cpp
     WebGL/WebGLRenderingContext.cpp
     WebGL/WebGLRenderingContextBase.cpp
     WebGL/WebGLRenderingContextBase.cpp
     WebIDL/AbstractOperations.cpp
     WebIDL/AbstractOperations.cpp

+ 18 - 0
Libraries/LibWeb/WebGL/WebGLObject.cpp

@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2024, Jelle Raaijmakers <jelle@ladybird.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <LibWeb/WebGL/WebGLObject.h>
+
+namespace Web::WebGL {
+
+WebGLObject::WebGLObject(JS::Realm& realm)
+    : Bindings::PlatformObject(realm)
+{
+}
+
+WebGLObject::~WebGLObject() = default;
+
+}

+ 32 - 0
Libraries/LibWeb/WebGL/WebGLObject.h

@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2024, Jelle Raaijmakers <jelle@ladybird.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibWeb/Bindings/PlatformObject.h>
+
+namespace Web::WebGL {
+
+class WebGLObject : public Bindings::PlatformObject {
+    WEB_PLATFORM_OBJECT(WebGLRenderingContextBase, Bindings::PlatformObject);
+
+public:
+    virtual ~WebGLObject();
+
+    String label() const { return m_label; }
+    void set_label(String const& label) { m_label = label; }
+
+protected:
+    explicit WebGLObject(JS::Realm&);
+
+    bool invalidated() const { return m_invalidated; }
+
+private:
+    bool m_invalidated { false };
+    String m_label;
+};
+
+}

+ 5 - 0
Libraries/LibWeb/WebGL/WebGLObject.idl

@@ -0,0 +1,5 @@
+// https://registry.khronos.org/webgl/specs/latest/1.0/#5.3
+[Exposed=(Window,Worker)]
+interface WebGLObject {
+    attribute USVString label;
+};

+ 1 - 0
Libraries/LibWeb/idl_files.cmake

@@ -360,6 +360,7 @@ libweb_js_bindings(WebAudio/OfflineAudioContext)
 libweb_js_bindings(WebAudio/OscillatorNode)
 libweb_js_bindings(WebAudio/OscillatorNode)
 libweb_js_bindings(WebAudio/PeriodicWave)
 libweb_js_bindings(WebAudio/PeriodicWave)
 libweb_js_bindings(WebGL/WebGLContextEvent)
 libweb_js_bindings(WebGL/WebGLContextEvent)
+libweb_js_bindings(WebGL/WebGLObject)
 libweb_js_bindings(WebGL/WebGLRenderingContext)
 libweb_js_bindings(WebGL/WebGLRenderingContext)
 libweb_js_bindings(WebIDL/DOMException)
 libweb_js_bindings(WebIDL/DOMException)
 libweb_js_bindings(WebSockets/WebSocket)
 libweb_js_bindings(WebSockets/WebSocket)

+ 1 - 0
Meta/gn/secondary/Userland/Libraries/LibWeb/idl_files.gni

@@ -372,6 +372,7 @@ standard_idl_files = [
   "//Userland/Libraries/LibWeb/WebAudio/OscillatorNode.idl",
   "//Userland/Libraries/LibWeb/WebAudio/OscillatorNode.idl",
   "//Userland/Libraries/LibWeb/WebAudio/PeriodicWave.idl",
   "//Userland/Libraries/LibWeb/WebAudio/PeriodicWave.idl",
   "//Userland/Libraries/LibWeb/WebGL/WebGLContextEvent.idl",
   "//Userland/Libraries/LibWeb/WebGL/WebGLContextEvent.idl",
+  "//Userland/Libraries/LibWeb/WebGL/WebGLObject.idl",
   "//Userland/Libraries/LibWeb/WebGL/WebGLRenderingContext.idl",
   "//Userland/Libraries/LibWeb/WebGL/WebGLRenderingContext.idl",
   "//Userland/Libraries/LibWeb/WebIDL/DOMException.idl",
   "//Userland/Libraries/LibWeb/WebIDL/DOMException.idl",
   "//Userland/Libraries/LibWeb/WebSockets/WebSocket.idl",
   "//Userland/Libraries/LibWeb/WebSockets/WebSocket.idl",

+ 1 - 0
Tests/LibWeb/Text/expected/all-window-properties.txt

@@ -391,6 +391,7 @@ WeakMap
 WeakRef
 WeakRef
 WeakSet
 WeakSet
 WebGLContextEvent
 WebGLContextEvent
+WebGLObject
 WebGLRenderingContext
 WebGLRenderingContext
 WebKitCSSMatrix
 WebKitCSSMatrix
 WebSocket
 WebSocket