From 5392aabdedd8067e423f46d7f5978a1805cf91d9 Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Thu, 5 Dec 2024 16:42:04 +0000 Subject: [PATCH] LibWeb/WebGL: Implement texSubImage2D with ArrayBufferView --- .../LibWeb/WebGL/WebGLRenderingContextOverloads.idl | 2 +- .../LibWeb/GenerateWebGLRenderingContext.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Libraries/LibWeb/WebGL/WebGLRenderingContextOverloads.idl b/Libraries/LibWeb/WebGL/WebGLRenderingContextOverloads.idl index 3b24327f4af..54d7f075ace 100644 --- a/Libraries/LibWeb/WebGL/WebGLRenderingContextOverloads.idl +++ b/Libraries/LibWeb/WebGL/WebGLRenderingContextOverloads.idl @@ -30,7 +30,7 @@ interface mixin WebGLRenderingContextOverloads { undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels); undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLenum format, GLenum type, TexImageSource source); // May throw DOMException - [FIXME] undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels); + undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels); [FIXME] undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLenum format, GLenum type, TexImageSource source); // May throw DOMException undefined uniform1fv(WebGLUniformLocation? location, Float32List v); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp index 948308d883f..35a6a534349 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp @@ -555,6 +555,19 @@ public: continue; } + if (function.name == "texSubImage2D"sv && function.overload_index == 0) { + function_impl_generator.append(R"~~~( + void const* pixels_ptr = nullptr; + if (pixels) { + auto const& viewed_array_buffer = pixels->viewed_array_buffer(); + auto const& byte_buffer = viewed_array_buffer->buffer(); + pixels_ptr = byte_buffer.data(); + } + glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels_ptr); +)~~~"); + continue; + } + if (function.name == "getShaderParameter"sv) { function_impl_generator.append(R"~~~( GLint result = 0;