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

无法在WindowBuild对象上调用build_vk_surface

如何解决无法在WindowBuild对象上调用build_vk_surface

我正在按照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一个较旧的版本(两年前)上。我怀疑这个问题已经解决,因为我已经检查了vulkano_win库的依赖关系,并且他们在那里使用了winit的更新版本和重构版本: https://github.com/vulkano-rs/vulkano/issues/943

解决方法

我已经检查了vulkano_win的库和版本,并且似乎已正确扩展了WindowBuilder,我将在下面的Cargo.toml中发布依赖项。

简而言之,您是正确。问题是VkSurfaceBuild特性是针对winit 0.22的WindowBuilder实现的,而不是针对winit 0.23的WindowBuilder实现的。

因此,要解决您的问题,您需要更新Cargo.toml以使用Winit 0.22而不是0.23。

示例:

[dependencies]
vulkano = "0.19"
vulkano-shaders = "0.19"
vulkano-win = "0.19"
winit = "0.22"

此外,您的困惑可能来自浏览存储库。 在存储库vulkano-winexamples中都使用winit 0.23。 但是,请记住,存储库的当前状态不一定与0.19中发布的状态相同。

在GitHub上,您可以选择标签,并查看曾经是0.19 release的提交。 如果再查看vulkano-winexamples,您会发现它们都使用winit 0.22。

repo

如果您真的想使用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.23 WindowBuilder上实现该特征?

不确定是否有理想的方法,但是一种简单的方法是转到VkSurfaceBuild on docs.rs,然后单击“ WindowBuilder”,然后转到“外部类型的实现”,然后重定向到winit 0.22.2 docs

或者,您也可以检查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"

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