diff --git a/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl b/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl index 09ce7f7af1c..c8c55cbb80c 100644 --- a/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl +++ b/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl @@ -120,7 +120,7 @@ interface mixin WebGLRenderingContextBase { [FIXME] any getRenderbufferParameter(GLenum target, GLenum pname); any getShaderParameter(WebGLShader shader, GLenum pname); [FIXME] WebGLShaderPrecisionFormat? getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype); - [FIXME] DOMString? getShaderInfoLog(WebGLShader shader); + DOMString? getShaderInfoLog(WebGLShader shader); [FIXME] DOMString? getShaderSource(WebGLShader shader); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp index a6efeeca1ec..8004fe7ed00 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp @@ -37,6 +37,11 @@ static ByteString to_cpp_type(const IDL::Type& type, const IDL::Interface& inter return "JS::Object*"sv; return "JS::Object&"sv; } + if (type.name() == "DOMString"sv) { + if (type.is_nullable()) + return "Optional"sv; + return "String"sv; + } auto cpp_type = idl_type_name_to_cpp_type(type, interface); return cpp_type.name; } @@ -563,6 +568,20 @@ public: continue; } + if (function.name == "getShaderInfoLog"sv) { + function_impl_generator.append(R"~~~( + GLint info_log_length = 0; + glGetShaderiv(shader->handle(), GL_INFO_LOG_LENGTH, &info_log_length); + Vector info_log; + info_log.resize(info_log_length); + if (!info_log_length) + return String {}; + glGetShaderInfoLog(shader->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];