iOS 圖形編程總結

來源:互聯網
上載者:User

標籤:des   http   io   ar   color   os   使用   sp   for   

本文轉載至 http://www.cocoachina.com/ios/20141104/10124.html

MetaliOS開發Sprite Kit圖形編程

 
 

iOS實現圖形編程可以使用三種API(UIKIT、Core Graphics、OpenGL ES及GLKit)。

這些api包含的繪製操作都在一個圖形環境中進行繪製。一個圖形環境包含繪製參數和所有的繪製需要的裝置特定資訊,包括螢幕圖形環境、offscreen 位元影像環境和PDF圖形環境,用來在螢幕表面、一個位元影像或一個pdf檔案中進行圖形和映像繪製。在螢幕圖形環境中進行的繪製限定於在一個UIView類或其子類的執行個體中繪製,並直接在螢幕顯示,在offscreen位元影像或PDF圖形環境中進行的繪製不直接在螢幕上顯示。

一、UIKIT API

UIKIT是一組Objective-C API,為線條圖形、Quartz映像和顏色操作提供Objective-C 封裝,並提供2D繪製、影像處理及使用者介面層級的動畫。

UIKIT包括UIBezierPath(繪製線、角度、橢圓及其它圖形)、UIImage(顯示映像)、UIColor(顏色操作)、UIFont和UIScreen(提供字型和螢幕資訊)等類以及在位元影像圖形環境、PDF圖形環境上進行繪製和 操作的功能等, 也提供對標準視圖的支援,也提供對列印功能的支援。

在UIKIT中UIView類本身在繪製時自動建立一個圖形環境(對應Core Graphics層的CGContext類型)作為當前的圖形繪製環境。在繪製時可以調用UIGraphicsGetCurrentContext 函數獲得當前的圖形環境。

二、Core Graphics 與Quartz 2D API

Core Graphics是一套C-based API, 支援向量圖形,線、形狀、圖案、路徑、剃度、位元影像映像和pdf 內容的繪製。

Quartz 2D 是Core Graphics中的2D 繪製呈現引擎。Quartz是資源和裝置無關的,提供路徑繪製,anti-aliased呈現,剃度填充圖案,映像,透明繪製和透明層、遮蔽和陰影、顏色管理,座標轉換,字型、offscreen呈現、pdf文檔建立、顯示和分析等功能。

Quartz 2D能夠與所有的圖形和動畫技術(如Core Animation, OpenGL ES, 和 UIKit 等)一起使用。

Quartz採用paint模式進行繪製。

Quartz 中使用的圖形環境也由一個類CGContext表示。

在Quartz 中可以把一個圖形環境作為一個繪製目標。當使用Quartz 進行繪製時,所有裝置特定的特性被包含在你使用的特定類型的圖形環境中,因此通過給相同的映像操作函數提供不同的映像環境你就能夠畫相同的映像到不同的裝置上,因此做到了映像繪製的裝置無關性。

Quartz 為應用提供如下幾個圖形環境:

1)位元影像圖形環境,用來建立一個位元影像。

使用函數CGBitmapContextCreate來建立。

2)PDF圖形環境,用來建立一個pdf檔案。

Quartz 2D API提供了兩個函數來建立一個PDF圖形環境:

CGPDFContextCreateWithURL,帶有一個作為pdf 輸出的位置的Core Foundation URL來建立一個pdf 圖形環境。

CGPDFContextCreate, 當想PDF 輸出到一個data consumer時使用該函數。

3) 視窗圖形環境,用來在一個視窗上進行繪製。

4) 層環境(CGLayer) ,是一個與另一個圖形環境關聯的offscreen繪製目標,使用層環境的目的是為了最佳化繪製層到建立它的圖形環境的效能。層環境能夠比位元影像圖形環境提供更好的offscreen繪製效能。

Quartz提供的主要類包括:

CGContext:表示一個圖形環境;

CGPath:使用向量圖形來建立路徑,並能夠填充和stroke;

CGImage:用來表示位元影像;

CGLayer:用來表示一個能夠用於重複繪製和offscreen繪製的繪製層;

CGPattern:用來表示Pattern,用於重複繪製;

CGShading和 CGGradient:用於繪製剃度;

CGColor 和 CGColorSpace;用來進行顏色和色彩空間管理;

CGFont, 用於繪製文本;

CGPDFContentStream、CGPDFScanner、CGPDFPage、CGPDFObject,CGPDFStream, CGPDFString等用來進行pdf檔案的建立、解析和顯示。

三、OpenGL ES和GLKit

OpenGL ES是一套多功能開放標準的用於嵌入系統的C-based的圖形庫,用於2D和3D資料的可視化。OpenGL被設計用來轉換一組圖形調用功能到底層圖形硬體(GPU),由GPU執行圖形命令,用來實現複雜的圖形操作和運算,從而能夠高效能、高幀率利用GPU提供的2D和3D繪製能力。

OpenGL ES規範本身不定義繪製表面和繪製視窗,因此ios為了使用它必須提供和建立一個OpenGLES 的呈現環境,建立和配置儲存繪製命令結果的framebuffer 及建立和配置一個或多個呈現目標。

在 iOS中使用EAGL提供的EAGLContext類 來實現和提供一個呈現環境,用來保持OpenGLES使用到的硬體狀態。  EAGL是一個Objective-C API,提供使OpenGL ES與Core Animation和UIKIT整合的介面。

在調用任何OpenGLES 功能之前必須首先初始化一個EAGLContext 對象。

每一個iOS應用的每一個線程都有一個當前context,在調用OpenGLES函數時,使用或改變此context中的狀態。

EAGLContext 的類方法setCurrentContext:用來設定當前線程的當前context。EAGLContext 的類方法currentContext 返回當前線程的當前context。在切換相同線程的兩個上下文之前,必須調用glFlush函數來確保先前已提交的命令被提交到圖形硬體中。

可以採用不同的方式使用OpenGL ES以便呈現OpenGL ES內容到不同的目標:GLKit和CAEAGLLayer。

為了建立全螢幕的視圖或使OpenGL ES內容與UIKit視圖整合,可以使用GLKit。在使用GLKit時,GLKit提供的類GLKView類本身實現呈現目標及建立和維護一個framebuffer。

為了使OpenGL ES內容作為一個Core Animation層的部分內容時,可以使用CAEAGLLayer 作為呈現目標,並需要另外建立framebuffer以及自己實現和控制整個繪製流程。

GLKit是一組Objective-C 類,為使用OpenGL ES 提供一個物件導向介面,用來簡化OpenGL ES應用的開發。GLKit支援四個3D應用開發的關鍵領域:

1) GLKView 和GLKViewController類提供一個標準的OpenGLES視圖和相關聯的呈現迴圈。GLKView可以作為OpenGLES內容的呈現目標,GLKViewController提供內容呈現的控制和動畫。視圖管理和維護一個framebuffer,應用只需在framebuffer進行繪畫即可。

2)GLKTextureLoader 為應用提供從iOS支援的各種映像格式的源自動載入紋理映像到OpenGLES 映像環境的方式,並能夠進行適當的轉換,並支援同步和非同步載入方式。

3)數學運算庫,提供向量、矩陣、四元數的實現和矩陣堆棧操作等OpenGL ES 1.1功能。

4)Effect效果類提供標準的公用著色效果的實現。能夠配置效果和相關的頂點資料,然後建立和載入適當的著色器。GLKit 包括三個可配置著色效果類:GLKBaseEffect實現OpenGL ES 1.1規範中的關鍵的燈光和材料模式, GLKSkyboxEffect提供一個skybox效果的實現, GLKReflectionMapEffect 在GLKBaseEffect基礎上包括反射映射支援。

使用GLKView和OpenGLES進行繪製過程:

1)建立一個GLKView 對象

GLKView 對象可以編程或使用Interface Builder來建立和配置。

在採用編程方式時,首先建立一個context然後調用initWithFrame:context:方法。

使用Interface Builder方式時,在從storyboard載入一個GLKView後,建立一個context和設定它作為視圖的context屬性.

在iOS中GLKit的使用需要建立OpenGL ES 2.0以上的圖形環境context。

GLKit視圖自動建立和配置它所有的OpenGLES framebuffer對象和renderbuffers,可以通過修改視圖的drawable屬性來控制這些對象的屬性。

2)繪製OpenGL內容(發布繪製命令)

使用GLKit視圖繪製OpenGL內容需要三個子步驟:準備OpenGLES基礎;發布繪製命令;呈現顯示內容到Core Animation。       GLKit類本身已經實現了第一個和第三個步驟,使用者只需實現第二個步驟,在視圖的方法drawRect或視圖的代理對象的glkView:drawInRect:中調用適當的OpenGLES繪製命令進行內容繪製。

GLKViewController類維護一個animation 呈現迴圈(包含兩個方法update和display),用來實現連續的動畫複雜的情境。

animation 呈現迴圈的交替速率由GLKViewController的屬性framesPerSecond 指示,並使用preferredFramesPerSecond 屬性來修改它。

四、其它圖形編程相關API

1)Core Animation

Core Animation是一套Objective-C API,實現了一個高效能的複合引擎,並提供一個簡單易用的編程介面,給使用者UI添加平滑運動和動態反饋能力。

Core Animation 是 UIKit實現動畫和變換的基礎,也負責視圖的複合功能。使用Core Animation可以實現定製動畫和細粒度的動畫控制,建立複雜的、支援動畫和變換的layered 2D視圖。

Core Animation不屬於繪製系統,但它是以硬體複合和操作顯示內容的基礎設施。這個基礎設施的核心是layer對象,用來管理和操作顯示內容。在ios 中每一個視圖都對應Core Animation的一個層對象,與視圖一樣,層之間也組織為層關係樹。一個層捕獲視圖內容為一個被映像硬體容易操作的位元影像。在多數應用中層作為管理檢視的方式使用,但也可以建立獨立的層到一個層關係樹中來顯示視圖不夠支援的顯示內容。

OpenGL ES的內容也可以與Core Animation內容進行整合。

為了使用Core Animation實現動畫,可以修改層的屬性值來觸發一個action對象的執行,不同的action對象實現不同的動畫。

Core Animation 提供了一下一組應用可以採用的類來提供對不同動畫類型的支援:

CAAnimation是一個抽象公用基類,CAAnimation採用CAMediaTiming 和CAAction協議為動畫提供時間(如周期、速度、重複次數等)和action行為(啟動、停止等)。

CAPropertyAnimation是 CAAnimation的抽象子類,為動畫提供一個由一個key路徑規定的層屬性的支援;

CABasicAnimation 是CAPropertyAnimation的具體子類,為一個層屬性提供簡單插入能力。

CAKeyframeAnimation也是CAPropertyAnimation的具體子類,提供key幀動畫支援。

CATransition是CAAnimation的具體子類,提供影響整個層內容的事物效果。

CAAnimationGroup也是CAAnimation的子類,允許動畫對象組合到一起並同時運行。

2)Image I/O

Image I/O 提供讀寫多數格式影像檔的資料的介面。主要包括映像源CGImageSourceRef和映像目標CGImageDestinationRef兩個類。

3)Sprite Kit

Sprite Kit建立於OpenGL ES之上,Sprite Kit使用圖形硬體來有效呈現動畫幀,因此可以高幀率地動畫和呈現任意的2D紋理映像或遊戲sprite,呈現的內容包括sprites、文本、CGPath形狀、視頻等。

在Sprite Kit中動畫和呈現由一個SKView視圖對象執行。遊戲的內容組織為以SKScene對象表現的一個個情境。一個情境包含要呈現的sprites和其它內容,一個情境也實現每個幀關聯的邏輯和內容處理。

在同一時刻,一個SKView視圖只呈現一個情境,在情境呈現時,情境關聯的動畫和幀關聯的邏輯被自動執行。在切換情境時使用SKTransition 類來執行兩個情境間的動畫。

4)SceneKit

SceneKit是一個使用3D圖形技術實現的Objective-C 架構,包含一個高效能的呈現引擎和一個進階的描述性API。可以利用該架構建立簡單的遊戲和介面豐富的使用者UI,使用SceneKit僅需要使用描述性API描述你的情境的內容(如幾何形狀、材料、燈光和攝像等)和你想在那些內容上要執行的行動或動畫即可。

SceneKit的內容組織為由節點群組成的樹形結構,稱為scene graph。一個情境包含一個根節點,定義情境的座標空間,其它節點定義情境的可視內容。SceneKit在GPU上呈現每一幀之前在一個視圖上顯示情境、處理scene graph和執行動畫處理。

SceneKit包含的主要類:

SCNView & SCNSceneRenderer:SCNView是顯示或呈現SceneKit內容的視圖。SCNSceneRenderer是一個協議,定義用於視圖的一些重要方法。

SCNScene: 表現一個情境,是所有SceneKit內容的一個容器。情境可以從使用3D著作工具建立的一個檔案中載入,也可以編程建立,情境需要在一個視圖上顯示。

SCNNode:一個情境的基本構造塊,表示scene graph樹的一個節點。scene graph樹定義了情境上節點之間的邏輯結構,通過為一個節點附屬geometries、lights、cameras來提供情境的可視內容。

SCNGeometry、SCNLight、SCNCamera:分別是geometries、lights、cameras對應的類。SCNGeometry為情境提供形狀、文本或定製頂點資料,SCNLight為情境提供陰影製作效果,SCNCamera為情境提供可視點。

SCNMaterial:為SCNGeometry對象定義表面外觀屬性,規定對象表面如何著色或紋理以及如何反應燈光。

SceneKit內容的動畫:

SceneKit動畫基於Core Animation 架構,可以隱式或顯式建立。

隱式建立是實際是通過動畫節點的一些動畫屬性來實現:SceneKit自動在run loop一次運行期間對一個情境包含節點屬性的所有改變組合成一個原子操作,稱為一個事務,由SCNTransaction 類表示;當設定SCNTransaction類的動畫周期不為0時,所有對節點動畫屬性的改變自動執行動畫。

如下程式碼片段所示:

12345 func fallAndFade(sender:  a href="" AnyObject /a ) {    SCNTransaction.setAnimationDuration(1.0)    textNode.position = SCNVector3(x: 0.0, y: -10.0, z: 0.0)    textNode.opacity = 0.0}

顯式建立動畫時,可以選擇CAAnimation一種類型的子類來建立特定類型的動畫。使用key-value為動畫規定屬性及設定動畫參數,然後把建立的動畫附屬到情境的一個或多個元素。可以使用不同的Core Animation動畫類組合或序列化幾個動畫或建立動畫在幾個 keyframe值之間插入屬性值。

如下程式碼片段為顯式建立動畫的例子:

1234567 let animation = CABasicAnimation(keyPath: "geometry.extrusionDepth")        animation.fromValue = 0.0        animation.toValue = 100.0        animation.duration = 1.0        animation.autoreverses = true        animation.repeatCount = Float.infinity        textNode.addAnimation(animation, forKey: “extrude")

SceneKit也支援使用SCNSceneSource 類從一個情境檔案中載入CAAnimation動畫對象,然後附屬它到SCNNode對象。

5)Metal

Metal架構是一個OpenGL ES類似的底層API,為GPU加速的先進的3D圖形呈現或資料並行計算任務提供支援。Metal負責和3D繪圖硬體互動,為圖形和計算命令的組織、處理、提交和相關資源和資料的管理提供一個細粒度的、底層的支援流式計算的現代API。Metal的目標是在執行GPU任務時盡量減少CPU的負載,消除在GPU執行圖形和資料並行計算操作時的效能瓶頸,能夠有效使用多線程並行建立和提交命令到GPU。

Metal也提供了一個映射程式設計語言用來編寫能夠被Metal應用使用的圖形映射或計算函數。Metal映射語言編寫的代碼能夠在編譯時間與應用代碼一起被編譯,然後在運行時被載入到GPU上執行;也支援運行時對Metal 映射語言代碼進行編輯。

在Metal架構中包括如下幾個重要的類或協議:

1、MTLDevice協議和對象

一個MTLDevice代表一個執行命令的GPU裝置,MTLDevice協議為其定義了相關介面,包括查詢裝置能力屬性和建立其它裝置特定的對象等介面,例如建立命令隊列、從記憶體中分配緩衝區以及建立紋理等。

應用通過調用MTLCreateSystemDefaultDevice 函數來擷取一個系統能夠使用的MTLDevice對象。

2、命令和命令編碼器

在Metal架構中,3D圖形呈現命令、計算命令和blitting命令在提交到特定裝置GPU上執行前必須進行相應的格式編碼,以便能夠被GPU識別和執行。

Metal架構為每種命令提供了一種編碼器協議:

MTLRenderCommandEncoder 協議:提供介面用來編碼一個單次迴圈呈現期間要執行的3D圖形呈現命令。MTLRenderCommandEncoder 對象用來代表一次圖形呈現流程的呈現狀態和繪製命令。

MTLComputeCommandEncoder協議:提供介面用來編碼資料並行計算任務。

MTLBlitCommandEncoder協議:提供介面用來編碼在緩衝和紋理之間的簡單拷貝操作。

在同一時刻,僅能有一個命令編碼器啟用來添加命令到一個命令緩衝空間上,即每一個命令編碼器必須在另一個使用相同命令緩衝空間的命令編碼器建立前結束。

Metal為了支援多個不同任務的並存執行,提供了一個MTLParallelRenderCommandEncoder協議來支援多個MTLBlitCommandEncoder在不同線程同時運行提交不同的命令緩衝到同一個命令緩衝空間。每一個線程有一個它自己的命令緩衝對象,在同一時刻,該緩衝對象只能被該線程的一個命令編碼器存取。

MTLParallelRenderCommandEncoder對象允許一次呈現迴圈的命令編碼分解到多個命令編碼器進行編碼,使用多線程進行平行處理來提高處理效率。

一個命令編碼器對象調用endEncoding方法來結束。

命令編碼器對象的建立:

命令編碼器對象由MTLCommandBuffer對象負責建立。MTLCommandBuffer協議定義了如下方法用來建立相應類型的命令編碼器對象:

renderCommandEncoderWithDescriptor:為執行圖形呈現任務建立一個MTLRenderCommandEncoder 對象。方法的參數MTLRenderPassDescriptor表現一個編碼呈現命令的目標(是一個附屬點的集合,最多可以包括四個顏色點資料附屬點、一個深度點資料附屬點、一個圖案點資料附屬點),在MTLRenderPassDescriptor對象的附屬點屬性中指定要呈現的圖形目標。

computeCommandEncoder方法為資料並行計算任務建立一個MTLComputeCommandEncoder 對象。

blitCommandEncoder 方法為記憶體Blit操作和紋理填充操及mipmaps的產生等操作建立一個MTLBlitCommandEncoder 對象。

parallelRenderCommandEncoderWithDescriptor: 方法建立一個MTLParallelRenderCommandEncoder對象。呈現目標由 參數MTLRenderPassDescriptor規定。

3、命令緩衝MTLCommandBuffer對象及協議

在經過命令編碼器編碼後的命令被命令編碼器添加到一個稱為命令緩衝的MTLCommandBuffer對象上,然後該CommandBuffer對象被提交到GPU來執行其中包含的命令。

MTLCommandBuffer協議為CommandBuffer對象定義介面以及提供命令編碼器的建立、提交CommandBuffer到一個命令隊列以及檢查狀態等操作方法。

一個CommandBuffer對象包含打算在特定裝置(GPU)上執行的被編碼的命令。一旦所有的編碼完成,CommandBuffer本身必須提交到一個命令隊列,並標記命令緩衝為準備好狀態,以便能夠被GPU 執行。

在標準標準應用程式中,通常一個呈現幀的呈現命令使用一個線程被編碼進一個命令緩衝中。

MTLCommandBuffer對象的建立和相應方法:

一個MTLCommandBuffer對象由MTLCommandQueue的commandBuffer方法或commandBufferWithUnretainedReferences方法建立。

一個MTLCommandBuffer對象僅能提交到建立它的MTLCommandQueue 對象中。

一個MTLCommandBuffer對象還實現協議定義的如下方法:

enqueue方法用來在命令隊列中為該命令緩衝保留一個位置。

commit 方法使MTLCommandBuffer對象被提交執行。

addScheduledHandler:方法用來為一個命令緩衝對象登記一個在該命令緩衝被調度時被調用的代碼執行塊。可以為一個命令緩衝對象登記多個調度執行塊。

waitUntilScheduled 方法等待命令緩衝被調度及在為該命令緩衝登記的所有調度執行塊已經執行完。

addCompletedHandler:方法為一個命令緩衝對象登記一個在裝置已經執行完該命令緩衝後被調用的代碼執行塊。也可以為一個命令緩衝對象登記多個完成執行代碼塊。

waitUntilCompleted 方法等待命令緩衝中命令被裝置執行完和為該命令緩衝登記的所有完成執行塊都執行結束。

presentDrawable:方法用來在命令緩衝對象被調度時呈現一個可顯示資源(CAMetalDrawable 對象)的內容。

4、MTLCommandQueue協議和命令隊列對象

MTLCommandQueue協議為包含命令緩衝的一個隊列。命令隊列用來組織其中包含的命令緩衝對象的執行次序和控制命令隊列中的命令緩衝對象包含的命令什麼時候被執行。

MTLCommandQueue協議為命令隊列定義了介面,主要的介面包括命令緩衝對象的建立。

MTLCommandQueue對象的建立:

使用MTLDevice對象的newCommandQueue方法或newCommandQueueWithMaxCommandBufferCount:方法來建立一個命令隊列對象。

為以上這些對象之間的關係圖:

中所示:必須為一個呈現命令編碼器設定呈現相關的狀態、設定和建立相關的呈現用到的緩衝區、紋理等Metal資來源物件。

為呈現命令編碼器指定的狀態包括一個呈現管道流水線狀態(Render Pipeline State),一個深度和圖案狀態(Depth Stencil State),一個採樣狀態(Sampler State)。

一個Blit命令編碼器與一個緩衝區和一個紋理關聯,用來在兩者之間進行Blit操作。

命令編碼器指定圖形或計算功能時可以分配三種類型的MTLResource Metal資來源物件使用:

MTLBuffer 表現一個能夠包含任意類型資料的無格式記憶體。MTLBuffer通常用於多邊形頂點vertex、著色器shader及計算狀態資料。

MTLTexture表現一個有著特定紋理類型和點格式的具有相應格式的映像資料。紋理對象可以作為多邊形頂點vertex、片段fragment或計算功能的一個源,也可以在呈現描述符中作為圖形轉譯輸出目標。

MTLSamplerState對象當一個圖形或計算功能在一個MTLTexture上執行紋理採樣操作時使用,用來定義地址、過濾和其它屬性。

圖形呈現編碼器MTLRenderCommandEncoder 可以使用setVertex*及setFragment* 方法組作為其參數來為相應的映射函數分配一個或多個資源。

5、CAMetalLayer 對象和CAMetalDrawable 協議

Core Animation定義了一個CAMetalLayer類和一個CAMetalDrawable 協議用來提供一個Metal內容呈現的層後備視圖。CAMetalLayer對象包含有關要呈現內容的位置、尺寸、可視屬性(背景顏色、邊界和陰影)及Metal呈現內容使用到的資源等。CAMetalDrawable 協議是MTLDrawable 的擴充,指定了可顯示資來源物件要符合的MTLTexture協議,使可顯示資來源物件可用作呈現命令的目標。

為了實現Metal內容在一個CAMetalLayer對象的呈現,應為每次呈現流程建立一個CAMetalDrawable對象,從中得到它包含的MTLTexture 對象,然後在呈現流水線描述MTLRenderPipelineDescriptor 的顏色附屬點屬性中使用,指定其為圖形呈現命令的目標。

一個CAMetalLayer對象調用CAMetalLayer 對象的nextDrawable 方法來建立。

在建立一個可顯示資源作為圖形命令的目標後,就可以調用如下步驟完成圖形的繪製。

1)、首先建立一個MTLCommandQueue 對象,然後使用它建立一個MTLCommandBuffer對象;

2)、建立一個MTLRenderPassDescriptor對象,為其規定用作圖形緩衝中的編碼呈現命令目標的附屬點集合;然後使用這個MTLRenderPassDescriptor 對象建立一個MTLRenderCommandEncoder對象;

3) 建立相應的Metal資來源物件,來儲存繪製用到資源資料,如頂點座標和頂點顏色資料;並調用MTLRenderCommandEncoder的setVertex*:offset:atIndex: 和setFragment* :offset:atIndex:方法來為呈現編碼器指定用到的資源;

4) 建立一個MTLRenderPipelineDescriptor 對象並為其指定vertexFunction和fragmentFunction 屬性,這些屬性使用Metal映射語言代碼中讀取的相應映射函數MTLFunction對象來設定。

5)使用MTLDevice的newRenderPipelineStateWithDescriptor:error:方法或類似方法並根據MTLRenderPipelineDescriptor建立一個MTLRenderPipelineState對象;然後調用MTLRenderCommandEncoder 的setRenderPipelineState: 方法來為呈現編碼器對象MTLRenderCommandEncoder設定管道流水線;

6)調用MTLRenderCommandEncoder 的drawPrimitives:vertexStart:vertexCount: 方法來執行圖形的呈現,然後調用MTLRenderCommandEncoder的endEncoding 方法來結束本次呈現流程的編碼,最後調用MTLCommandBuffer 的commit方法來在GPU上執行整個繪製命令。

iOS 圖形編程總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.