diff --git a/Libraries/LibWeb/CMakeLists.txt b/Libraries/LibWeb/CMakeLists.txt index c88ea9f0f8c..a737bdb3c7c 100644 --- a/Libraries/LibWeb/CMakeLists.txt +++ b/Libraries/LibWeb/CMakeLists.txt @@ -811,6 +811,7 @@ set(SOURCES WebGL/WebGLFramebuffer.cpp WebGL/WebGLObject.cpp WebGL/WebGLProgram.cpp + WebGL/WebGLQuery.cpp WebGL/WebGLRenderbuffer.cpp WebGL/WebGLRenderingContext.cpp WebGL/WebGLShader.cpp diff --git a/Libraries/LibWeb/WebGL/WebGLQuery.cpp b/Libraries/LibWeb/WebGL/WebGLQuery.cpp new file mode 100644 index 00000000000..e491ff064db --- /dev/null +++ b/Libraries/LibWeb/WebGL/WebGLQuery.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2024, Andrew Kaster + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include + +namespace Web::WebGL { + +GC_DEFINE_ALLOCATOR(WebGLQuery); + +GC::Ref WebGLQuery::create(JS::Realm& realm, GLuint handle) +{ + return realm.create(realm, handle); +} + +WebGLQuery::WebGLQuery(JS::Realm& realm, GLuint handle) + : WebGLObject(realm, handle) +{ +} + +WebGLQuery::~WebGLQuery() = default; + +void WebGLQuery::initialize(JS::Realm& realm) +{ + Base::initialize(realm); + WEB_SET_PROTOTYPE_FOR_INTERFACE(WebGLQuery); +} + +} diff --git a/Libraries/LibWeb/WebGL/WebGLQuery.h b/Libraries/LibWeb/WebGL/WebGLQuery.h new file mode 100644 index 00000000000..79d3f7640da --- /dev/null +++ b/Libraries/LibWeb/WebGL/WebGLQuery.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2024, Andrew Kaster + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace Web::WebGL { + +class WebGLQuery : public WebGLObject { + WEB_PLATFORM_OBJECT(WebGLQuery, WebGLObject); + GC_DECLARE_ALLOCATOR(WebGLQuery); + +public: + static GC::Ref create(JS::Realm& realm, GLuint handle); + + virtual ~WebGLQuery() override; + +protected: + explicit WebGLQuery(JS::Realm&, GLuint handle); + + virtual void initialize(JS::Realm&) override; +}; + +} diff --git a/Libraries/LibWeb/WebGL/WebGLQuery.idl b/Libraries/LibWeb/WebGL/WebGLQuery.idl new file mode 100644 index 00000000000..e0ee6f55c9e --- /dev/null +++ b/Libraries/LibWeb/WebGL/WebGLQuery.idl @@ -0,0 +1,6 @@ +#import + +// https://registry.khronos.org/webgl/specs/latest/2.0/#3.2 +[Exposed=(Window,Worker)] +interface WebGLQuery : WebGLObject { +}; diff --git a/Libraries/LibWeb/idl_files.cmake b/Libraries/LibWeb/idl_files.cmake index e93c1103260..ca17331ebfe 100644 --- a/Libraries/LibWeb/idl_files.cmake +++ b/Libraries/LibWeb/idl_files.cmake @@ -375,6 +375,7 @@ libweb_js_bindings(WebGL/WebGLContextEvent) libweb_js_bindings(WebGL/WebGLFramebuffer) libweb_js_bindings(WebGL/WebGLObject) libweb_js_bindings(WebGL/WebGLProgram) +libweb_js_bindings(WebGL/WebGLQuery) libweb_js_bindings(WebGL/WebGLRenderbuffer) libweb_js_bindings(WebGL/WebGLRenderingContext) libweb_js_bindings(WebGL/WebGLShader) diff --git a/Tests/LibWeb/Text/expected/all-window-properties.txt b/Tests/LibWeb/Text/expected/all-window-properties.txt index cc3e7e7dbf8..d6eaa98f3a9 100644 --- a/Tests/LibWeb/Text/expected/all-window-properties.txt +++ b/Tests/LibWeb/Text/expected/all-window-properties.txt @@ -404,6 +404,7 @@ WebGLContextEvent WebGLFramebuffer WebGLObject WebGLProgram +WebGLQuery WebGLRenderbuffer WebGLRenderingContext WebGLShader