Vulkan RenderPass 与 Pipeline 什么的关系系


我们现在整合前几章节的结构体囷对象创建图形管线!以下是我们现在用到的对象类型作为一个快速回顾:

  • Shader stages: 着色器模块定义了图形管线可编程阶段的功能

  • Render pass: 渲染通道通过管線阶段引用附件,并定义它的使用方式

所有这些决定了图形管线的最终功能所以我们在createGraphicsPipeline函数的最后填充结构体。

现在开始引用之前的结構体数组

并引用之前描述固定管线功能的结构体。

完成之后pipeline layout管线布局,它是一个Vulkan句柄而不是结构体指针

最后我们需要引用render pass和图形管線将要使用的子通道sub pass的索引。

实际上还有两个参数:basePipelineHandle 和 basePipelineIndexVulkan允许您通过已经存在的管线创建新的图形管线。这种衍生出新管线的想法在于当偠创建的管线与现有管道功能相同时,获得较低的开销同时也可以更快的完成管线切换,当它们来自同一个父管线可以通过basePipelineHandle指定现有管线的句柄,也可以引用由basePipelineIndex所以创建的另一个管线目前只有一个管线,所以我们只需要指定一个空句柄和一个无效的索引只有在的flags字段中也指定了VK_PIPELINE_CREATE_DERIVATIVE_BIT标志时,才需要使用这些值

现在准备最后一步,创建一个类成员保存对象:

函数在Vulkan中比起一般的创建对象函数需要更多的参數它可以用来传递多个对象并创建多个对象。

我们传递VK_NULL_HANDLE参数作为第二个参数作为可选对象的引用。管线缓存可以用于存储和复用与通過多次调用函数相关的数据甚至在程序执行的时候缓存到一个文件中。这样可以加速后续的管线创建逻辑具体的内容我们会在管线缓存章节介绍。

图形管线对于常见的绘图操作是必须的所以它也应该在程序结束时销毁:

现在运行程序,确认所有工作正常并创建图形管線成功!我们已经无比接近在屏幕上绘制出东西来了。在接下来的几个章节中我们将从交换链图像中设置实际的帧缓冲区,并准备绘制命令

项目代码 地址。

想免费获取内部独家PPT资料库观看行业大牛直播?点击加入腾讯游戏学院游戏程序行业精英群



  现在我们来填充这个结构 :

  loadOp和storeO表示渲染前和渲染后要做的动作在我們的例子中,写入新片原(fragment)之前先清空FrameBuffer,使FrameBuffer变为黑色。我们想让渲染后的三角形显示到屏幕上所以这里我们将storeOp 设置为保存。

  我们将在文理(texture)蔀分再详细讲解这部分现在仅需要明确的是image 在每个后续的操作中都要转变成特定的layout。

能够为我们重新排序它们的执行顺序节省内存带寬,从而可能获取更好的性能

  先回顾一下这一章我们都做了什么:

  着色器阶段: 我们定义了 Shader module, 这是可编程部分

  现在已经到了夲章的最终阶段 ->创建Pipeline :

  Vulkan允许我们从已有的Pipeline派生新的Pipeline, 它们有很多相似点会使新Pipeline的创建花费更少。这里我们没有已存在的Pipeline

  让我们来看看这个函数:

我要回帖

更多关于 什么的关系 的文章

 

随机推荐