Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Synchronize with upstream #96

Merged
merged 3 commits into from
Sep 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

publish = false

edition = "2018"
edition = "2021"

name = "tutorial"
authors = ["Kyle Mayes <kyle@mayeses.com>"]
Expand All @@ -20,11 +20,11 @@ anyhow = "1"
log = "0.4"
cgmath = "0.18"
png = "0.17"
pretty_env_logger = "0.4"
pretty_env_logger = "0.5"
thiserror = "1"
tobj = { version = "3", features = ["log"] }
vulkanalia = { version = "=0.22.0", features = ["libloading", "provisional", "window"] }
winit = "0.28"
vulkanalia = { version = "=0.25.0", features = ["libloading", "provisional", "window"] }
winit = "0.29"

[[bin]]

Expand Down
2 changes: 1 addition & 1 deletion book/preprocessor/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ anyhow = "1"
clap = "2"
log = "0.4"
mdbook = { version = "=0.4.21", default-features = false }
pretty_env_logger = "0.4"
pretty_env_logger = "0.5"
pulldown-cmark = "0.8"
pulldown-cmark-to-cmark = "6"
serde_json = "1"
Expand Down
2 changes: 1 addition & 1 deletion book/preprocessor/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use pulldown_cmark_to_cmark::cmark;
/// The Vulkan API Registry index.
const INDEX: &str = include_str!("../../../index.txt");
/// The version of `vulkanalia` used by the tutorial.
const VERSION: &str = "0.22.0";
const VERSION: &str = "0.25.0";

/// The number of documentation link replacements made.
static REPLACEMENTS: AtomicUsize = AtomicUsize::new(0);
Expand Down
2 changes: 1 addition & 1 deletion book/src/conclusion.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/conclusion.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

一路千辛万苦,我们终于有了一个基本的 Vulkan 程序。你现在已经掌握了 Vulkan 的基本原理,可以开始探索更多的特性了,比如:
* 实例化渲染
Expand Down
30 changes: 19 additions & 11 deletions book/src/development_environment.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/development_environment.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

在这个章节中,我们将会安装 Vulkan SDK 并搭建开发 Vulkan 应用所需的环境。此教程假设你已经有一个搭建好的 Rust(1.51+)开发环境。
在这个章节中,我们将会安装 Vulkan SDK 并搭建开发 Vulkan 应用所需的环境。此教程假设你已经有一个搭建好的 Rust(1.70+)开发环境。

## Cargo 项目

Expand All @@ -22,11 +22,11 @@ log = "0.4"
cgmath = "0.18"
nalgebra-glm = "0.18"
png = "0.17"
pretty_env_logger = "0.4"
pretty_env_logger = "0.5"
thiserror = "1"
tobj = { version = "3", features = ["log"] }
vulkanalia = { version = "=0.22.0", features = ["libloading", "provisional", "window"] }
winit = "0.28"
vulkanalia = { version = "=0.25.0", features = ["libloading", "provisional", "window"] }
winit = "0.29"
```

* `anyhow` &ndash; 用于简单的错误处理
Expand All @@ -35,7 +35,7 @@ winit = "0.28"
* `png` &ndash; 用于将 PNG 图片文件加载到纹理
* `pretty_env_logger` &ndash; 用于打印日志到控制台
* `thiserror` &ndash; 用于在自定义错误类型时减少样板代码
* `tobj` &ndash; 用于加载 [Wavefront .obj 格式](https:/en.wikipedia.org/wiki/Wavefront_.obj_file) 的 3D 模型
* `tobj` &ndash; 用于加载 [Wavefront .obj 格式](https://en.wikipedia.org/wiki/Wavefront_.obj_file) 的 3D 模型
* `vulkanalia` &ndash; 用于调用 Vulkan API
* `winit` &ndash; 用于创建将进行渲染的窗口

Expand Down Expand Up @@ -75,16 +75,24 @@ SDK 能在 [LunarG 网站](https://vulkan.lunarg.com/)下载。创建账户不

如果你收到了一条错误信息,那你需要确保你的显卡驱动是最新的,包含 Vulkan 运行时,并且你的显卡支持 Vulkan。主流品牌的驱动下载链接详见[介绍章节](introduction.html)。

### macOS
### MacOS

以下指引将假设你在使用 [Homebrew 包管理器](https://brew.sh/)。并且注意你需要 macOS 10.11 或更新的版本。你的设备也需要支持 [Metal API](https://en.wikipedia.org/wiki/Metal_(API)#Supported_GPUs)。

SDK 能在 [LunarG 网站](https://vulkan.lunarg.com/) 下载。创建账户不是必须的,但它会给你阅读一些或许对你有用的额外文档的权限。
SDK 可在 [LunarG 网站](https://vulkan.lunarg.com/) 下载。创建账户不是必须的,但它会给你阅读一些或许对你有用的额外文档的权限。

![](./images/vulkan_sdk_download_buttons.png)

macOS 版本的 SDK 在内部使用了 [MoltenVK](https://moltengl.com/)。Vulkan 在 macOS 上没有原生支持,所以 MoltenVK 会作为中间层把 Vulkan API 的调用翻译至苹果的 Metal 图形框架。这样你就可以享受到苹果的 Metal 框架在调试与性能上的优点。
MacOS 版本的 SDK 在内部使用了 [MoltenVK](https://moltengl.com/)。Vulkan 在 MacOS 上没有原生支持,所以 MoltenVK 会作为中间层把 Vulkan API 的调用翻译至苹果的 Metal 图形框架。这样你就可以享受到苹果的 Metal 框架在调试与性能上的优点。

下载完成之后,将其解压到你自己选择的文件夹。在解压后的文件夹内,你可以在 `Applications` 文件夹中找到一些使用 SDK 运行的示例应用的可执行文件。运行 `vkcube` 示例应用,你会看到这个画面:

![](./images/cube_demo_mac.png)

#### 环境配置

当在 Vulkan SDK 目录以外的地方运行 Vulkan 应用程序时,你可能会需要运行由 Vulkan SDK 提供的 `setup-env.sh` 脚本,以避免找不到 Vulkan 库(例如 `libvulkan.dylib`)导致的问题。如果你把 Vulkan SDK 安装到了默认位置,脚本应该可以在如下目录中找到:`~/VulkanSDK/1.3.280.1/setup-env.sh`(用你实际安装的版本号替换 `1.3.280.1` 以匹配你的 Vulkan 安装)。

你也可以把这个脚本添加到你 Shell 的启动脚本中,这样它就能自动运行了。例如你可以在 `~/.zshrc` 文件中添加这样一行:

```
source ~/VulkanSDK/1.3.280.1/setup-env.sh
```
2 changes: 1 addition & 1 deletion book/src/drawing/command_buffers.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/drawing/command_buffers.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

**本章代码:**[main.rs](https://github.com/chuigda/Vulkan-Tutorial-Rust-CN/tree/master/src/14_command_buffers.rs)

Expand Down
2 changes: 1 addition & 1 deletion book/src/drawing/framebuffers.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/drawing/framebuffers.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

**本章代码:**[main.rs](https://github.com/chuigda/Vulkan-Tutorial-Rust-CN/tree/master/src/13_framebuffers.rs)

Expand Down
2 changes: 1 addition & 1 deletion book/src/drawing/rendering_and_presentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/drawing/rendering_and_presentation.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

**本章代码:**[main.rs](https://github.com/chuigda/Vulkan-Tutorial-Rust-CN/tree/master/src/15_hello_triangle.rs)

Expand Down
4 changes: 2 additions & 2 deletions book/src/dynamic/push_constants.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/dynamic/push_constants.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

> <span style="display: flex; justify-content: center; margin-bottom: 16px"><img src="../images/i_have_no_idea_what_im_doing.jpg" width="256"></span>前面没有这个声明的章节都是直接从 <https://github.com/Overv/VulkanTutorial> 改编而来。<br/><br/>这一章和后面的章节都是原创,作者并不是 Vulkan 的专家。作者尽力保持了权威的语气,但是这些章节应该被视为一个 Vulkan 初学者的“尽力而为”。<br/><br/>如果你有问题、建议或者修正,请[提交 issue](https://github.com/KyleMayes/vulkanalia/issues)!

Expand Down Expand Up @@ -124,7 +124,7 @@ let model = Mat4::from_axis_angle(
Deg(0.0)
);

let model_bytes = &*std::slice::from_raw_parts(
let model_bytes = std::slice::from_raw_parts(
&model as *const Mat4 as *const u8,
size_of::<Mat4>()
);
Expand Down
2 changes: 1 addition & 1 deletion book/src/dynamic/recycling_command_buffers.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/dynamic/recycling_command_buffers.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

> <span style="display: flex; justify-content: center; margin-bottom: 16px"><img src="../images/i_have_no_idea_what_im_doing.jpg" width="256"></span>前面没有这个声明的章节都是直接从 <https://github.com/Overv/VulkanTutorial> 改编而来。<br/><br/>这一章和后面的章节都是原创,作者并不是 Vulkan 的专家。作者尽力保持了权威的语气,但是这些章节应该被视为一个 Vulkan 初学者的“尽力而为”。<br/><br/>如果你有问题、建议或者修正,请[提交 issue](https://github.com/KyleMayes/vulkanalia/issues)!

Expand Down
17 changes: 10 additions & 7 deletions book/src/dynamic/secondary_command_buffers.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/dynamic/secondary_command_buffers.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

> <span style="display: flex; justify-content: center; margin-bottom: 16px"><img src="../images/i_have_no_idea_what_im_doing.jpg" width="256"></span>前面没有这个声明的章节都是直接从 <https://github.com/Overv/VulkanTutorial> 改编而来。<br/><br/>这一章和后面的章节都是原创,作者并不是 Vulkan 的专家。作者尽力保持了权威的语气,但是这些章节应该被视为一个 Vulkan 初学者的“尽力而为”。<br/><br/>如果你有问题、建议或者修正,请[提交 issue](https://github.com/KyleMayes/vulkanalia/issues)!

Expand Down Expand Up @@ -296,12 +296,15 @@ use winit::event::{ElementState, VirtualKeyCode};
```rust,noplaypen
match event {
// ...
Event::WindowEvent { event: WindowEvent::KeyboardInput { input, .. }, .. } => {
if input.state == ElementState::Pressed {
match input.virtual_keycode {
Some(VirtualKeyCode::Left) if app.models > 1 => app.models -= 1,
Some(VirtualKeyCode::Right) if app.models < 4 => app.models += 1,
_ => { }
Event::WindowEvent { event, .. } => match event {
// ...
WindowEvent::KeyboardInput { event, .. } => {
if event.state == ElementState::Pressed {
match event.physical_key {
PhysicalKey::Code(KeyCode::ArrowLeft) if app.models > 1 => app.models -= 1,
PhysicalKey::Code(KeyCode::ArrowRight) if app.models < 4 => app.models += 1,
_ => { }
}
}
}
}
Expand Down
4 changes: 3 additions & 1 deletion book/src/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/faq.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

本页面列举了在开发 Vulkan 应用时可能遇到的常见问题及其解决方案。

* **(MacOS)** 我安装了 Vulkan SDK,但我运行 Vulkan 应用程序的时候遇到了找不到 `libvulkan.dylib` 的错误 —— 参见[MacOS Vulkan SDK 安装说明中的`环境配置`章节](./development_environment.md#setup-environment)。

* **我在核心校验层中遇到了访问冲突(access violation)错误** &ndash; 确保未运行 MSI Afterburner / RivaTuner Statistics Server,因为它们和 Vulkan 之间存在一些兼容性问题。

* **我看不到任何来自校验层的消息/校验层不可用** &ndash; 首先确保校验层有机会打印错误信息,请在程序退出后保持终端窗口打开。在 Visual Studio 中,你可以通过使用 Ctrl-F5 而不是 F5 来运行程序;在 Linux 中,你可以从终端窗口执行程序。如果仍然没有消息,并且你确信校验层已启用,那么你应该按照[此页面上的“Verify the Installation”说明](https://vulkan.lunarg.com/doc/view/1.2.135.0/windows/getting_started.html)来确保 Vulkan SDK 已正确安装。同时确保你的 SDK 版本至少为 1.1.106.0,以支持 `VK_LAYER_KHRONOS_validation` 校验层。
Expand Down
4 changes: 2 additions & 2 deletions book/src/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/introduction.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

本教程是用 Rust 对 <https://vulkan-tutorial.com> 的改写版本,应当归功于原教程的作者 ([Alexander Overvoorde](https://github.com/Overv)) 及[其他贡献者们](https://github.com/Overv/VulkanTutorial/graphs/contributors)。

Expand All @@ -20,7 +20,7 @@

* 一张支持 Vulkan 的显卡和驱动程序([NVIDIA](https://developer.nvidia.com/vulkan-driver),[AMD](http://www.amd.com/en-us/innovations/software-technologies/technologies-gaming/vulkan),[Intel](https://software.intel.com/en-us/blogs/2016/03/14/new-intel-vulkan-beta-1540204404-graphics-driver-for-windows-78110-1540))
* 使用 Rust 的经验
* Rust 1.51 或更高版本
* Rust 1.70 或更高版本
* 一些的 3D 计算机图形学知识

本教程不会要求你有 OpenGL 或者 Direct3D 的知识储备,但要求你必须理解 3D 计算机图形学的基础。例如,教程中不会解释透视投影背后的数学原理。[这本在线书籍](https://paroj.github.io/gltut/)是一个很好的计算机图形学入门资源。其他一些很好的计算机图形学资源包括:
Expand Down
2 changes: 1 addition & 1 deletion book/src/model/depth_buffering.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/model/depth_buffering.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

**本章代码:**[main.rs](https://github.com/chuigda/Vulkan-Tutorial-Rust-CN/tree/master/src/26_depth_buffering.rs) | [shader.vert](https://github.com/chuigda/Vulkan-Tutorial-Rust-CN/tree/master/shaders/26/shader.vert) | [shader.frag](https://github.com/chuigda/Vulkan-Tutorial-Rust-CN/tree/master/shaders/26/shader.frag)

Expand Down
2 changes: 1 addition & 1 deletion book/src/model/loading_models.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/model/loading_models.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

**本章代码:**[main.rs](https://github.com/chuigda/Vulkan-Tutorial-Rust-CN/tree/master/src/27_model_loading.rs)

Expand Down
2 changes: 1 addition & 1 deletion book/src/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/overview.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

本章会以介绍 Vulkan 和它所解决的问题开始。之后,我们会看到绘制第一个三角形所需的所有组件。这会给你一个总体的蓝图,以便你将每个后续章节放在正确的位置。之后我们会讨论 `vulkanalia` 提供的 Vulkan API。

Expand Down
2 changes: 1 addition & 1 deletion book/src/pipeline/conclusion.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/pipeline/conclusion.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

**本章代码:**[main.rs](https://github.com/chuigda/Vulkan-Tutorial-Rust-CN/tree/master/src/12_graphics_pipeline_complete.rs)

Expand Down
30 changes: 19 additions & 11 deletions book/src/pipeline/fixed_functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/pipeline/fixed_functions.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

**本章代码:**[main.rs](https://github.com/chuigda/Vulkan-Tutorial-Rust-CN/tree/master/src/10_fixed_functions.rs)

Expand All @@ -15,18 +15,17 @@
* 绑定(Bindings) &ndash; 数据之间的间隔,以及数据是逐顶点(per-vertex)还是逐个实例(per-instance)的(参见[实例化](https://en.wikipedia.org/wiki/Geometry_instancing))
* 属性描述(Attribute descriptions) &ndash; 顶点着色器接收的属性的类型,从哪个绑定中加载数据,以及从哪个偏移量开始加载

因为我们已经在顶点着色器中硬编码了数据,我们会将这个结构体的所有字段都保留默认值,表明我们不需要加载数据。我们会在顶点缓冲章节重新审视这个结构体。
因为我们已经在顶点着色器中硬编码了数据,我们会将这个结构体的所有字段都保留默认值,表明我们不需要加载数据。我们会在顶点缓冲章节重新审视这个结构体。在 `create_pipeline` 函数中 `vk::PipelineShaderStageCreateInfo` 的后面添加以内容:

```rust,noplaypen
let vertex_input_state = vk::PipelineVertexInputStateCreateInfo::builder();
```
unsafe fn create_pipeline(device: &Device, data: &mut AppData) -> Result<()> {
// ...

在 `create_pipeline` 函数中,我们会在 `vk::PipelineShaderStageCreateInfo` 结构体之后添加这个结构体。
let vertex_input_state = vk::PipelineVertexInputStateCreateInfo::builder();
```

<!--
<!-- 这里就不翻译了,免得读者误解
The `vertex_binding_descriptions` and `vertex_attribute_descriptions` fields for this struct that could have been set here would be slices of structs that describe the aforementioned details for loading vertex data.

这一句就不翻译了,免得读者误解。
-->

## 输入装配
Expand Down Expand Up @@ -231,7 +230,7 @@ let color_blend_state = vk::PipelineColorBlendStateCreateInfo::builder()

如果你想使用第二种混合方式(位运算结合),你应该把 `logic_op_enable` 设为 `true`。位运算操作可由 `logic_op` 字段指定。注意这会自动禁用第一种混合方式,就好像你把所有帧缓冲的 `blend_enable` 都置为了 `false`!`color_write_mask` 在这种模式下也会被用到,以决定哪些通道会被实际地传递到帧缓冲中。你也可以同时禁用这两种模式,就像我们这里做的一样,这样片元颜色就会原封不动地传递到帧缓冲中。

## 动态状态
## 动态状态(只是示例,不要添加到代码里)

有一部分状态是可以在不重新创建管线的情况下改变的。例如视口的大小、线宽和混合常量。如果你想这么做,那么你需要填充一个 `vk::PipelineDynamicStateCreateInfo` 结构体:

Expand Down Expand Up @@ -263,9 +262,18 @@ struct AppData {
然后在 `create_pipeline` 函数中,在调用 `destroy_shader_module` 之前创建这个对象:

```rust,noplaypen
let layout_info = vk::PipelineLayoutCreateInfo::builder();
+unsafe fn create_pipeline(device: &Device, data: &mut AppData) -> Result<()> {
// ...

data.pipeline_layout = device.create_pipeline_layout(&layout_info, None)?;
let layout_info = vk::PipelineLayoutCreateInfo::builder();

data.pipeline_layout = device.create_pipeline_layout(&layout_info, None)?;

device.destroy_shader_module(vert_shader_module, None);
device.destroy_shader_module(frag_shader_module, None);

Ok(())
}
```

这个结构体也用于指定*推式常量* —— 另一种给着色器传递动态值的方式,我们会在后面的章节中介绍。
Expand Down
2 changes: 1 addition & 1 deletion book/src/pipeline/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/pipeline/introduction.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

**本章代码:**[main.rs](https://github.com/chuigda/Vulkan-Tutorial-Rust-CN/tree/master/src/08_graphics_pipeline.rs)

Expand Down
2 changes: 1 addition & 1 deletion book/src/pipeline/render_passes.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 原文链接:<https://kylemayes.github.io/vulkanalia/pipeline/render_passes.html>
>
> Commit Hash: ceb4a3fc6d8ca565af4f8679c4889bcad7941338
> Commit Hash: 7becee96b0029bf721f833039c00ea2a417714dd

**本章代码** [main.rs](https://github.com/chuigda/Vulkan-Tutorial-Rust-CN/tree/master/src/11_render_passes.rs)

Expand Down
Loading