无法在 WindowBuild 对象上调用 build_vk_surface()
Not being able to call build_vk_surface() on a WindowBuild object
我正在按照 vulkano 教程打开 window 并使用 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
我将 post 下面我的 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
I have checked the library and the version of vulkano_win
and it seems to properly extend WindowBuilder
I will post the dependencies in my Cargo.toml
below.
简而言之,你正确。问题是 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-win and the examples 都使用 winit 0.23。
但是,请记住,存储库的当前状态不一定与 0.19 中发布的状态相同。
在 GitHub 上,您可以 select 标记,并查看 是 0.19 release 的提交。
如果您随后查看 vulkano-win and the examples,您会发现它们都使用 winit 0.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"
但是,对存储库的一项重大更改可能会破坏您的构建。所以谨慎使用。
How were able to determine how that trait was implemented over the 0.22 WindowBuilder
but not the 0.23 WindowBuilder
?
不确定是否有一种奇特的方法,但一个简单的方法就是转到 VkSurfaceBuild on docs.rs, then at "Implementations on Foreign Types" if you click on WindowBuilder
, then it redirects to 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"
。
我正在按照 vulkano 教程打开 window 并使用 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
我将 post 下面我的 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
I have checked the library and the version of
vulkano_win
and it seems to properly extendWindowBuilder
I will post the dependencies in myCargo.toml
below.
简而言之,你正确。问题是 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-win and the examples 都使用 winit 0.23。 但是,请记住,存储库的当前状态不一定与 0.19 中发布的状态相同。
在 GitHub 上,您可以 select 标记,并查看 是 0.19 release 的提交。 如果您随后查看 vulkano-win and the examples,您会发现它们都使用 winit 0.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"
但是,对存储库的一项重大更改可能会破坏您的构建。所以谨慎使用。
How were able to determine how that trait was implemented over the 0.22
WindowBuilder
but not the 0.23WindowBuilder
?
不确定是否有一种奇特的方法,但一个简单的方法就是转到 VkSurfaceBuild on docs.rs, then at "Implementations on Foreign Types" if you click on WindowBuilder
, then it redirects to 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"
。