diff --git a/Libraries/LibWeb/WebGL/WebGL2RenderingContextOverloads.idl b/Libraries/LibWeb/WebGL/WebGL2RenderingContextOverloads.idl index 2d446c5d10c..58c50634347 100644 --- a/Libraries/LibWeb/WebGL/WebGL2RenderingContextOverloads.idl +++ b/Libraries/LibWeb/WebGL/WebGL2RenderingContextOverloads.idl @@ -59,7 +59,7 @@ interface mixin WebGL2RenderingContextOverloads { // Reading back pixels // WebGL1: - [FIXME] undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView? dstData); + undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels); // WebGL2: [FIXME] undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLintptr offset); [FIXME] undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView dstData, unsigned long long dstOffset); diff --git a/Libraries/LibWeb/WebGL/WebGLRenderingContextOverloads.idl b/Libraries/LibWeb/WebGL/WebGLRenderingContextOverloads.idl index 54d7f075ace..69c7eaa4afa 100644 --- a/Libraries/LibWeb/WebGL/WebGLRenderingContextOverloads.idl +++ b/Libraries/LibWeb/WebGL/WebGLRenderingContextOverloads.idl @@ -25,7 +25,7 @@ interface mixin WebGLRenderingContextOverloads { [FIXME] undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, [AllowShared] ArrayBufferView data); [FIXME] undefined compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, [AllowShared] ArrayBufferView data); - [FIXME] undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels); + undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels); 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 diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp index 6b1fba45104..abc0ab90daf 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp @@ -621,6 +621,28 @@ public: continue; } + if (function.name == "readPixels"sv) { + function_impl_generator.append(R"~~~( + if (!pixels) { + return; + } + + void *ptr = nullptr; + if (pixels->is_data_view()) { + auto& data_view = static_cast(*pixels->raw_object()); + ptr = data_view.viewed_array_buffer()->buffer().data(); + } else if (pixels->is_typed_array_base()) { + auto& typed_array_base = static_cast(*pixels->raw_object()); + ptr = typed_array_base.viewed_array_buffer()->buffer().data(); + } else { + VERIFY_NOT_REACHED(); + } + + glReadPixels(x, y, width, height, format, type, ptr); +)~~~"); + continue; + } + if (function.name == "drawElements"sv) { function_impl_generator.append(R"~~~( glDrawElements(mode, count, type, reinterpret_cast(offset));