diff --git a/Libraries/LibWeb/WebGL/WebGL2RenderingContextBase.idl b/Libraries/LibWeb/WebGL/WebGL2RenderingContextBase.idl index 662229b131a..8099b56963c 100644 --- a/Libraries/LibWeb/WebGL/WebGL2RenderingContextBase.idl +++ b/Libraries/LibWeb/WebGL/WebGL2RenderingContextBase.idl @@ -303,7 +303,7 @@ interface mixin WebGL2RenderingContextBase { [FIXME] undefined readBuffer(GLenum src); // Renderbuffer objects - [FIXME] any getInternalformatParameter(GLenum target, GLenum internalformat, GLenum pname); + any getInternalformatParameter(GLenum target, GLenum internalformat, GLenum pname); [FIXME] undefined renderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); // Texture objects diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp index 1e032c21eb3..bf1e797db3a 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp @@ -278,6 +278,26 @@ static void generate_get_buffer_parameter(SourceGenerator& generator) })~~~"); } +static void generate_get_internal_format_parameter(SourceGenerator& generator) +{ + generator.append(R"~~~( + switch (pname) { + case GL_SAMPLES: { + GLint num_sample_counts { 0 }; + glGetInternalformativ(target, internalformat, GL_NUM_SAMPLE_COUNTS, 1, &num_sample_counts); + auto samples_buffer = MUST(ByteBuffer::create_zeroed(num_sample_counts * sizeof(GLint))); + glGetInternalformativ(target, internalformat, GL_SAMPLES, num_sample_counts, reinterpret_cast(samples_buffer.data())); + auto array_buffer = JS::ArrayBuffer::create(m_realm, move(samples_buffer)); + return JS::Int32Array::create(m_realm, num_sample_counts, array_buffer); + } + default: + dbgln("Unknown WebGL internal format parameter name: {:x}", pname); + set_error(GL_INVALID_ENUM); + return JS::js_null(); + } +)~~~"); +} + ErrorOr serenity_main(Main::Arguments arguments) { StringView generated_header_path; @@ -835,6 +855,11 @@ public: continue; } + if (function.name == "getInternalformatParameter") { + generate_get_internal_format_parameter(function_impl_generator); + continue; + } + if (function.name == "getActiveUniform"sv) { function_impl_generator.append(R"~~~( GLint size = 0;