From e6ebec853b19179105db2dc4943c97ba49c278c7 Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Fri, 13 Dec 2024 18:47:41 +0000 Subject: [PATCH] LibWeb/WebGL2: Implement texSubImage3D with ArrayBufferView and offset --- .../LibWeb/WebGL/WebGL2RenderingContextBase.idl | 2 +- .../LibWeb/GenerateWebGLRenderingContext.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Libraries/LibWeb/WebGL/WebGL2RenderingContextBase.idl b/Libraries/LibWeb/WebGL/WebGL2RenderingContextBase.idl index bf3fd7154dd..21c8d2f1075 100644 --- a/Libraries/LibWeb/WebGL/WebGL2RenderingContextBase.idl +++ b/Libraries/LibWeb/WebGL/WebGL2RenderingContextBase.idl @@ -323,7 +323,7 @@ interface mixin WebGL2RenderingContextBase { // May throw DOMException [FIXME] undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, TexImageSource source); - [FIXME] undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, [AllowShared] ArrayBufferView? srcData, optional unsigned long long srcOffset = 0); + undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, [AllowShared] ArrayBufferView? srcData, optional unsigned long long srcOffset = 0); [FIXME] undefined copyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp index e7f954d0e9d..922d23dddcd 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp @@ -670,6 +670,19 @@ public: continue; } + if (function.name == "texSubImage3D"sv && function.overload_index == 0) { + function_impl_generator.append(R"~~~( + void const* pixels_ptr = nullptr; + if (src_data) { + auto const& viewed_array_buffer = src_data->viewed_array_buffer(); + auto const& byte_buffer = viewed_array_buffer->buffer(); + pixels_ptr = byte_buffer.data() + src_offset; + } + glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels_ptr); +)~~~"); + continue; + } + if (function.name == "getShaderParameter"sv) { function_impl_generator.append(R"~~~( GLint result = 0;