如何获取 FlutterWindow 的 GLFW 窗口 ID



我正在尝试使用Flutter for Desktop构建一个视频播放器。有一个video_player插件可用于iOS和Android,但不适用于桌面。因此,暂时考虑尝试使用gstreamer进行解码和硬件渲染C++代码作为后端来颤振。这个想法是将颤振窗口的窗口 ID 传递给 gstreamer 的 glimagesink 插件以渲染视频。

我正在使用 https://github.com/google/flutter-desktop-embedding 中的最新代码作为实验的基础。下面提到的几点是关于这个回购的。

在文件 flutter-desktop-embedding/example/linux/main.cc 中,FlutterWindowController 对象创建如下。

flutter::FlutterWindowController flutter_controller(icu_data_path); 

这在内部调用

FlutterDesktopInit();

将鼠标指针悬停在上述方法上时,VS 代码显示以下内容

bool FlutterDesktopInit()
Sets up the library's graphic context. Must be called before any other
methods.
Note: Internally, this library uses GLFW, which does not support multiple
copies within the same process. Internally this calls glfwInit, which will
fail if you have called glfwInit elsewhere in the process.

很明显,FlutterDesktopInit(( 使用 GLFW 来创建窗口。已检查我是否可以获取窗口句柄。但是,没有运气。我只能获取 FlutterWindow 对象,如下所示。

flutter::FlutterWindow *win = flutter_controller.window();

如果有人能给出一些关于如何获得GLFW窗口句柄的提示,可以与glimagesink一起使用,请不胜感激。

您无法通过该 API 获取对任何 GLFW 对象的引用。这是设计使然,因为正如您引用的评论所说,您不能在同一进程中拥有多个 GLFW 副本。GLFW静态链接到Linux Flutter嵌入中,因此您不能在运行器或插件中使用GLFW。

实现视频播放器应使用纹理 API 完成,该 API 将在此 PR 中为 GLFW 添加。

相关内容

  • 没有找到相关文章

最新更新