如何使用 winit Rust crate 中的 raw_window_handle() 方法?

How do I use the raw_window_handle() method from winit rust crate?

我正在尝试使用 Rust 创建我的第一个 Vulkan 应用程序 adrien ben's vulkan-tutorial.

当我进入 commit 1.2.1 时,我注意到他正在为 Windows.

创建 winit-window

因为我正在 Linux-系统 上开发应用程序,所以我决定离开预先编写的路径,并尝试实现 window我自己。

所以我偶然发现了 ash-window-crate,它给了我一个需要 window-handle 作为参数的 create-surface() 方法。

我的问题如下:

我无法从我的 winit-window 调用 raw-window-handle 函数 尽管 docs of winit 建议Window-Struct 实现了 HasRawWindowHandle-Trait,根据我的理解,这会公开上述功能。

我正在尝试像这样创建 KHRSurface:

let window = WindowBuilder::new().build(&events_loop).unwrap();;
let surface_khr = unsafe { create_surface(&entry, &instance, &window.raw_window_handle(), None).unwrap(); };

rust 编译器抱怨:

error[E0277]: the trait bound `RawWindowHandle: HasRawWindowHandle` is not satisfied
  --> src/main.rs:46:70
   |
46 |         let surface_khr = unsafe { create_surface(&entry, &instance, &window.raw_window_handle(), None).unwrap(); };
   |                                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `HasRawWindowHandle` is not implemented for `RawWindowHandle`
   |
   = note: required for the cast to the object type `dyn HasRawWindowHandle`

由于我是 Rust 编程语言的新手,我对 traits 的概念不是很熟悉,因此非常感谢任何帮助。

欢迎来到 Whosebug。

window 确实实现了 HasRawWindowHandle 特征,create_surface 函数希望传递一个实现该特征的 window 对象。

这告诉我们,在 create_surface 内部的某处,它将对该对象调用 raw_window_handle

但是在您的代码中, 已经抓住了 windowraw_window_handle 并传递了 that进入函数。

所以现在 create_surface 想要得到 raw_window_handle.

raw_window_handle

长话短说,只需尝试传入 &window 而不是 &window.raw_window_handle()