[MetalKit]5-Using-MetalKit-part-4使用MetalKit4

本系列文章是對 metalkit.org 上面MetalKit內容的全面翻譯和學習.git

MetalKit系統文章目錄程序員


上一次咱們學習了Metal Shading Language Metal着色語言基礎.在咱們學習更多高深的課題前,我想如今是時候從新回顧一下咱們學到的東西,尤爲是關於圖形管線的,我也認可這一點我講得太快了(感謝匿名讀者的建議和反饋!)github

讓咱們更仔細地瞭解一下graphics pipeline圖形管線,從一小段歷史開始.大約十年前,當fixed pipeline固定管線仍然存在時,shaders被引入進來做爲一種程序員影響固定管線的工具.在當時,浮點也被引入GPUs中並出現了GPGPU(能用計算圖形處理單元).因而,新的programmable pipeline可編程管線就被改變了: 編程

part4_1.png

就像看到的那樣,新的管線目前擁有兩個shader着色器,咱們能夠在其中編寫自定義代碼而後在GPU上運行.圖形程序的第一部分老是運行在CPU上,被稱爲host code主機代碼.這就是絕大部分資源分配發生的地方,也是和GPU之間傳輸數據的地方.程序最重要的地方,倒是運行在GPU上.兩個shaders包含在一個後綴爲 .metal 的單獨文件中(在其餘GPGPU框架好比OpenCL中它被命名爲kernel code內核代碼).swift

管線開始於CPU站點處,這裏的輸入以vertices形式被送入到GPU中.它們通過了變換和逐頂點光照計算.此時vertex shader頂點着色器可以在rasterization光柵化以前,對頂點進行操做改變.在這以後,頂點通過clipping裁剪rasterization光柵化並獲得fragments片斷.接着fragment shader片斷着色器會被運行處理每一個片斷,以後每一個像素值被輸出到framebuffer幀緩衝器以供顯示.框架

如今讓咱們看看Metal本身的管線.咱們將回到 第2部分的代碼中part 2 source code 而且將用行號來標明咱們的說起的概念.建立Metal應用共需兩個階段.第一個是初始化階段:函數

part4_2.png

第一步是拿到device設備(MetalView.swift中的19行).設備是和GPU驅動及硬件的直接鏈接;也是咱們在Metal中建立其餘全部對象的源頭.第二個初始化步驟是建立一個command queue命令隊列(40行),它是咱們提交工做到GPU的通道.第三個初始化步驟是建立緩衝器,紋理和其它資源(20-27行).newBufferWithBytes函數將會分配一塊新的共享內存,複製提供的指針到裏面,而後返回一個該緩衝器的句柄.第四個初始化步驟是建立render pipeline渲染管線(28-37行),它是一個鏈式步驟,一端獲取數據,另外一端產生一個柵格化的圖像.管線由兩個元素組成:descriptor它持有shader信息和像素格式,state則是從descriptor中建立幷包含了編譯過了shaders.第五個初始化步驟是建立一個view.對咱們來講,建立一個繼承於MTKView(11行)的對象,要比建立一個新的CAMetalLayer並將其添加爲子視圖更爲簡單.工具

接下來,讓咱們看看建立Metal應用的第二個階段,Drawing繪製階段:post

part4_3.png

第一步是拿到command buffer命令緩衝器(40行).全部進入GPU的工做都會被排列到該緩衝器裏面.咱們須要前一階段的command queue命令隊列來建立command buffer命令緩衝器.第二步是創建一個rend pass渲染通道(38-39行).一個渲染通道描述符會告訴Metal當渲染一張圖片時要採起什麼處理.配置它時,咱們須要指定咱們要渲染什麼顏色紋理(currentDrawable紋理).咱們還須要指定繪製幾何體前的清屏顏色.第三步是真實的drawing繪製(43-44行).咱們指定頂點存儲的緩衝器和須要繪製的基本實體.第四步也就是最後一步是commit the command buffer提交命令緩衝器(46-47行)到GPU.當調用commit提交時,command buffer命令緩衝器被編碼,送入命令隊列的末尾,一旦時間到了就在GPU上執行.學習

我但願這一部分的教程能有助於理解通用性的概念好比graphics pipeline圖形管線Metal pipeline Metal管線.下一章節,我已經火燒眉毛想要回到編碼中去了.

下次見!

相關文章
相關標籤/搜索