自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 问答 (1)
  • 收藏
  • 关注

原创 教程 51 - Vulkan 自定义内存分配器

在这一章中,我们将为 Vulkan 渲染器实现自定义内存分配器。统一内存管理:所有内存分配(包括 Vulkan 内部分配)都通过我们的内存系统进行跟踪内存对齐控制:利用我们在教程 50 中实现的对齐内存分配功能调试和分析:可以追踪所有 Vulkan 相关的内存分配,便于调试内存泄漏性能优化:可以针对 Vulkan 的特定使用模式优化内存分配策略Vulkan 的自定义分配器通过结构实现,我们需要提供 5 个回调函数。首先,在// 是否启用分配追踪(用于调试)// #endif。

2025-12-29 19:51:21 998

原创 教程 50 - 内存对齐 (Memory Alignment)

内存对齐(Memory Alignment)是指数据在内存中的地址必须是特定值的倍数。正确的内存对齐对程序性能至关重要,特别是在高性能游戏引擎中。✅ 理解什么是内存对齐以及为什么重要✅ 学习不同数据类型的对齐要求✅ 实现对齐内存分配函数✅ 在动态分配器中添加对齐支持✅ 掌握 SIMD 和缓存行对齐内存对齐是指数据的内存地址必须是某个值(通常是数据大小)的倍数。示例未对齐(Unaligned):地址:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15。

2025-12-29 19:50:26 965

原创 教程 49 - 任务系统 (Job System)

任务系统(Job System)是现代游戏引擎的核心并发架构,它比传统的固定线程模型更灵活、更高效。任务系统将工作分解为小的、独立的任务,然后动态分配到工作线程池中执行。✅ 理解任务系统的优势✅ 实现无锁环形队列✅ 设计任务类型和优先级系统✅ 实现工作线程池和任务调度✅ 处理任务结果回调任务系统是现代游戏引擎并发架构的核心,它提供了比固定线程更灵活、更高效的方式来利用多核 CPU。

2025-12-29 19:49:31 803

原创 教程 48 - 多线程系统 (Multithreading System)

多线程系统(Multithreading System)是现代游戏引擎的基础组件之一,允许同时执行多个任务以充分利用多核 CPU。Kohi 引擎提供了跨平台的线程抽象层,隐藏了不同操作系统之间的差异。✅ 理解多线程的必要性和挑战✅ 学习线程和互斥锁的抽象设计✅ 实现跨平台的线程 API✅ 掌握线程同步和互斥访问✅ 了解游戏引擎中的多线程模式多线程系统是现代游戏引擎的基础,Kohi 引擎提供了简洁的跨平台抽象。

2025-12-25 20:26:25 946

原创 教程 47 - 天空盒 (Skybox)

天空盒(Skybox)是一种常用的 3D 图形技术,用于渲染遥远的背景环境(如天空、山脉、城市天际线等)。它使用立方体贴图(Cubemap)来创建一个环绕相机的无限远背景,给玩家带来身临其境的感觉。✅ 理解天空盒的原理和用途✅ 学习立方体贴图(Cubemap)的结构✅ 实现天空盒渲染视图✅ 编写天空盒着色器✅ 处理深度测试和视图矩阵的特殊配置天空盒是一个包围整个场景的大型立方体,其内表面贴有环境纹理。由于它始终以相机为中心,无论相机如何移动,天空盒看起来都在无限远处。

2025-12-25 20:04:22 1516

原创 教程 46 - 透明度渲染

透明度渲染(Transparency Rendering)是 3D 图形学中最具挑战性的问题之一。当场景中包含半透明或透明对象时,简单的深度测试和深度写入无法正确处理渲染顺序,导致视觉错误。✅ 理解透明度渲染的挑战✅ 学习深度排序算法✅ 实现快速排序来排序透明对象✅ 分离不透明和透明几何体的渲染✅ 处理 Alpha 混合和深度测试。

2025-12-21 17:24:48 1126

原创 教程 45 - 渲染视图系统

渲染视图系统(Render View System)是 Kohi 引擎渲染架构中的关键抽象层,它将渲染逻辑从具体的渲染通道和着色器中解耦出来。每个视图代表一种独立的渲染方式,可以有自己的投影矩阵、视图矩阵、渲染通道和着色器。✅ 理解渲染视图系统的架构设计✅ 学习如何创建和配置不同类型的视图✅ 实现 World 视图(3D 世界渲染)✅ 实现 UI 视图(2D 界面渲染)✅ 了解视图数据包的构建和渲染流程。

2025-12-21 17:23:47 947

原创 教程 44 - 相机系统

在之前的教程中,我们一直在硬编码相机的视图和投影矩阵。这限制了我们的灵活性 - 无法轻松改变视角、切换相机,或实现相机动画。本教程将实现一个完整的相机系统灵活的相机组件多种投影模式(透视/正交)相机管理和切换常见的相机控制模式fill:#333;color:#333;color:#333;fill:none;Camera Controls 相机控制Camera Component 相机组件Camera System 相机系统第一人称Orbit轨道Free Fly自由飞行。

2025-12-20 19:08:53 1258

原创 教程 43 - 渲染目标和可配置渲染通道

在教程 42 中,我们实现了可写纹理,可以作为渲染目标使用。但我们的渲染通道(Renderpass)系统还是硬编码的:只支持渲染到 Swapchain。渲染目标系统(Render Targets):统一管理颜色、深度、模板附件可配置渲染通道(Configurable Renderpasses):动态创建不同配置的渲染通道多通道渲染管线(Multi-pass Rendering):支持复杂的渲染流程fill:#333;color:#333;color:#333;fill:none;

2025-12-20 19:06:59 674

原创 教程 42 - 可写纹理

到目前为止,我们使用的纹理都是只读的:从文件加载,然后在着色器中采样。但在现代图形编程中,我们经常需要动态生成或修改渲染场景到纹理 (Render to Texture)阴影贴图 (Shadow Maps)后处理效果 (Post-processing)动态环境贴图 (Dynamic Cubemaps)程序化纹理 (Procedural Textures)本教程将实现可写纹理(Writeable Textures),支持 GPU 渲染和 CPU 写入。fill:#333;

2025-12-19 20:39:51 722

原创 教程 41 - 增强纹理映射(采样器)

在之前的教程中,我们实现了纹理系统,可以加载和使用纹理。但我们一直使用默认采样器,没有控制纹理的采样方式。本教程将深入探讨纹理采样器如何控制纹理过滤 (放大/缩小)如何处理纹理边界 (包裹模式)如何提高斜视角纹理质量 (各向异性过滤)如何在材质系统中配置采样器fill:#333;color:#333;color:#333;fill:none;Texture Sampling Pipeline 纹理采样管线1. 坐标处理2. 纹理查找3. 质量增强4. 输出纹理坐标。

2025-12-19 20:35:54 762

原创 教程 40 - 二进制网格格式

在教程 38 中,我们实现了网格系统,可以从 OBJ 文件加载 3D 模型。但 OBJ 是一种文本格式加载速度慢 (需要解析字符串)文件体积大 (文本存储效率低)解析复杂 (需要处理多种格式变体)本教程将实现格式,这是一种二进制网格格式,专为游戏引擎优化。fill:#333;color:#333;color:#333;fill:none;Asset Pipeline 资源管线离线转换导出运行时加载OBJ File文本格式体积大,加载慢网格转换器KSM File二进制格式。

2025-12-18 20:03:00 1167

原创 教程 39 - 变换和父子关系

在之前的教程中,我们实现了网格系统,可以加载复杂的 3D 模型。但每个网格都是独立的,无法建立层级关系。在实际游戏开发中,我们经常需要父子关系角色的手臂跟随身体移动车轮随车辆旋转UI 元素相对于父容器定位相机跟随玩家移动本教程将实现变换系统(Transform System) 和父子关系(Parenting),这是构建复杂场景图 (Scene Graph) 的基础。graph TBsubgraph "Scene Hierarchy 场景层级"Root[Root Node<br/>根节点]

2025-12-18 20:02:01 1363

原创 教程 38 - 网格 Part 1

在之前的教程中,我们使用几何体(Geometry) 来表示简单的 3D 模型,如立方体、平面等。但实际游戏中的 3D 模型要复杂得多:一个角色可能包含头部、身体、武器等多个部分,每个部分使用不同的材质。网格多个子网格(Submeshes):一个网格可以包含多个几何体部分材质管理:每个子网格可以使用不同的材质从文件加载:支持从配置文件加载复杂模型引用计数:自动管理网格生命周期fill:#333;color:#333;color:#333;fill:none;Mesh System 网格系统。

2025-12-17 20:05:54 1245

原创 教程 37 - 法线贴图

在上一教程中,我们实现了基础的方向光照。但即使有了光照,3D 物体的表面仍然看起来很平滑,缺少细节。如果要表现出砖块的凹凸、木纹的纹理、岩石的粗糙,我们需要大量的几何细节——但这会严重影响性能。法线贴图(Normal Mapping) 提供了一个巧妙的解决方案:通过纹理存储表面法线信息,在不增加几何复杂度的情况下,让表面看起来有丰富的细节。fill:#333;color:#333;color:#333;fill:none;With Normal Mapping 使用法线贴图。

2025-12-17 20:02:09 1033

原创 教程 36 - 方向光照

在之前的教程中,我们实现了纹理映射,但渲染的3D物体看起来很"平"(flat),缺乏深度感和立体感。这是因为我们还没有实现光照(Lighting)。方向光照环境光(Ambient Light):场景的基础照明漫反射(Diffuse):根据光照方向和表面朝向计算的光照Lambert 漫反射模型:一个简单但有效的光照公式通过添加光照,3D物体将展现出真实的立体感和深度,为更高级的渲染技术(如镜面高光、法线贴图、阴影)奠定基础。fill:#333;color:#333;color:#333;

2025-12-16 20:46:11 965

原创 教程 35 - 在UI渲染通道中绘制

在上一教程中,我们实现了多渲染通道架构,将 World Renderpass 和 UI Renderpass 分离。现在我们将实现在 UI Renderpass 中实际绘制 2D UI 元素。2D 顶点格式vertex_2d):只包含位置和纹理坐标的简化顶点UI 材质类型:区分 3D 世界材质和 2D UI 材质泛型几何体创建:支持不同顶点格式的统一接口默认 2D 几何体:用于测试的基础 2D quadfill:#333;color:#333;color:#333;fill:none;

2025-12-16 20:11:44 853

原创 教程 34 - 多渲染通道

在之前的教程中,我们只有一个渲染通道 (Renderpass),用于渲染所有几何体。但游戏引擎通常需要渲染多种类型的内容:3D 世界、2D UI、后处理效果、阴影贴图等。每种内容都有不同的渲染需求。本教程将介绍多渲染通道架构(Multiple Renderpasses),将 3D 世界渲染和 2D UI 渲染分离到不同的 renderpass 中。使用不同的着色器 (World 用透视投影,UI 用正交投影)使用不同的 framebuffer (离屏渲染 vs 直接显示)

2025-12-15 19:50:14 1011

原创 教程 33 - 资源系统

在之前的教程中,我们实现了多个独立的资源管理系统:纹理系统、材质系统、几何体系统。每个系统都有自己的加载逻辑,这导致代码重复和维护困难。本教程将介绍资源系统(Resource System),它提供了一个统一的、可扩展的资源加载框架。通过加载器模式(Loader Pattern),资源系统将资源加载逻辑模块化,让不同类型的资源可以通过注册加载器来实现加载。fill:#333;color:#333;color:#333;fill:none;Existing Systems 现有系统。

2025-12-15 19:47:30 580

原创 教程 32 - 几何体系统

几何体 = 顶点数据 + 索引数据 + 材质顶点数据:...索引数据:indices = [0, 1, 2, 0, 2, 3] // 定义三角形材质:指向material*的引用恭喜你完成了本教程!几何体系统让我们可以高效管理和渲染3D形状。通过程序化生成、引用计数、渲染包等机制,我们构建了一个灵活且高效的几何体管理系统。结合之前的纹理和材质系统,Kohi引擎现在已经具备了渲染复杂3D场景的基础能力。关键要点回顾几何体 = 顶点 + 索引 + 材质ID索引比名称查找更适合几何体。

2025-12-14 17:12:40 1336

原创 教程 31 - 材质系统

材质 = 颜色 + 纹理 + 光照属性 + ...示例1:木头材质- 漫反射颜色: (0.6, 0.4, 0.2)- 漫反射贴图: "wood_diffuse.png"- 法线贴图: "wood_normal.png"- 粗糙度: 0.8- 金属度: 0.0示例2:金属材质- 漫反射颜色: (0.9, 0.9, 0.9)- 金属度: 1.0- 粗糙度: 0.2恭喜你完成了本教程!材质系统让我们可以用数据驱动的方式定义物体外观。

2025-12-14 17:10:03 763

原创 教程 30 - 纹理系统

恭喜你完成了本教程!纹理系统是游戏引擎中最重要的子系统之一。我们实现了一个生产级的资源管理系统,包括哈希表查找、引用计数、自动释放等高级特性。虽然还有优化空间(哈希冲突处理、动态扩容等),但现在的实现已经足够健壮和高效。关键要点回顾哈希表提供O(1)的查找性能引用计数自动管理资源生命周期auto_release标志支持不同的使用模式统一的系统接口简化资源管理避免重复加载节省内存和加载时间资源管理是游戏引擎的核心,掌握这些概念对于开发任何大型软件都非常重要。

2025-12-12 20:59:55 1195

原创 教程 29 - 从磁盘加载纹理

stb_image是Sean Barrett编写的一系列单头文件库的一部分。恭喜你完成了本教程!现在你的引擎可以从磁盘加载真实的纹理图像了。从硬编码的棋盘格纹理到加载PNG图像,我们的引擎变得越来越实用。虽然还有很多可以改进的地方(异步加载、纹理流式加载、压缩格式支持等),但现在的基础已经足够开始创建简单的3D场景了。关键要点回顾stb_image提供了简单易用的图像加载功能Generation机制支持纹理热重载默认纹理回退避免了渲染错误透明度检测为后续渲染优化提供信息。

2025-12-12 20:58:55 957

原创 教程 28 - 图像/纹理描述符与属性

*** @brief 任何设置为此值的ID都应被视为无效,* 不指向真实对象。/*** @brief 任何设置为此值的ID都应被视为无效,* 不指向真实对象。恭喜你完成了本教程!这是Kohi渲染系统中最复杂的部分之一。我们实现了完整的纹理绑定pipeline,从顶点属性到着色器采样。虽然代码量很大,但这个系统为后续的材质系统、纹理流式加载等高级功能提供了坚实的基础。关键要点回顾多级描述符设计实现了性能优化和关注点分离Generation跟踪避免不必要的描述符更新。

2025-12-10 21:08:59 746

原创 教程 27 - 图像与纹理

在深入代码之前,让我们先了解纹理系统的整体架构:fill:#333;color:#333;color:#333;fill:none;GPU端CPU端VkImageVkSampler暂存缓冲区像素数据着色器采样首先,我们需要定义通用的纹理结构体。恭喜你完成了本教程!✅ 通用纹理结构体设计✅ Vulkan图像创建✅ 图像布局转换✅ 数据从CPU到GPU的传输✅ 采样器配置纹理系统是任何现代游戏引擎的核心组件。虽然这只是基础部分,但它为后续的纹理采样、材质系统等功能奠定了基础。

2025-12-10 21:07:47 604

原创 教程 26 - 相机控制系统

在前面的教程中,我们实现了 MVP 变换,但相机一直是静止的。现在我们要让相机动起来!graph LRA[⌨️ 键盘输入] --> B[🎮 输入处理]B --> C[📐 更新状态]C --> D[🔢 计算View矩阵]D --> E[🖥️ 渲染场景]核心任务✅ 定义相机状态(位置、欧拉角)✅ 处理键盘输入(WASD、方向键)✅ 计算 View 矩阵✅ 传递给渲染器在。

2025-12-08 20:31:20 869

原创 教程 25 - Push Constants 与 Model 矩阵

在教程 24 中,我们实现了全局 UBO 来传递 projection 和 view 矩阵。但我们还缺少Model 矩阵- 它控制每个物体的位置、旋转和缩放。graph LRA[🎮 对象数据] --> B[Push Constants]B --> C[顶点着色器]D[📊 全局UBO] --> CC --> E[MVP变换]E --> F[🖥️ 屏幕]核心任务✅ 理解 Push Constants 的概念和优势✅ 在管线布局中配置 Push Constants✅ 在着色器中使用。

2025-12-08 20:29:41 592

原创 教程 24 - Uniform Buffer Objects 与描述符系统

/ 当前的顶点着色器 - 硬编码坐标// ❌ 无法移动、旋转、缩放!问题❌ 无法移动相机❌ 无法旋转物体❌ 无法实现透视投影❌ 所有坐标都是硬编码的解决方案// 使用UBO的顶点着色器mat4 view;// ✅ 可以变换!是一块GPU内存,用于存储着色器中的uniform变量。│ Uniform 变量的特点 ││ ✓ 所有顶点/片段共享相同的值 ││ ✓ 在一次绘制调用中保持不变 ││ ✓ 可以在下次绘制前更新 ││ ✓ 高效传递少量数据 │示例对比。

2025-12-07 20:09:39 1174

原创 教程 23 - 绘制到屏幕

我们将绘制一个四边形(由两个三角形组成),并根据顶点位置生成渐变色。│ ╲ ││ ╲ │ ← 两个三角形│ ╲ │三角形1: V0, V1, V2三角形2: V0, V3, V1颜色映射顶点位置从-1.0到1.0片段着色器将其映射到颜色0.0到1.0结果:彩色渐变效果!在// 在 vulkan_renderer_backend_initialize() 末尾,create_buffers() 之后// TODO: 临时测试代码(稍后会移到资源系统)// 定义4个顶点(四边形的四个角)

2025-12-07 20:08:35 785

原创 教程 22 - Vulkan 缓冲区系统

缓冲区(Buffer)是GPU内存中的一块线性存储区域,用于存储各种类型的数据。│ GPU内存布局 ││ ││ │ 顶点缓冲区 │ ← 顶点位置、法线、UV等 ││ ││ │ 索引缓冲区 │ ← 三角形索引 ││ ││ │ Uniform缓冲区 │ ← 变换矩阵、材质参数 ││ ││ │ 暂存缓冲区 │ ← 临时数据传输 ││ │在/*** @brief Vulkan缓冲区封装* 包含缓冲区对象和其绑定的内存/// 缓冲区总大小(字节) u64 total_size;

2025-12-05 19:58:18 998

原创 教程 21 - Vulkan 图形管线

图形管线(Graphics Pipeline)是GPU渲染的核心,它定义了顶点数据如何变成屏幕上的像素。│ Vulkan 图形管线完整流程 ││ ││ [顶点数据] ││ ↓ ││ │ 1. 顶点输入 (VB/IB) │ ← 固定功能 ││ ↓ ││ │ 2. 顶点着色器 │ ← 可编程 🎨 ││ ↓ ││ │ 3. 曲面细分 (可选) │ ← 可编程 ││ ↓ ││ │ 4. 几何着色器 (可选) │ ← 可编程 ││ ↓ ││ │ 5. 光栅化 │ ← 固定功能 ││ ↓ │。

2025-12-05 19:52:29 843

原创 教程 20 - 文件系统与着色器模块

上一篇:教程 19 - 资源管道设置 | 下一篇:待定 | 返回目录通过本教程,你将学会:在本教程中,我们将实现两个关键系统:着色器模块的重要性在Vulkan中,着色器必须以SPIR-V字节码形式提供。我们需要:实现步骤概览:文件系统抽象文件操作API读写功能着色器加载GLSL源码SPIR-V编译Vulkan着色器模块图形管线集成🗂️ 第一部分:文件系统抽象核心概念什么是文件系统抽象?文件系统抽象层是一个统一的接口,隐藏了不同操作系统的文件操作差异。文件句柄设计步骤 1:创建文件句柄结

2025-12-04 20:03:47 1041

原创 教程 19 - 资源管道设置

在前面的教程中,我们完成了数学库的实现。现在,在继续深入渲染系统之前,我们需要建立资源管道,为后续的着色器、纹理、模型等资源做好准备。本教程将实现资源目录结构assets/- 源资源文件(GLSL 着色器等)- 编译后的资源(SPIR-V 着色器等)着色器编译流程编译顶点着色器 (.vert.glsl → .vert.spv)编译片段着色器 (.frag.glsl → .frag.spv)错误检查和报告构建后脚本(Windows)(Linux)编译着色器并复制所有资源开发环境集成。

2025-12-04 20:01:40 1047

原创 教程 18 - 矩阵与四元数数学库完成

在教程 17 中,我们实现了向量数学库 (Vec2/Vec3/Vec4)。矩阵和四元数。本教程将实现Mat4 (4x4 矩阵)矩阵基础运算 (乘法、转置、求逆)变换矩阵 (平移、缩放、旋转)投影矩阵 (正交、透视)视图矩阵 (相机 look_at)Quaternion (四元数)四元数基础运算 (归一化、共轭、求逆)四元数乘法四元数转矩阵四元数插值 (SLERP)这些数学工具是所有 3D 图形应用的基础,从简单的物体移动到复杂的骨骼动画,都离不开矩阵和四元数。齐次坐标是关键!

2025-12-03 20:26:26 587

原创 教程 17 - 构建系统重构与数学库基础

在前面的教程中,我们完成了 Vulkan 渲染循环的基础实现。现在,在继续深入图形渲染之前,我们需要回过头来完善两个重要的基础设施构建系统重构- 引擎库构建- 引擎库构建(Windows)- 测试床构建- 测试床构建(Windows)数学库第一部分数学常量 (π, √2, 角度转换等)基础数学函数 (sin, cos, sqrt, abs, random 等)向量类型定义 (vec2, vec3, vec4, quat)向量运算函数 (加减乘除、点积、叉积、归一化等)

2025-12-03 20:23:26 996

原创 教程 16 - Vulkan 渲染循环与窗口调整

✅ Renderpass (定义渲染操作)✅ Command Buffer (记录 GPU 命令)✅ Framebuffer (渲染目标)✅ Fence 和 Semaphore (同步对象)现在,我们要将这些组件整合到一个完整的渲染循环等待上一帧完成- 使用 Fence 确保 GPU 完成了上一帧获取交换链图像- 从交换链获取下一个可用图像记录渲染命令- 在 Command Buffer 中记录清屏等命令提交到 GPU- 将 Command Buffer 提交到图形队列呈现到屏幕。

2025-12-02 20:49:32 929

原创 教程 15 - Vulkan 帧缓冲和同步对象

在教程 14中,我们创建了命令缓冲。现在我们要创建Framebuffers(帧缓冲)和同步对象graph LRF --> H[⏰ CPU-GPU 同步]G --> I[🎮 GPU 内部同步]H --> J[✅ 渲染完成]I --> J核心任务✅ 创建 Framebuffer(连接 Renderpass 和图像)✅ 创建 Fence(CPU-GPU 同步)✅ 创建 Semaphore(GPU 内部同步)✅ 实现 In-Flight Frames 机制✅ 集成到渲染循环。

2025-12-01 20:41:47 1022

原创 教程 14 - Vulkan 命令缓冲(Command Buffers)

在教程 13中,我们创建了 Renderpass。现在我们要创建Command Buffers(命令缓冲)graph LRB --> E[🎨 记录渲染命令]C --> ED --> EE --> F[📤 提交到队列]F --> G[🎮 GPU 执行]核心任务✅ 创建 Command Pool(命令池)✅ 分配 Command Buffers(命令缓冲)✅ 实现命令记录的开始/结束✅ 实现状态管理和验证✅ 支持单次使用命令缓冲Command Buffer(命令缓冲)

2025-11-30 16:28:00 959

原创 教程 13 - Vulkan 渲染通道(Renderpass)

在教程 12中,我们创建了逻辑设备和交换链,拥有了渲染目标。现在我们要创建Vulkan Renderpass(渲染通道)graph LRA[📋 Renderpass] --> B[🌈 颜色附件]A --> C[🔍 深度附件]A --> E[🔄 依赖关系]B --> F[🎨 渲染输出]C --> FD --> FE --> FF --> G[🖼️ 最终图像]核心任务✅ 定义 Renderpass 数据结构✅ 配置颜色和深度附件✅ 创建 Subpass 描述。

2025-11-29 19:33:46 971

原创 教程 12 - Vulkan 逻辑设备和交换链

在上一篇教程中,我们成功创建了 Vulkan 表面并选择了合适的物理设备。从选定的物理设备创建逻辑设备获取设备队列句柄理解交换链(Swapchain)的概念和作用创建和配置 Vulkan 交换链管理交换链图像和深度附件实现交换链的重建机制// 物理设备// 逻辑设备// 交换链支持信息// 队列族索引// 队列句柄// 设备属性// 深度格式// 图像句柄// 图像内存// 图像视图u32 width;// 宽度u32 height;

2025-11-29 19:29:11 987

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除