Introduction
我們現(xiàn)在可以將任意屬性傳遞給每個頂點的頂點著色器使用。但是全局變量呢?我們將會從本章開始介紹3D圖形相關(guān)的內(nèi)容,并需要一個模型視圖投影矩陣。我們確實可以將它一頂點的方式包含,但是這非常浪費帶寬、內(nèi)存,并且需要我們在變換的時候更新頂點緩沖區(qū)的數(shù)據(jù)。這種變換通常發(fā)生在每一幀。
在Vulkan中正確處理此問題的途徑是使用資源描述符。描述符是著色器資源訪問諸如緩沖區(qū)和圖像這樣資源的一種方式。我們需要設(shè)置一個包含轉(zhuǎn)換矩陣的緩沖區(qū),并使頂點著色器通過描述符訪問它們。描述符的使用由三部分組成:
在管線創(chuàng)建時指定描述符的布局結(jié)構(gòu)
從描述符對象池中分配描述符集合
在渲染階段綁定描述符集合
描述符布局指定了管線訪問的資源的類型,就像渲染通道指定附件的類型一樣。描述符集合指定將綁定到描述符的實際緩沖區(qū)或映射資源。就像幀緩沖區(qū)為綁定渲染通道的附件而指定實際的圖像視圖一樣。描述符集合就像頂點緩沖區(qū)和幀緩沖區(qū)一樣被綁定到繪制命令。
有許多類型的描述符,但在本章中,我們將使用統(tǒng)一的緩沖區(qū)對象uniform buffer objects(UBO)。我們將會在后面的章節(jié)中討論其他類型的描述符,但基本過程是一樣的。假設(shè)我們有一個數(shù)據(jù),我們希望頂點著色器擁有一個這樣的C結(jié)構(gòu)體:
struct UniformBufferObject { glm::mat4 model; glm::mat4 view; glm::mat4 proj; };
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26
