【问题标题】:How do I use the raw_window_handle() method from winit rust crate?如何使用 winit rust crate 中的 raw_window_handle() 方法?
【发布时间】:2021-06-22 02:07:09
【问题描述】:

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

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

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

所以我偶然发现了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(); };

锈编译器抱怨:

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

【问题讨论】:

    标签: rust window vulkan ash winit


    【解决方案1】:

    欢迎使用 StackOverflow。

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

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

    但在你的代码中,已经在获取windowraw_window_handle并将那个传递给函数。

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

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

    【讨论】:

      猜你喜欢
      • 2023-01-01
      • 1970-01-01
      • 2022-12-29
      • 2017-12-10
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      相关资源
      最近更新 更多