自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 Vulkan 一句话心智词典(去恐惧版)

Vulkan图形API核心概念速览:Vulkan通过Instance初始化,通过PhysicalDevice和LogicalDevice管理GPU资源。其核心机制包括Queue队列执行、CommandBuffer命令缓冲和CommandPool内存管理。同步机制使用Fence、Semaphore和PipelineBarrier确保执行顺序。资源管理涉及Buffer和Image,通过ImageLayout控制用途状态。渲染流程由RenderPass、Subpass和Framebuffer组成,Pipeline

2025-12-28 20:03:22 301

原创 如果把vulkan渲染流程比作烤面包的制作过程

Vulkan与OpenGL的区别如同自建工厂与点单服务:Vulkan要求开发者像工厂老板一样事无巨细地管理整个GPU流水线。从注册工厂(Instance)、选择设备(PhysicalDevice)、配置电源(Device),到设计面包托盘(Swapchain)、编写工艺流程(RenderPass)、搭建生产线(Pipeline),再到制定工人操作清单(CommandBuffer)和启动生产(QueueSubmit),每个环节都需要开发者自主决策。这种底层控制虽然复杂,但避免了运行时开销,就像工业级烤面包工厂

2025-12-23 13:51:59 308

原创 Vulkan之cpu gpu都有自己的暂存缓冲区吗

暂存缓冲区是显存中的主机可见内存区域,主要用于CPU向GPU高效传输数据。其典型使用流程为CPU写入数据后,通过命令将数据复制到GPU专用缓冲或图像资源中。在Vulkan等API中,暂存缓冲区通常具有传输源和主机可见属性,而目标资源则标记为传输目标。根据更新频率不同,数据应采用不同处理策略:静态或低频更新的大数据应通过暂存缓冲一次性上传;高频更新数据则可直接映射主机可见资源,避免额外拷贝开销。

2025-11-12 10:49:56 470

原创 vulkan创建的暂存缓冲区是在cpu上还是在gpu上

摘要:Vulkan暂存缓冲区采用两段式设计,主机可见内存用于CPU映射写入数据,再通过传输命令拷贝至设备本地内存,兼顾易用性与性能。主机可见方案适合高频更新数据,设备本地方案适用于静态资源,而集成GPU可优化统一内存访问。实际应用中需根据数据类型、更新频率选择适当方案,大块静态资源优先使用设备本地内存配合暂存上传,动态数据则可直接映射主机可见内存以降低开销。

2025-11-12 10:29:36 202

原创 如何理解Vulkan中渲染与呈现中imageIndex和 currentFrame_的关系

这篇文章通过电影院的比喻解释了Vulkan渲染中的imageIndex和currentFrame_关系。imageIndex相当于电影院使用的具体画布(物理资源),而currentFrame_则是工位编号(逻辑流水线),管理着同步工具的使用。核心要点包括:1)画布(imageIndex)是动态分配的物理图像;2)工位(currentFrame_)确保同步对象有序使用;3)二者协作实现安全并行渲染。这种分离设计既避免了资源竞争(画布复用),又保证了工作流程有序(工位轮换),精确映射了Vulkan的多缓冲渲染机

2025-10-13 14:09:16 305

原创 Vulkan原理到底学什么

学习 Vulkan 原理 ≈ 理解它为什么这样设计,以及如何在程序中正确使用 GPU显式控制:你负责内存、同步、渲染顺序。渲染流程:RenderPass + Pipeline + CommandBuffer。内存与资源:显存类型、Layout、Barrier。同步机制:CPU/GPU、多线程安全。Shader 数据传递:DescriptorSet / PushConstants。扩展与优化:Pipeline Cache、多帧渲染、Ray Tracing。

2025-09-22 14:39:11 527

原创 Vulkan计算着色器中Dispatch、workGroups、invocation之间的关系

Vulkan计算着色器采用三级并行模型:Dispatch(任务分发)定义Workgroup网格,Workgroup(工作组)是基本执行单元,每个包含固定数量的Invocation(线程)。线程通过局部ID、工作组ID和全局ID定位,共同完成并行计算。类比学校结构:Dispatch如学校(定义班级总数),Workgroup如班级(固定学生数),Invocation如学生(执行具体任务)。这种层级设计使GPU能高效组织大规模并行计算。

2025-09-04 16:48:18 1021

原创 VkImage、VkDeviceMemory、VkImageView之间的关系

Vulkan深度缓冲由三个关键对象构成:VkImage存储像素数据,VkDeviceMemory分配物理内存,VkImageView提供访问接口。创建流程为:先创建Image,再分配绑定Memory,最后创建ImageView。这种设计体现了Vulkan显式控制的理念,虽然比OpenGL复杂,但能实现更精细的性能和内存管理。销毁顺序与创建相反:先销毁ImageView,再Image,最后释放Memory。深度缓冲核心功能是实现深度测试,确保3D场景正确遮挡关系,避免不必要的片段渲染。

2025-09-02 11:09:15 227

原创 Vulkan 学习路线图

按阶段拆解,告诉你每个阶段要写哪些 Demo,逐步从三角形走到完整渲染器。

2025-08-25 21:59:39 767

原创 Vulkan学到什么程度才算学会

Vulkan作为低抽象层图形API,学习关键在于理解其设计思想而非死记API。掌握程度可分为四个阶段:入门(创建窗口/渲染三角形)、熟练(实现模型加载/光照/资源管理)、进阶(多帧渲染/高级效果/性能优化)和专家(多线程/扩展应用/框架开发)。真正"学会Vulkan"的标志是能独立完成从基础渲染到复杂3D渲染器的开发,逐步深入同步机制、性能调优等核心概念,最终达到灵活运用高级特性与跨平台优化的专家水平。学习路径体现为从功能实现到系统设计的渐进过程。

2025-08-25 21:54:48 471

原创 Vulkan笔记(十四)-同步设定绘制三角形

允许同时处理多帧(如设为2时,CPU可录制第N帧命令,而GPU执行第N-1帧),提升GPU利用率。:确保CPU等待GPU完成前一帧,防止命令缓冲区冲突(CPU-GPU同步)。录制绘制命令到当前帧的命令缓冲区(如绑定管线、设置视口、执行绘制调用。提交命令到图形队列,并关联当前帧的围栏(GPU完成后触发该围栏)。每帧拥有独立的命令缓冲区、信号量和围栏,避免同步干扰。循环使用帧资源(实现多帧并行,如双缓冲/三缓冲)。:重置命令缓冲区,确保其可被重新录制。:重置围栏状态,为当前帧做准备。)完成(避免GPU过载)。

2025-08-20 11:24:44 346

原创 Vulkan笔记(十三)-帧缓冲区与命令池命令缓冲区

帧缓冲区(Framebuffer)是 Vulkan/D3D12/OpenGL 中的核心对象,用于存储渲染结果的最终目标(即“画布”)。命令池负责为命令缓冲区分配和回收内存,避免频繁的内存申请/释放开销。(Color Attachments):存储像素颜色(输出到屏幕或纹理)。:可同时绑定多个颜色附件(如延迟渲染中的 G-Buffer)。(创建时指定队列族),确保命令缓冲区在正确的线程中录制和提交。命令缓冲区寿命短(每帧或频繁重置),驱动会优化内存分配。分配命令池(Command Pool)和命令缓冲区。

2025-08-19 17:28:24 1003

原创 Vulkan笔记(十二)-图形渲染管线配置过程

这段代码展示了 Vulkan 中。

2025-08-19 16:34:29 422

原创 Vulkan笔记(十一)-渲染通道(RenderPass)详解

1. 核心作用(1) 组织渲染流程将复杂的渲染分解为多个子流程(Subpasses),每个子流程可以依赖前一个子流程的结果(如延迟渲染中的 G-Buffer 传递)。明确附件(Attachments)(如颜色、深度、模板缓冲区)的生命周期和用途。(2) 优化内存带宽通过指定附件的加载操作(Load Op)和存储操作(Store Op),避免不必要的内存读写:****:保留附件原有内容(如叠加 UI)。****:清空附件(如每帧清空深度缓冲区)。****:保存渲染结果(如最终颜色输出到屏幕)。

2025-08-19 16:22:12 1213

原创 Vulkan笔记(十)-图形管道的七个配置项

深度测试:解决“谁在前谁在后”的问题,是 3D 渲染的基础。它决定了当前绘制的像素(源颜色,Source Color)如何与帧缓冲区(目标颜色,Destination Color)中已有的像素进行混合。将几何图元(如三角形)离散化为屏幕上的像素(称为片元/Fragment),确定哪些像素被图元覆盖,并进行属性插值计算(如颜色、深度)这里对顶点属性比如:位置 、颜色 、法线、纹理等描述信息进行创建,装配按照什么方式是点、线还是三角形等方式把顶点数据组织起来。,用于决定哪些像素最终被绘制到屏幕上。

2025-08-19 15:57:24 195

原创 VulKan笔记(九)-着色器

Vulkan 中的着色器代码必须在字节码中指定格式,而不是 GLSL 和 HLSL 等可读语法。顶点着色器与片元着色器,我这里使用的是GLSL语法格式。这个不做过多解释了。当你写好比如:shader.vert 与 shader.frag 着色器文件。如下绘制一个三角形硬编码的着色器文件。渲染管道创建的时候要把着色器创建对象赋值给管道,通过设置VkPipelineShaderStageCreateInfo分别按照不同类型设置着色器。创建shader着色器 就是两块内存设置顶点着色器与片元着色器字节码数据。

2025-08-19 15:28:47 285

原创 Vulkan笔记(八)- 图形渲染管线

每个阶段均可定制(通过着色器或状态设置),适合需要精细性能控制的场景(如游戏引擎或专业渲染工具)。存储模型的顶点数据(位置、法线、纹理坐标等)和索引数据(定义三角形如何连接)。从缓冲区读取顶点和索引数据,组装成基本图元(如三角形、线段)。对完整图元(如三角形)进行操作,可生成或销毁图元。将几何图元(如三角形)转换为屏幕上的像素(片元/Fragment)。:需手动配置管线状态(如深度测试、混合模式),不同于OpenGL的隐式状态机。对顶点属性(如颜色、深度)进行插值,生成每个片元的属性。

2025-08-19 15:15:32 484

原创 Vulkan笔记(七)---图像视图

这段代码是Vulkan中创建图像视图(Image Views)的实现,用于为交换链(Swap Chain)中的每个图像创建对应的视图。:使用交换链创建时确定的格式(swapChainImageFormat_),确保视图与图像格式一致。:设置为2D纹理视图(VK_IMAGE_VIEW_TYPE_2D),这是最常见的交换链图像类型。为交换链中的每个VkImage创建对应的VkImageView,使渲染管线能够访问这些图像。图像视图是由我们显式创建的,在程序结束时再次销毁它们。循环为每个交换链图像创建视图。

2025-08-19 11:06:35 211

原创 Vulkan笔记(六)--- 交换链

我们要设置的属性名存放在临时容器requiredExtensions中,如果全被删除,说明枚举设备扩展中包含了我们所设置的扩展属性,以此方式来判断是否支持此扩展。队列到底是如何工作的,以及从队列中呈现图像取决于交换链的设置方式,但是交换链的一般目的是同步具有屏幕刷新率的图像。Vulkan 没有“默认帧缓冲区”的概念,因此它需要一个基础设施来拥有我们将渲染到的缓冲区,然后再将它们可视化到屏幕上。这个就是选择设备支持的与屏幕设置的尺寸大小的分辨率。在设备判断是否支持的函数中增加物理设备是否支持交换链的判断。

2025-08-19 10:06:09 353

原创 Vulkan笔记(五)-逻辑层与队列

逻辑设备与队列逻辑层是应用程序与GPU交互的接口.通过 vkCreateDevice 创建需指定所需的队列族扩展与特性。(如启用几何着色器)管理资源(如缓冲区、图像、管线)和命令队列(VkQueue), 提交渲染或计算任务。:一个物理设备可创建多个逻辑设备,每个逻辑设备拥有独立的状态和资源,避免冲突(例如多线程渲染时隔离资源访问)。:可根据需求启用不同的硬件特性或扩展(如仅启用计算功能用于挖矿,而不需要图形队列)。通过获取物理设备的队列族索引(如图形队列和呈现队列)。初始化。

2025-08-18 16:24:09 478

原创 Vulkan笔记(四)-物理设备队列族

这个函数就是设置物理设备的过程,在initVulkan里初始化完成VkInstance后创建物理设备。,每个队列系列只允许子集的命令。可能有一个队列系列只允许处理计算命令或仅允许内存传输相关命令的命令。我们需要检查设备支持哪些队列系列以及哪些队列系列 中支持我们想要使用的命令。初始化 Vulkan 库后,我们需要查找并在系统中选择支持我们所需功能的显卡。几乎在Vulkan的每一次执行, 从绘图到上传纹理,任何事情都需要提交命令到队列。这样物理设备的选择以及队列族准备好以后,就可以创建逻辑设备了。

2025-08-18 12:30:52 154

转载 Vulkan笔记(三)-验证层

Vulkan验证层机制解析:通过VK_LAYER_KHRONOS_validation层实现调试功能,在非发布版本中默认启用。验证层通过检查参数合法性、追踪资源生命周期和线程安全等方式进行错误检测。实现过程包括:1)检查层可用性;2)创建实例时配置层参数;3)建立调试回调接口输出错误信息;4)通过vkCreateDebugUtilsMessengerEXT等扩展函数管理消息传递。验证层可将错误信息输出到标准错误流,开发者也可自定义回调处理。该机制有效降低了驱动程序开销,同时为开发阶段提供了必要的调试支持。

2025-08-12 14:40:38 93

转载 Vulkan笔记(二)-环境与绘制GLFW窗口

本文介绍了Vulkan开发环境的搭建和简单窗口创建方法。在Windows环境下需要安装Vulkan SDK、GLFW库和GLM数学库,并在Visual Studio中配置这些依赖项。文章展示了一个基本的Vulkan应用程序框架,包括初始化GLFW窗口、Vulkan环境的主循环流程。代码示例演示了如何创建不可调整大小的GLFW窗口并设置帧缓冲大小回调,以及通过mainLoop()函数实现基本的窗口事件处理循环。这些步骤为后续Vulkan图形渲染功能的实现奠定了基础。

2025-08-11 17:15:28 73

转载 VulKan笔记(一)-渲染流程

摘要:Vulkan是针对现代图形架构设计的跨平台GPU API,解决了传统图形API在可编程性、多线程支持等方面的局限性。其核心流程包括:1)创建实例并选择物理设备;2)设置逻辑设备和队列;3)创建窗口表面和交换链;4)配置图像视图和帧缓冲区;5)定义渲染通道;6)构建图形管线;7)准备命令缓冲;8)主循环中异步执行绘图命令。相比传统API,Vulkan要求开发者更精确地控制渲染流程,但能充分发挥现代GPU性能,支持多线程并行处理,并使用标准化着色器字节码。

2025-08-11 15:45:06 115

原创 c/c++数据结构知识笔记

1. 数据结构 数学以及逻辑模型的抽象视觉的数据类型(ADT)Node中data实际数据,next是下个数据的内存地址。列表类型(int float struct 等等)抽象数据类型是对数据和操作的定义,不存在实现。数据结构类型:数组、链表、栈、队列、树、图等。链表任意位置插入、删除、翻转节点。创建空数组 size = 0;链表头部插入数据例子。双向链表 插入 删除。

2025-05-23 13:49:58 234

原创 OCCT知识笔记之OCAF框架详解

Open CASCADE Application Framework (OCAF)是Open CASCADE Technology (OCCT)中用于管理CAD数据的核心框架,它提供了一种结构化方式来组织和管理复杂的CAD数据,如装配体、形状、属性(颜色、材料)和元数据等。属性(TDF_Attribute): 存储实际数据,如几何形状(TNaming_NamedShape)、名称(TDataStd_Name)、数值(TDataStd_Integer)等。- 使用有意义的层次结构(如装配体->部件->特征)

2025-05-16 18:01:18 769

原创 OCCT知识笔记之Poly_Triangulation详解

的结构和用法,可以有效地处理OCCT中的离散几何数据,为各种工程应用提供基础支持。,因为BRep_Tool::Triangulation()可能返回空句柄。​:OCCT中索引通常从1开始,而不是C++常见的0开始。​:对于大型网格,直接访问内部数组比逐个获取节点更高效。,需要应用变换才能得到正确的世界坐标。进行内存管理,避免直接使用裸指针。​:从形状获取的三角剖分可能带有。

2025-05-16 16:40:37 642

原创 OCCT知识笔记之BRepBuilderAPI_Sewing详解

是 OpenCASCADE 中用于缝合(拼接)多个拓扑形状(TopoDS_Shape)的重要工具类,主要用于将相邻但不连接的拓扑元素(如边、面)合并为一个连续的形状。

2025-05-13 10:17:31 672

原创 OCCT知识笔记之BRepBuilderAPI_NurbsConvert详解

​。

2025-05-13 09:42:06 389

原创 OCCT知识笔记之GCPnts_QuasiUniformDeflection详解

在曲线上生成一系列点,确保离散后的多边形逼近原始曲线的精度。算法确保相邻离散点连线(弦)与曲线之间的最大垂直距离不超过。在满足偏差的前提下,尽量使点间距均匀,避免局部过密或过疏。

2025-05-12 14:27:45 623

原创 OCCT知识笔记之分解BOX

整个矩形盒子通过不同的点线边面壳可以获取到不同的基本类型。OCCT中一个矩形 可以分解出 点 线 面 线框 实体,直接看代码示例。2.遍历盒子根据具体类型提取元素。1.创建一个矩形盒子。

2025-05-12 13:39:57 312

原创 OCCT 知识笔记之TopoDS_Compound 详解

【代码】OCCT 知识笔记之TopoDS_Compound 详解。

2025-05-12 10:36:36 757

原创 OCCT之BRepPrimAPI 与BRepBuilderAPI区别应用范围

【代码】OCCT之BRepPrimAPI 与BRepBuilderAPI区别应用范围。

2025-05-09 09:39:03 1004

原创 OCC拓扑结构知识点笔记

gp_Pnt 3D几何点TopoDS_Vertex拓扑顶点将几何点()转换为拓扑顶点(),使其可用于后续的布尔运算、布尔裁剪、曲面拟合等操作。BRepBuilderAPI_MakeVertex 创建一个顶点的几何实体并将其封装为拓扑结构(Topological Shape)。 用于在图形窗口中可视化和管理 对象(如实体、曲面、线框等),支持颜色、线型、高亮等交互式属性设置。关键点: 构建复杂形状的基本单元(如曲线端点、曲面交点);在布尔运算中作为操作对象(如切割、融合);用于测量、分析或可视化。1.两

2025-05-08 17:02:19 582

原创 occt关键内容摘要(六)-二维图形显示

OCCT 二维图形渲染

2025-04-10 15:59:27 1203

原创 occt关键内容摘要(五)-AIS包摘要

occt AIS包摘要

2025-04-10 14:26:51 871

原创 occt关键内容摘要(四)-可视化动态选取

occt可视化动态选取

2025-04-10 14:24:48 934

原创 occt关键内容摘要(三)

OCCT 二维图形到三维图形的演化流程

2025-04-08 17:39:41 509

原创 occt关键内容摘要(二)

OCCT数据结构分析

2025-04-08 14:05:57 729

原创 occt关键内容摘要(一)

用面向对象方法和软件工程思想分析,整个 OCC 由五个模块组成,分别是基础类模块、建模数据模块、建模算法模块、可视化模块、数据交换模块和应用程序模块。其中,建模数据模块主要提供二维和三维几何模型的数据结构,也称据结构模块。1.类和泛化OCC中类分为 普通类 通用类 推迟类 分别对应 C++中 具体类 抽象类和模板类2.数据类型分类句柄处理类型 和 值处理类型两种OCC 中所有数据类型可分为两大类:通过句柄(或引用)处理的数据类型和通过值处理的数据类型3.持久化和数据模式。

2025-04-07 17:12:48 727

空空如也

空空如也

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

TA关注的人

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