我遵循vulkano教程打开一个窗口并使用vulkano-win创建一个曲面。
本教程的大部分时间都是日期,到目前为止,我已经能够解决这个问题,但是我还没有找到解决方案。
当前,当我调用let window = WindowBuilder::new().build_vk_surface(&events_loop, instance.clone())时,我会得到以下错误
error[E0599]: no method named build_vk_surface found for struct winit::window::WindowBuilder in the current scope
我已经检查了库和vulkano_win版本,它似乎正确地扩展了WindowBuilder,我将在下面的Cargo.toml中发布依赖项。
[dependencies]
vulkano = "0.19"
vulkano-shaders = "0.18"
winit = "0.23"
vulkano-win = "0.19"
image = "0.23"P.S. -这里有一个遗留的vulkano_win版本(2年前)发生了这种情况。我怀疑这个问题已经解决了,因为我已经检查了vulkano_win库的依赖项,并且它们使用了winit的更新和重组版本:https://github.com/vulkano-rs/vulkano/issues/943。
发布于 2020-11-10 21:38:43
我已经检查了库和
vulkano_win版本,它似乎正确地扩展了WindowBuilder,我将在下面的Cargo.toml中发布依赖项。
总之,你是对的。问题是,VkSurfaceBuild特性是为winit0.22的WindowBuilder而不是winit0.23的WindowBuilder实现的。
因此,要解决问题,需要更新Cargo.toml以使用winit 0.22而不是0.23。
示例:
[dependencies]
vulkano = "0.19"
vulkano-shaders = "0.19"
vulkano-win = "0.19"
winit = "0.22"此外,您的困惑可能来自浏览存储库。在存储库中,武尔卡诺和示例都使用winit0.23。但是,请记住,存储库的当前状态不一定与在0.19中发布的状态相同。
在GitHub上,您可以选择标记,并查看提交,即0.19释放。如果然后查看武尔卡诺和示例,您将看到它们都使用winit0.22。

如果您真的想使用winit 0.23。然后,您可以直接依赖于存储库。如下所示:
[dependencies]
vulkano = { git = "https://github.com/vulkano-rs/vulkano" }
vulkano-win = { git = "https://github.com/vulkano-rs/vulkano" }
vulkano-shaders = { git = "https://github.com/vulkano-rs/vulkano" }
winit = "0.23"然而,对存储库的一次重大更改可能会破坏您的构建。所以要谨慎使用。
如何能够确定该特性是如何在0.22
WindowBuilder而不是0.23WindowBuilder上实现的?
不确定是否有一种奇特的方法,但一种简单的方法是直接转到VkSurfaceBuild on docs.rs,然后在“easy上的实现”(Implementations)中单击WindowBuilder,然后重定向到winit 0.22.2文档。
或者,您也可以检查您的Cargo.lock。如果尝试使用winit 0.23,那么Cargo.lock将包含两个winit版本:
[[package]]
name = "winit"
version = "0.22.2"
...
[[package]]
name = "winit"
version = "0.23.0"
...如果您然后查看vulkano-win,那么您可以看到它使用winit 0.22.2
[[package]]
name = "vulkano-win"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b9a02addddf5532396d11dbb822f77d87ca17a00c918e4c8a0a125d6c207e2b"
dependencies = [
"cocoa 0.20.2",
"metal",
"objc",
"vulkano",
"winit 0.22.2",
]如果没有重复的版本,它只会像其他版本一样说"winit"。
https://stackoverflow.com/questions/64776095
复制相似问题