概述
EAGLContext對(duì)象是管理OpenGL ES渲染上下文,若想使用OpenGL ES 進(jìn)行繪制工作,則必須一個(gè)上下文對(duì)象.
API
初始化
- (nullable instancetype) initWithAPI:(EAGLRenderingAPI) api;
- (nullable instancetype) initWithAPI:(EAGLRenderingAPI) api sharegroup:(EAGLSharegroup*) sharegroup NS_DESIGNATED_INITIALIZER;
參數(shù):
api 表示將要使用的OpenGL ES 版本.
kEAGLRenderingAPIOpenGLES3表示使用3.0sharegroup 對(duì)象管理與一個(gè)或多個(gè)EAGLContext對(duì)象關(guān)聯(lián)的OpenGL ES資源,若不指定或值為NULL則創(chuàng)建新的對(duì)象,當(dāng)資源需要被共享時(shí)再使用它.
綁定上下文
+ (BOOL)setCurrentContext:(nullable EAGLContext*) context;
綁定一個(gè)全局的上下文對(duì)象. 注意: 1, 需要手動(dòng)對(duì)該對(duì)象強(qiáng)引用,否則將會(huì)被釋放. 2, 該對(duì)象線程不安全, 使用時(shí)應(yīng)防止同時(shí)從多個(gè)線程訪問(wèn)同一個(gè)上下文對(duì)象
分配渲染緩沖區(qū)
- (BOOL)renderbufferStorage:(NSUInteger)target fromDrawable:(nullable id<EAGLDrawable>)drawable;
通過(guò)調(diào)用此方法為緩沖區(qū)分配共享的存儲(chǔ)空間, 此方法是替代 原glRenderbufferStorage方法的.
參數(shù):
target :當(dāng)前綁定的渲染緩沖區(qū)的OpenGL ES綁定點(diǎn)。 此參數(shù)的值必須是GL_RENDERBUFFER(或OpenGL ES 1.1上下文中的GL_RENDERBUFFER_OES)
drawable :管理渲染緩沖區(qū)的數(shù)據(jù)存儲(chǔ)的對(duì)象。 在iOS中,此參數(shù)的值必須是CAEAGLLayer對(duì)象
顯示緩沖區(qū)內(nèi)容
- (BOOL)presentRenderbuffer:(NSUInteger)target;
將渲染緩沖區(qū)的內(nèi)容展示在屏幕上.
參數(shù):
target : 當(dāng)前綁定的渲染緩沖區(qū)的OpenGL ES綁定點(diǎn)。 此參數(shù)的值必須是GL_RENDERBUFFER(或OpenGL ES 1.1上下文中的GL_RENDERBUFFER_OES)。
在典型的顯示系統(tǒng)中,物理屏幕以固定的速率從幀緩沖區(qū)內(nèi)存中更新,若我們直接繪制帶幀緩沖區(qū),那么用戶在部分更新幀緩沖區(qū)時(shí)會(huì)看到偽像. 在OpenGL中采用雙緩沖區(qū), 分為 前緩沖區(qū) 和 后緩沖區(qū).
所有的渲染都發(fā)生在后臺(tái)緩沖區(qū),它位于不可見(jiàn)于屏幕的內(nèi)存區(qū)域,當(dāng)所有渲染完成時(shí),這個(gè)渲染將被 交換 到前臺(tái)緩沖區(qū)用于顯示, 然后原 前臺(tái)緩沖區(qū)就下一幀的后臺(tái)緩沖區(qū)