IOS OpenGLES2.0 入门01 清空屏幕

在IOS中要使用OpenGLES2.0主要有以下几种方法
1.GLKViewController和GLKView
2.CAEAGLLayer+EAGLContext

我们主要介绍第2种办法CAEAGLLayer+EAGLContext

关于OpenGL的 RenderBuffer 和 FrameBuffer
简单的说, RenderBuffer就是我们看到的显示在屏幕上的那些数据
但是这些数据是哪来的呢, RenderBuffer = FrameBuffer + 光照 + …

正常我们一个OpenGL程序需要一个或多个RenderBuffer, 一个或多个FrameBuffer, 在加上其他的数据
这里我们采用一个RenderBuffer和一个FrameBuffer

RenderBuffer的生成使用glGenRenderBuffer, 生成完后要绑定到GL_RENDERBUFFER这个位置上, 使用glBindRenderBuffer
同理FrameBuffer采用 glGenFrameBuffer和glBindFrameBuffer

前面说了RenderBuffer = FrameBuffer + 光照 + …, 我们需要一个函数把它们关联起来,glFramebufferRenderbuffer

关联GL_RENDERBUFFER为GL_COLOR_ATTACHMENT0
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _renderBuffer);

IOS 使用OpenGL 还需要用到CAEAGLLayer和EAGLContext

+ (Class) layerClass {
   return [CAEAGLLayer class];
}
_eaglLayer = (CAEAGLLayer *) self.layer;
_eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
[EAGLContext setCurrentContext:_eaglContext];

关联EAGLContext与CAEAGLLayer

[_eaglContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:_eaglLayer];

我们需要EAGLContext来渲染我们的RenderBuffer到_eaglLayer上, 从而显示到我们屏幕上

[self.eaglContext presentRenderbuffer:GL_RENDERBUFFER];

完整代码

- (void) setupOpenGL {
    _eaglLayer = (CAEAGLLayer *) self.layer;
    _eaglLayer.opaque = YES;

    _eaglLayer.drawableProperties = @{kEAGLDrawablePropertyRetainedBacking: @YES,
                                      kEAGLDrawablePropertyColorFormat: kEAGLColorFormatRGBA8};

    _eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
    [EAGLContext setCurrentContext:_eaglContext];

    glGenRenderbuffers(1, &_renderBuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, _renderBuffer);

    glGenFramebuffers(1, &_frameBuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer);

    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _renderBuffer);
    [_eaglContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:_eaglLayer];

}

[EAGLContext setCurrentContext:self.eaglContext];

glViewport(0, 0, self.drawableWidth, self.drawableHeight);
glClearColor(0, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);

[self.eaglContext presentRenderbuffer:GL_RENDERBUFFER];

代码在这

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值