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; };
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26