日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Vulkan Tutorial 14 Integration pipeline

發布時間:2025/3/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vulkan Tutorial 14 Integration pipeline 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

操作系統:Windows8.1

顯卡:Nivida GTX965M

開發工具:Visual Studio 2017


我們現在整合前幾章節的結構體和對象創建圖形管線!以下是我們現在用到的對象類型,作為一個快速回顧:

  • Shader stages: 著色器模塊定義了圖形管線可編程階段的功能
  • Fixed-function state: 結構體定義固定管線功能,比如輸入裝配、光柵化、viewport和color blending
  • Pipeline layout: 管線布局定義uniform 和 push values,被著色器每一次繪制的時候引用
  • Render pass: 渲染通道通過管線階段引用附件,并定義它的使用方式

所有這些決定了圖形管線的最終功能,所以我們在createGraphicsPipeline函數的最后填充VkGraphicsPipelineCreateInfo結構體。

VkGraphicsPipelineCreateInfo pipelineInfo = {}; pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; pipelineInfo.stageCount = 2; pipelineInfo.pStages = shaderStages;

現在開始引用之前的VkPipelineShaderStageCreateInfo結構體數組。

pipelineInfo.pVertexInputState = &vertexInputInfo; pipelineInfo.pInputAssemblyState = &inputAssembly; pipelineInfo.pViewportState = &viewportState; pipelineInfo.pRasterizationState = &rasterizer; pipelineInfo.pMultisampleState = &multisampling; pipelineInfo.pDepthStencilState = nullptr; // Optional pipelineInfo.pColorBlendState = &colorBlending; pipelineInfo.pDynamicState = nullptr; // Optional

并引用之前描述固定管線功能的結構體。

pipelineInfo.layout = pipelineLayout;

完成之后,pipeline layout管線布局,它是一個Vulkan句柄而不是結構體指針。

pipelineInfo.renderPass = renderPass; pipelineInfo.subpass = 0;

最后我們需要引用render pass和圖形管線將要使用的子通道sub pass的索引。

pipelineInfo.basePipelineHandle = VK_NULL_HANDLE; // Optional pipelineInfo.basePipelineIndex = -1; // Optional

實際上還有兩個參數:basePipelineHandlebasePipelineIndex。Vulkan允許您通過已經存在的管線創建新的圖形管線。這種衍生出新管線的想法在于,當要創建的管線與現有管道功能相同時,獲得較低的開銷,同時也可以更快的完成管線切換,當它們來自同一個父管線。可以通過basePipelineHandle指定現有管線的句柄,也可以引用由basePipelineIndex所以創建的另一個管線。目前只有一個管線,所以我們只需要指定一個空句柄和一個無效的索引。只有在VkGraphicsPipelineCreateInfoflags字段中也指定了VK_PIPELINE_CREATE_DERIVATIVE_BIT標志時,才需要使用這些值。

?

現在準備最后一步,創建一個類成員保存VkPipeline對象:

VkPipeline graphicsPipeline;

最后創建圖形管線:

if (vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &graphicsPipeline) != VK_SUCCESS) {throw std::runtime_error("failed to create graphics pipeline!"); }

vkCreateGraphicsPipelines函數在Vulkan中比起一般的創建對象函數需要更多的參數。它可以用來傳遞多個VkGraphicsPipelineCreateInfo對象并創建多個VkPipeline對象。

?

我們傳遞VK_NULL_HANDLE參數作為第二個參數,作為可選VkPipelineCache對象的引用。管線緩存可以用于存儲和復用與通過多次調用vkCreateGraphicsPipelines函數相關的數據,甚至在程序執行的時候緩存到一個文件中。這樣可以加速后續的管線創建邏輯。具體的內容我們會在管線緩存章節介紹。

?

圖形管線對于常見的繪圖操作是必須的,所以它也應該在程序結束時銷毀:

void cleanup() {vkDestroyPipeline(device, graphicsPipeline, nullptr);vkDestroyPipelineLayout(device, pipelineLayout, nullptr);... }

現在運行程序,確認所有工作正常,并創建圖形管線成功!我們已經無比接近在屏幕上繪制出東西來了。在接下來的幾個章節中,我們將從交換鏈圖像中設置實際的幀緩沖區,并準備繪制命令。

?

項目代碼 GitHub?地址。

轉載于:https://www.cnblogs.com/heitao/p/6987319.html

總結

以上是生活随笔為你收集整理的Vulkan Tutorial 14 Integration pipeline的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。