From dc2b4c6eb4b59afbf264ffcad46eecc8b271874b Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Fri, 30 Jan 2026 14:19:35 -0800 Subject: [PATCH] [Impeller] Fix type conversion warnings seen on Windows when Impeller GL API wrappers log arguments with function types (#181734) https://github.com/flutter/flutter/pull/181157 introduced a call to the glDebugMessageCallback API using a lambda as the argument. On Windows builds this produces a warning about a nonstandard implicit conversion when the Impeller GL API wrappers try to log the callback argument. --- .../backend/gles/playground_impl_gles.cc | 6 +++--- .../renderer/backend/gles/proc_table_gles.h | 14 +++++++++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/engine/src/flutter/impeller/playground/backend/gles/playground_impl_gles.cc b/engine/src/flutter/impeller/playground/backend/gles/playground_impl_gles.cc index 3dd11a0fbb9..a1a075b8ea8 100644 --- a/engine/src/flutter/impeller/playground/backend/gles/playground_impl_gles.cc +++ b/engine/src/flutter/impeller/playground/backend/gles/playground_impl_gles.cc @@ -143,9 +143,9 @@ std::shared_ptr PlaygroundImplGLES::GetContext() const { if (gl->GetDescription()->HasDebugExtension()) { gl->DebugMessageCallbackKHR( - [](GLenum /* source */, GLenum message_type, GLuint /* message_id */, - GLenum /* severity */, GLsizei /* length */, const GLchar* message, - const void* /* user_param */) { + +[](GLenum /* source */, GLenum message_type, GLuint /* message_id */, + GLenum /* severity */, GLsizei /* length */, const GLchar* message, + const void* /* user_param */) { switch (message_type) { case GL_DEBUG_TYPE_ERROR_KHR: FML_LOG(ERROR) << "GL Error: " << message; diff --git a/engine/src/flutter/impeller/renderer/backend/gles/proc_table_gles.h b/engine/src/flutter/impeller/renderer/backend/gles/proc_table_gles.h index e254a94d827..480431bc62b 100644 --- a/engine/src/flutter/impeller/renderer/backend/gles/proc_table_gles.h +++ b/engine/src/flutter/impeller/renderer/backend/gles/proc_table_gles.h @@ -51,9 +51,21 @@ struct AutoErrorCheck { } }; +template +struct ArgLogger { + static void log(std::stringstream& stream, Type arg) { stream << arg; } +}; + +template +struct ArgLogger { + static void log(std::stringstream& stream, R (*val)(Args...)) { + stream << reinterpret_cast(val); + } +}; + template void BuildGLArgumentsStream(std::stringstream& stream, Type arg) { - stream << arg; + ArgLogger::log(stream, arg); } constexpr void BuildGLArgumentsStream(std::stringstream& stream) {}