diff --git a/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl b/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl index 087bbba9464..980f183ec2d 100644 --- a/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl +++ b/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl @@ -109,7 +109,7 @@ interface mixin WebGLRenderingContextBase { GLint getAttribLocation(WebGLProgram program, DOMString name); - [FIXME] any getBufferParameter(GLenum target, GLenum pname); + any getBufferParameter(GLenum target, GLenum pname); any getParameter(GLenum pname); GLenum getError(); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp index 05762f32e68..f7ecf2f1e03 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp @@ -63,16 +63,16 @@ static ByteString idl_to_gl_function_name(StringView function_name) return gl_function_name_builder.to_byte_string(); } +struct NameAndType { + StringView name; + struct { + StringView type; + int element_count { 0 }; + } return_type; +}; + static void generate_get_parameter(SourceGenerator& generator) { - struct NameAndType { - StringView name; - struct { - StringView type; - int element_count { 0 }; - } return_type; - }; - Vector const name_to_type = { { "ACTIVE_TEXTURE"sv, { "GLenum"sv } }, { "ALIASED_LINE_WIDTH_RANGE"sv, { "Float32Array"sv, 2 } }, @@ -232,6 +232,40 @@ static void generate_get_parameter(SourceGenerator& generator) })~~~"); } +static void generate_get_buffer_parameter(SourceGenerator& generator) +{ + Vector const name_to_type = { + { "BUFFER_SIZE"sv, { "GLint"sv } }, + { "BUFFER_USAGE"sv, { "GLenum"sv } }, + }; + + generator.append(" switch (pname) {"); + + for (auto const& name_and_type : name_to_type) { + auto const& parameter_name = name_and_type.name; + auto const& type_name = name_and_type.return_type.type; + + StringBuilder string_builder; + SourceGenerator impl_generator { string_builder }; + impl_generator.set("parameter_name", parameter_name); + impl_generator.set("type_name", type_name); + impl_generator.append(R"~~~( + case GL_@parameter_name@: { + GLint result; + glGetBufferParameteriv(target, GL_@parameter_name@, &result); + return JS::Value(result); + } +)~~~"); + + generator.append(string_builder.string_view()); + } + + generator.appendln(R"~~~( + default: + TODO(); + })~~~"); +} + ErrorOr serenity_main(Main::Arguments arguments) { StringView generated_header_path; @@ -604,6 +638,11 @@ public: continue; } + if (function.name == "getBufferParameter"sv) { + generate_get_buffer_parameter(function_impl_generator); + continue; + } + if (function.name == "getActiveUniform"sv) { function_impl_generator.append(R"~~~( GLint size = 0;