当我们用CAEAGLLayer 的时候。我们一般分下面步骤进行。
第一步。 配置layer
-(void)configure{
CAEAGLLayer *eagLayer = (CAEAGLLayer *)self.layer;
eagLayer.opaque = YES; // 提高渲染质量 但会消耗内存
eagLayer.drawableProperties = @{kEAGLDrawablePropertyRetainedBacking : @(false),kEAGLColorFormatRGBA8:@(true)};
//self.baseEffect = [[GLKBaseEffect alloc]init];
}
2.配置context 上下文
-(void)createEAGContext{
self.eagContext = [[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES2];
[EAGLContext setCurrentContext:self.eagContext];
}
3.创建一个帧缓冲区
-(void)createFramebuffer{
glGenFramebuffers(1, &_framebuffer); // 为帧缓存申请一个内存标示,唯一的 1.代表一个帧缓存
glBindFramebuffer(GL_FRAMEBUFFER, _framebuffer);// 把这个内存标示绑定到帧缓存上
}
4.渲染颜色buffer
- (void)createColorRenderbuffer{
glGenRenderbuffers(1, &_colorRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, _colorRenderbuffer);
[self.eagContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer];
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,GL_RENDERBUFFER, _colorRenderbuffer);
}
5 规定绘制屏幕大小
- (void)clear{
CGFloat scale = [[UIScreen mainScreen] scale]; //获取视图放大倍数,可以把scale设置为1试试
scale=0.5;
glViewport(self.frame.origin.x * scale, self.frame.origin.y * scale, self.frame.size.width * scale, self.frame.size.height * scale); //设置视口大小
glClearColor(1, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);
}
这里注意函数 glViewport(self.frame.origin.x * scale, self.frame.origin.y * scale, self.frame.size.width * scale, self.frame.size.height * scale); //设置视口大小
不设置这个函数,会导致屏幕啥也没有。
6 渲染顶点
7展示数据
-(void)showRenderbuffer{
[self.eagContext presentRenderbuffer:GL_RENDERBUFFER];
}