微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何使用 winit rust crate 中的 raw_window_handle() 方法?

我正在尝试按照 adrien ben's vulkan-tutorial.

使用 Rust 创建我的第一个 Vulkan 应用程序

当我进入 commit 1.2.1 时,我注意到他正在为 Windows 创建 winit-window

因为我是在我的 Linux 系统上开发应用程序,所以我决定离开预先编写好的路径,并尝试自己实现窗口部分。

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

我的问题如下:

我无法从我的 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,None).unwrap(); };
   |                                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `HasRawWindowHandle` is not implemented for `RawWindowHandle`
   |
   = note: required for the cast to the object type `dyn HasRawWindowHandle`

由于我对 Rust 编程语言还很陌生,所以我对特征的概念不是很熟悉,因此非常感谢任何帮助。

解决方法

欢迎使用 StackOverflow。

window 确实实现了 HasRawWindowHandle trait,而 create_surface 函数想要传递一个实现此 trait 的 window 对象。

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

但是在您的代码中,已经获取了 windowraw_window_handle 并将那个传递到函数中。

所以现在 create_surface 想要获取您的 raw_window_handle

raw_window_handle.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。