自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于vulkan多窗口系统设计思考1

先抽象出一个渲染表面接口RenderSurfaceInterface类,其中声明了例如表面尺寸、表面格式、表面数量(用于多重缓冲)等函数。渲染表面接口分别由Window和RenderSurfece两个类实现,Window类用于直接把渲染结果呈现到窗口,而RenderSurfece是渲染到特定缓冲区。Window和RenderSurfece类中都包含了LogicDevice类指针,LogicDe...

2019-09-04 10:08:29 847

翻译 Vulkan Cookbook 第八章 7 指定管线光栅化状态

指定管线光栅化状态译者注:示例代码点击此处光栅化过程从组装的多边形生成片段(像素)。视口状态用于指定在帧缓冲区坐标中生成片段的位置。要指定如何(如果有)生成片段,我们需要准备光栅化状态。怎么做...1.创建名为rasterization_state_create_info的VkPipelineRasterizationStateCreateInfo类型变量,使用以下值初始化起成员:...

2019-06-27 18:28:14 717 2

翻译 Vulkan Cookbook 第八章 6 指定管线视口和裁剪测试状态

指定管线视口和裁剪测试状态译者注:示例代码点击此处在屏幕上绘制对象需要我们指定屏幕参数。 创建交换链是不够的 - 我们并不总是需要绘制到整个可用的图像区域。 在某些情况下,我们只想在整个图像中绘制较小的图像,例如汽车后视镜中的反射或分屏多人游戏中的一半图像。 我们通过管线视口和裁剪测试状态定义要绘制的图像区域。做好准备怎么做...1.如果要对多个视口执行渲染,请创建启用...

2019-06-27 16:49:19 491

翻译 Vulkan Cookbook 第八章 5 指定管线细分状态

指定管线细分状态译者注:示例代码点击此处曲面细分着色器是可在图形管道中启用的可选附加可编程着色器阶段之一。 但是当我们想要激活它们时,还需要准备管线细分状态。怎么做...1.创建名为tessellation_state_create_info的VkPipelineTessellationStateCreateInfo类型变量。 使用以下命令初始化其成员: ·sType为VK...

2019-06-26 17:58:48 224

翻译 Vulkan Cookbook 第八章 4 指定管线输入程序集状态

指定管道输入程序集状态译者注:示例代码点击此处制几何图形(3D模型)涉及指定从提供的顶点形成的图元的类型。这是通过输入程序集状态完成的。怎么做...1.创建名为input_assembly_state_create_info的VkPipelineInputAssemblyStateCreateInfo类型变量。 使用以下值初始化其成员: ·sType为VK_STRUCTUR...

2019-06-26 17:40:35 224

翻译 Vulkan Cookbook 第八章 3 指定管线顶点绑定描述,属性描述和输入状态

指定管线顶点绑定描述,属性描述和输入状态译者注:示例代码点击此处当我们想要绘制几何体时,我们准备顶点及其附加属性,如法线向量,颜色或纹理坐标。 这样的顶点数据是由我们任意选择的,因此为了硬件正确使用它们,我们需要指定它们有多少属性,它们如何在内存中布局,或者它们从哪里取出。 此信息通过创建图形管线所需的顶点绑定描述和属性描述提供。怎么做...1.创建名为binding_descri...

2019-06-26 16:17:08 563

翻译 Vulkan Cookbook 第八章 2 指定管线着色器阶段

指定管线着色器阶段译者注:示例代码点击此处在计算管线中,我们只能使用计算着色器。 但图形管线可能包含多个着色器阶段 - 顶点(这是必须的),几何,曲面细分控制和评估以及片段。 因此,为了正确创建管线,我们需要指定当给定管线绑定到命令缓冲区时,哪些可编程着色器阶段将处于活动状态。 我们还需要为所有启用的着色器提供源代码。做好准备为了简化内容并减少准备所启用的着色器阶段描述所需的参数数...

2019-06-26 15:24:20 215

翻译 Vulkan Cookbook 第八章 1 创建着色器模块

创建着色器模块译者注:示例代码点击此处创建管道对象的第一步是准备着色器模块。 它们代表着色器并包含用SPIR-V程序集编写的代码。 单个模块可以包含多个着色器阶段的代码。 当我们编写着色器程序并将它们转换为SPIR-V形式时,我们需要创建一个着色器模块(或多个模块),然后才能在我们的应用程序中使用着色器。怎么做...1.获取存储在名为logical_device的VkDevice类...

2019-06-26 14:56:10 287

翻译 Vulkan Cookbook 第八章 图形和计算管线

图形和计算管线在本章中,我们将介绍以下内容:创建着色器模块指定管线着色器阶段指定管线顶点绑定描述,属性描述和输入状态指定管线输入程序集状态指定管线细分状态指定管线视口和剪刀测试状态指定管线光栅化状态指定管线多重采样状态指定管线深度和模板状态指定管线混合状态指定管线动态状态创建管线布局指定图形管线创建参数创建管线缓存对象从管线缓存中检索数据合并多个管线缓存对象创...

2019-06-24 13:27:31 548

翻译 Vulkan Cookbook 第七章 11 使用几何着色器显示多边形法线

使用几何着色器显示多边形法线译者注:示例代码点击此处渲染几何体时,我们通常为每个顶点提供多个属性 - 绘制模型的位置,纹理的纹理坐标和照明计算的法线向量。 检查所有这些数据是否正确可能并不容易,但有时,当我们的渲染技术无法按预期工作时,可能是必要的。在图形编程中,有一些常用的调试方法。 显示为二维的纹理坐标而不是颜色。 我们可以对法线向量做同样的事情,但由于它们是三维的,我们也可以用线...

2019-06-24 13:12:24 361

翻译 Vulkan Cookbook 第七章 10 编写纹理顶点和片段着色器

编写纹理顶点和片段着色器译者注:示例代码点击此处纹理是一种常用技术,可显着提高渲染图像的质量。 它允许我们加载图像并将其包裹在对象周围,如壁纸。 它增加了内存使用量,但节省了处理更复杂几何体时会浪费的性能。怎么做...1.在名为shader.vert的文本文件中创建顶点着色器(请参阅编写编写顶点着色器内容)。2.除顶点位置外,在顶点着色器中定义一个附加输入变量(属性),通过该变量...

2019-06-24 12:02:39 349

翻译 Vulkan Cookbook 第七章 9 在着色器中使用推式常量(push constants)

在着色器中使用推式常量(push constants)译者注:示例代码点击此处当我们向着色器提供数据时,通常使用uniform缓冲区,存储(storage)缓冲区或其他类型的描述符资源。 遗憾的是,更新此类资源可能不太方便,尤其是当我们需要提供频繁更改的数据时。为此,引入了推式常量。 通过它们,我们可以通过更新描述符资源以简化和快速的方式提供数据。 但是,我们需要适应更小的可用空间。...

2019-06-24 11:21:50 830

翻译 Vulkan Cookbook 第七章 8 编写顶点着色器,将顶点位置乘以投影矩阵

编写顶点着色器,将顶点位置乘以投影矩阵译者注:示例代码点击此处将几何体从局部变换到裁剪空间通常由顶点着色器执行,但任何其他顶点处理阶段(曲面细分或几何)都可以完成此任务。 通过指定模型,视图和投影矩阵并将它们从应用程序提供给着色器作为三个单独的矩阵或作为一个完整的模型 - 视图 - 投影矩阵(简称MVP)来完成转换。 最常见和最简单的方法是使用uniform缓冲区,通过它我们可以提供这样的...

2019-06-24 11:04:11 551

翻译 Vulkan Cookbook 第七章 7 编写计算着色器

编写计算着色器译者注:示例代码点击此处顾名思义,计算着色器用于一般的数学计算。 它们在定义的三维大小的(本地)组中执行,其可以访问公共数据集。 同时,可以执行许多本地组以更快地生成结果。怎么做...1.创建一个扩展名为comp的文本文件(例如,shader.comp)。2.在文件的第一行插入#version 450。3.使用输入布局(layout)限定符,定义本地工作组的大小:...

2019-06-24 10:39:45 815

翻译 Vulkan Cookbook 第七章 6 编写片段着色器

编写片段着色器译者注:示例代码点击此处片段(或像素)是可能在屏幕上显示的图像的一部分。 它们是在称为光栅化的过程中从几何体(绘制的图元)创建的。 它们具有特定的屏幕空间坐标(x,y和深度),但没有任何其他数据。 我们需要编写一个片段着色器来指定需要在屏幕上显示的颜色。 在片段着色器中,我们还可以选择应该在其中写入给定颜色的附件。怎么做...1.创建一个扩展名为frag文本文件例如,...

2019-06-24 10:17:56 193

翻译 Vulkan Cookbook 第七章 5 编写几何着色器

编写几何着色器译者注:示例代码点击此处3D场景由称为网格的对象组成。 网格是一组顶点,形成一个对象的外表面。 该表面通常由三角形表示。 当我们渲染一个对象时,我们提供顶点并指定它们构建的基元(点,线,三角形)的类型。 在顶点和可选曲面细分阶段处理顶点之后,它们被组装成指定类型的基元。 我们可以启用(也是可选的)几何阶段和写几何着色器来控制或改变从顶点形成基元的过程。 在几何着色器中,我们甚...

2019-06-24 09:41:03 293

翻译 Vulkan Cookbook 第七章 4 编写曲面细分评估着色器

编写曲面细分评估着色器译者注:示例代码点击此处细分评估是细分过程中的第二个可编程阶段。当几何体已经细分并且用于收集细分结果以形成新顶点并进一步修改它们时,将执行该操作。启用细分后,我们需要编写细分评估着色器来获取生成的顶点的位置,并将它们提供给相连的管线阶段。怎么做...1.创建一个扩展名为tese的文本文件(例如,shader.tese)。2.在文件的第一行插入版本450。3...

2019-06-24 08:47:28 250

翻译 Vulkan Cookbook 第七章 3 编写曲面细分控制着色器

编写曲面细分控制着色器译者注:示例代码点击此处细分是一个将几何划分为更小部分的过程。 在图形编程中,它允许我们以更灵活的方式改进渲染对象的细节数量或动态地改变它们的参数,例如平滑度或形状。是否启用是可选的。 如果启用,则在顶点着色器之后执行。 它有三个步骤,其中两个是可编程的。 第一个可编程曲面细分阶段用于设置控制曲面细分执行方式的参数。 我们通过编写指定曲面细分因子值的曲面细分控制着...

2019-06-23 17:02:21 579

翻译 Vulkan Cookbook 第七章 2 编写顶点着色器

编写顶点着色器译者注:示例代码点击此处顶点处理是可以编程的第一个图形管道阶段。 其主要目的是将形成我们几何体的顶点位置从其局部坐标系转换为称为裁剪空间的坐标系。 裁剪坐标系用于允许图形硬件以更容易和更优化的方式执行所有后续步骤。 其中一个步骤是剪切,它将处理的顶点剪切为仅可能可见的顶点,因此是坐标系的名称。 除此之外,我们可以执行所有其他操作,每个操作在绘制几何体的每个顶点执行一次。怎...

2019-06-23 05:49:32 324

翻译 Vulkan Cookbook 第七章 1 将GLSL着色器转换为SPIR-V组件

将GLSL着色器转换为SPIR-V组件译者注:示例代码点击此处Vulkan API要求我们以SPIR-V组件的形式提供着色器。 它是一个二进制的中间表示,因此手动编写它是一项非常困难和繁琐的任务。 使用高级着色语言(如GLSL)编写着色器程序要容易得多,也更快捷。 之后我们只需要使用glslangValidator工具将它们转换为SPIR-V形式。怎么做...1.下载并安装Vulk...

2019-06-22 17:05:39 1847

翻译 Vulkan Cookbook 第七章 着色器

着色器本章中,我们将介绍一下内容:将GLSL着色器转换为SPIR-V组件 编写顶点着色器 编写曲面细分控制着色器 编写曲面细分评估着色器 编写几何着色器 编写片段着色器 编写计算着色器 编写顶点着色器,将顶点位置乘以投影矩阵 在着色器中使用推式常量 编写纹理顶点和片段着色器 使用几何着色器显示多边形法线介绍大多数现代图形硬件平台使用可编程管线渲染图像 3D图形数...

2019-06-22 08:35:12 348

原创 Vulkan Cookbook 第六章 译者总结篇

先占个位置之后分析

2019-06-22 08:18:58 158

翻译 Vulkan Cookbook 第六章 12 销毁渲染过程

销毁渲染过程译者注:示例代码点击此处如果不需要渲染过程并且不再使用提交给硬件的命令,我们就可以销毁它。怎么做...1.使用创建了渲染过程的逻辑设备的句柄来初始化名为logical_device的VkDevice类型的变量。2.将应该销毁的渲染过程的句柄存储在名为render_pass的VkRenderPass类型的变量中。3.调用vkDestroyRenderPass(logi...

2019-06-22 07:54:30 119

翻译 Vulkan Cookbook 第六章 11 销毁帧缓冲区

销毁帧缓冲区译者注:示例代码点击此处当挂起的命令不再使用帧缓冲并且我们不再需要它时,我们可以销毁它。怎么做...使用创建了帧缓冲区的逻辑设备的句柄初始化名为logical_device的VkDevice类型的变量。获取镇缓冲区的句柄并将其存储在名为framebuffer的VkFramebuffer类型的变量中。调用vkDestroyFramebuffer( logical_de...

2019-06-22 07:44:34 143

翻译 Vulkan Cookbook 第六章 10 结束渲染过程

结束渲染过程译者注:示例代码点击此处当已经记录了所有子过程的所有命令时,我们需要结束(停止或完成)渲染过程。怎么做...获取命令缓冲区的句柄并将其存储在名为command_buffer的VkCommandBuffer类型变量中。 确保命令缓冲区处于记录状态,并且已经记录了开始渲染过程的操作。调用vkCmdEndRenderPass( command )为其提供command_b...

2019-06-22 07:35:09 155

翻译 Vulkan Cookbook 第六章 9 进入下一个子过程

进入下一个子过程译者注:示例代码点击此处在渲染过程中记录的命令被划分为子过程。当一个给定子过程的一组命令已经被记录并且我们想要记录另一个子类的命令时,我们需要切换(或前进)到下一个子过程。怎么做...获取正在记录的命令缓冲区的句柄,并将其存储在名为command_buffer的vkcommandbuffer类型变量中。确保开始渲染过程的操作已记录在命令缓冲区中。指定如何记录子过...

2019-06-22 07:13:37 164

翻译 Vulkan Cookbook 第六章 8 开始渲染过程

开始渲染过程译者注:示例代码点击此处当我们创建了渲染过程和帧缓冲区并且我们准备开始记录渲染几何所需的命令时,我们必须记录开始渲染过程的操作。 这也是自动启动其第一个子过程。怎么做...1.获取存储在名为command_buffer的VkCommandBuffer类型的变量中的命令缓冲区的句柄。 确保命令缓冲区处于记录状态。2.用渲染过程的句柄初始化名为render_pass的V...

2019-06-22 06:52:12 244

翻译 Vulkan Cookbook 第六章 7 使用颜色和深度附件准备渲染过程和帧缓冲

使用颜色和深度附件准备渲染过程和帧缓冲译者注:示例代码点击此处渲染3D场景通常不仅涉及颜色附件,还涉及用于深度测试的深度附件(我们希望更靠近相机的物体遮挡更多物体)。在本节中,我们将看到如何为颜色和深度数据创建图像,以及使用单个子过程创建渲染过程,渲染为颜色和深度附件。 我们还将创建一个帧缓冲区,它将两个图像用于渲染过程附件。做好准备...与本章的早期内容一样,在本节中,我们将...

2019-06-22 06:25:30 704

翻译 Vulkan Cookbook 第六章 6 为几何渲染和后处理准备渲染过程subpasses

为几何渲染和后处理准备渲染过程subpasses译者注:示例代码点击此处在开发应用程序(如游戏或CAD工具)时,通常需要绘制几何图形,然后在渲染整个场景时,应用称为后处理的其他图像效果。在本节中,我们将看到如何准备一个渲染过程,其中我们将有两个subpasses。第一个subpasses呈现为两个附件——颜色和深度。第二个subpasses从第一个颜色附件读取数据并渲染到另一个颜色附件...

2019-06-21 13:13:09 513

翻译 Vulkan Cookbook 第六章 5 创建一个帧缓冲区

创建渲染过程译者注:示例代码点击此处帧缓冲区与渲染过程一起使用。 它们指定应该为渲染过程中定义的相应附件使用哪些图像资源。 它们还定义了可渲染区域的大小。 这就是为什么当我们想要记录绘图操作时,不仅需要创建渲染过程,还需要创建帧缓冲。怎么做...1.获取应与framebuffer兼容的渲染过程的句柄,并使用它来初始化名为render_pass的VkRenderPass类型的变量。...

2019-06-18 05:27:47 292

翻译 Vulkan Cookbook 第六章 4 创建渲染过程

创建渲染过程译者注:示例代码点击此处渲染(绘制几何图形)只能在渲染过程中执行。当我们还想执行其他操作(如图像后处理或准备几何图形和光预处理数据)时,需要将这些操作排序到子组中。为此,我们指定所有必需附件的描述、将操作分组到其中的所有子组以及这些操作之间必需的依赖关系。准备好此数据后,可以创建渲染过程。做好准备...为了减少需要提供的参数数量,在本节中,我们使用SubpassPara...

2019-06-17 05:50:28 207

翻译 Vulkan Cookbook 第六章 3 指定子过程之间的依赖关系

指定子过程之间的依赖关系译者注:示例代码点击此处当给定子过程中的操作依赖于同一渲染过程中较早的子过程中的操作结果时,我们需要指定子过程依赖性。 如果渲染过程中记录的操作与之前执行的操作之间存在依赖关系,或者在渲染过程之后执行的操作与渲染过程中执行的操作之间存在依赖关系,则也需要这样做。 也可以在单个子过程中定义依赖关系。提示:定义子过程依赖关系与设置内存屏障类似。怎么做...创...

2019-06-17 05:22:24 1036

翻译 Vulkan Cookbook 第六章 2 指定子过程描述

指定子过程描述译者注:示例代码点击此处在渲染过程中执行的操作被分组为子过程。每个子过程代表渲染命令的一个阶段,其中使用了渲染过程附件的子集(我们在其中渲染或读取数据)。渲染过程使用需要至少一个在我们开始渲染过程时自动启用的子过程。对于每个子过程,我们需要准备一个描述。做好准备...为简化每个子过程所需的参数数量,我们使用自定义结构类型,它是Vulkan中定义的VkSubpassDe...

2019-06-17 04:46:31 369

翻译 Vulkan Cookbook 第六章 1 指定附件描述

指定附件描述译者注:示例代码点击此处渲染过程表示一组成为附件的资源(图像),在渲染操作期间使用这些附件。它们分为颜色、深度/模板,输入或解析附件。在我们创建渲染过程之前,需要描述其中使用的所有附件。怎么做...创建一个名为attachments_descriptions的vkattachmentDescription类型元素的向量。为渲染过程中使用的每个附件向vkattachmen...

2019-01-14 00:00:50 503

翻译 Vulkan Cookbook 第六章 渲染过程和帧缓冲区

渲染过程和帧缓冲区本章中,我们将介绍一下内容:指定附件描述 指定子过程描述 指定子过程之间的依赖关系 创建渲染过程 创建一个帧缓冲区 为几何渲染和后处理准备渲染过程subpasses 使用颜色和深度附件准备渲染过程和帧缓冲 开始渲染过程 进入下一个子过程 结束渲染过程 销毁帧缓冲区 销毁渲染过程介绍在Vulkan中,绘图命令被组织成渲染过程。渲染过程是一组子视...

2019-01-09 01:12:27 387

原创 Vulkan Cookbook 第五章 译者总结篇

译者总结篇想要在管线阶段中使用资源,必须通过描述符集。要使用描述集必须经过,创建组合采样器或统一缓冲区,准备描述符集布局,创建描述池,并从中分配描述符集。然后使用创建的组合采样器或统一缓冲区更新分配的集合。最后将其绑定到命令缓冲区并在着色器中访问。...

2019-01-09 00:50:42 154

翻译 Vulkan Cookbook 第五章 20 销毁采样器

销毁采样器译者注:示例代码点击此处当我们不在需要采样器并且我们确定,当我们不再需要取样器,并且确信它不再被挂起的命令使用时,我们可以销毁它。怎么做...获取创建采样器的逻辑设备的句柄,并将其存储在名为logical_device的VkDevice类型的变量中。 获取应销毁的采样器句柄,通过名为sampler的VkSampler类型的变量提供它。 调用vkDestroySampl...

2019-01-08 01:48:31 118

翻译 Vulkan Cookbook 第五章 19 销毁描述符集布局

销毁描述符集布局译者注:示例代码点击此处应销毁不再使用的描述符集布局。怎么做...使用名为logical_device的VkDevice类型的变量提供的逻辑设备句柄。 获取已创建的描述符集布局的句柄,并使用它来初始化名为descriptor_set_layout的VkDescriptorSetLayout类型变量。 调用vkDestroyDescriptorSetLayout(...

2019-01-08 01:36:16 139

翻译 Vulkan Cookbook 第五章 18 销毁描述符池

销毁描述符池译者注:示例代码点击此处当我们不再需要描述符池时,可以销毁它(使用从池中分配的所有描述符集)。怎么做...获取已创建逻辑设备的句柄并将其存储在名为logical_device的VkDevice类型的变量中。 通过名为descriptor_pool的VkDescriptorPool类型的变量提供描述符池的句柄。 调用vkDestroyDescriptorPool( l...

2019-01-08 01:29:52 179

翻译 Vulkan Cookbook 第五章 17 重置描述符池

重置描述符池译者注:示例代码点击此处我们可以立即释放从给定池分配的所有描述符集,而不会破坏池本身。为此,我们可以重置描述符池。怎么做...获取应该重置的描述符池并使用其句柄初始化名为descriptor_pool的VkDescriptorPool类型的变量。 获取创建描述符池的逻辑设备句柄。将其句柄存储在名为logical_device的VkDevice类型的变量中。 调用vk...

2019-01-08 01:16:21 153

空空如也

空空如也

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

TA关注的人

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