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

问题描述

我正在尝试按照adrien ben 的 vulkan-tutorial使用 Rust创建我的第一个Vulkan 应用程序。

随着我提交 1.2.1的进展,我注意到他正在为 Windows 创建 winit-window

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

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

我的问题如下:

我无法从我的 winit-window调用raw-window-handle 函数,尽管 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(); };

锈编译器抱怨:

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 编程语言很陌生,我对特征的概念不是很熟悉,因此非常感谢任何帮助。

标签: rustwindowvulkanashwinit

解决方案


欢迎来到 StackOverflow。

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

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

但是在您的代码中,已经获取了window'sraw_window_handle并将其传递函数。

所以现在create_surface想得到raw_window_handle你的raw_window_handle.

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


推荐阅读