diff --git a/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl b/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl index d46141dcf15..f612796a22c 100644 --- a/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl +++ b/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl @@ -116,7 +116,7 @@ interface mixin WebGLRenderingContextBase { [FIXME] any getFramebufferAttachmentParameter(GLenum target, GLenum attachment, GLenum pname); any getProgramParameter(WebGLProgram program, GLenum pname); - [FIXME] DOMString? getProgramInfoLog(WebGLProgram program); + DOMString? getProgramInfoLog(WebGLProgram program); [FIXME] any getRenderbufferParameter(GLenum target, GLenum pname); any getShaderParameter(WebGLShader shader, GLenum pname); [FIXME] WebGLShaderPrecisionFormat? getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp index 560a51a4628..5e338f06f43 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp @@ -582,6 +582,20 @@ public: continue; } + if (function.name == "getProgramInfoLog"sv) { + function_impl_generator.append(R"~~~( + GLint info_log_length = 0; + glGetProgramiv(program->handle(), GL_INFO_LOG_LENGTH, &info_log_length); + Vector info_log; + info_log.resize(info_log_length); + if (!info_log_length) + return String {}; + glGetProgramInfoLog(program->handle(), info_log_length, nullptr, info_log.data()); + return String::from_utf8_without_validation(ReadonlyBytes { info_log.data(), static_cast(info_log_length - 1) }); +)~~~"); + continue; + } + Vector gl_call_arguments; for (size_t i = 0; i < function.parameters.size(); ++i) { auto const& parameter = function.parameters[i];