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