Introduction

我們現(xiàn)在可以將任意屬性傳遞給每個(gè)頂點(diǎn)的頂點(diǎn)著色器使用。但是全局變量呢?我們將會(huì)從本章開(kāi)始介紹3D圖形相關(guān)的內(nèi)容,并需要一個(gè)模型視圖投影矩陣。我們確實(shí)可以將它一頂點(diǎn)的方式包含,但是這非常浪費(fèi)帶寬、內(nèi)存,并且需要我們?cè)谧儞Q的時(shí)候更新頂點(diǎn)緩沖區(qū)的數(shù)據(jù)。這種變換通常發(fā)生在每一幀。

 

在Vulkan中正確處理此問(wèn)題的途徑是使用資源描述符。描述符是著色器資源訪問(wèn)諸如緩沖區(qū)和圖像這樣資源的一種方式。我們需要設(shè)置一個(gè)包含轉(zhuǎn)換矩陣的緩沖區(qū),并使頂點(diǎn)著色器通過(guò)描述符訪問(wèn)它們。描述符的使用由三部分組成:

  • 在管線創(chuàng)建時(shí)指定描述符的布局結(jié)構(gòu)

  • 從描述符對(duì)象池中分配描述符集合

  • 在渲染階段綁定描述符集合

描述符布局指定了管線訪問(wèn)的資源的類型,就像渲染通道指定附件的類型一樣。描述符集合指定將綁定到描述符的實(shí)際緩沖區(qū)或映射資源。就像幀緩沖區(qū)為綁定渲染通道的附件而指定實(shí)際的圖像視圖一樣。描述符集合就像頂點(diǎn)緩沖區(qū)和幀緩沖區(qū)一樣被綁定到繪制命令。

 

有許多類型的描述符,但在本章中,我們將使用統(tǒng)一的緩沖區(qū)對(duì)象uniform buffer objects(UBO)。我們將會(huì)在后面的章節(jié)中討論其他類型的描述符,但基本過(guò)程是一樣的。假設(shè)我們有一個(gè)數(shù)據(jù),我們希望頂點(diǎn)著色器擁有一個(gè)這樣的C結(jié)構(gòu)體:

struct UniformBufferObject {
    glm::mat4 model;
    glm::mat4 view;
    glm::mat4 proj;
};

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式