OpenGL的版本
OS系统默认支持OpenGl ES1.0、ES2.0以及ES3.0 3个版本,三者之间并不是简单的版本升级,设计理念甚至完全不同,在开发OpenGL项目前,需要根据业务需求选择合适的版本。通过EAGLContext指定ES版本号
EAGLContext *mContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; //2.0,还有1.0和3.0
OpenGL坐标系
OpenGL坐标系不同于UIKit坐标系,其实它是这样的
GLKViewController & GLKView
系统对OpenGL进行了简单的封装,继承GLKViewController定义了自己的ViewController,CLKViewController的View为CLKView类
GLKViewController渲染并非NSRunLoopCommonModes,而是NSDefaultLoopMode,因此在UIKit使用CLKViewController,当滑动界面的时候,OpenGL是不会渲染的
EAGLContext
EAGLContext与UIKit中的CGContextRef相识,EAGLContext相当于OpenGL绘制句柄或者上下文,在绘制图之前需要指定使用创建的上下文绘制。
[EAGLContext setCurrentContext:self.mContext];
渲染场景的代码
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
glClearColor(0.3f, 0.6f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//启动着色器
[self.mEffect prepareToDraw];
glDrawElements(GL_TRIANGLES, self.mCount, GL_UNSIGNED_INT, 0);
}
glClear-清除viewport的缓存区
GL_API void GL_APIENTRY glClear (GLbitfield mask);
GL_API void GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);// 清除颜色的设置
GL_API void GL_APIENTRY glClearDepthf (GLclampf depth);
GL_API void GL_APIENTRY glClearStencil (GLint s);
GL_COLOR_BUFFER_BIT: 当前可写的颜色缓冲
GL_DEPTH_BUFFER_BIT: 深度缓冲
GL_ACCUM_BUFFER_BIT: 累积缓冲
GL_STENCIL_BUFFER_BIT: 模板缓冲