在iOS中如何使用OpenGL

作者: zhonglaoban | 来源:发表于2021-01-09 20:06 被阅读0次

在iOS中如何使用OpenGL呢,有3种方式,它们都来自系统的库GLKit中。下面我们来看看如何使用他们(我们这里主要讲一些简单的初始化工作,循序渐进)。

GLKViewController

创建一个控制器继承于GLKViewController,在viewDidLoad中设置一个EAGLContext,然后重写glkView:drawInRect:的方法,就可以在里面做OpenGL相关的绘制啦。

- (void)viewDidLoad {
    [super viewDidLoad];
    GLKView *glView = (GLKView *)self.view;
    glView.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
}

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
    GLKView *glView = (GLKView *)self.view;
    [EAGLContext setCurrentContext:glView.context];
    glClearColor(1, 0, 0, 1);
    glClear(GL_COLOR_BUFFER_BIT);
}

GLKView

创建一个视图继承于GLKView,在init中设置一个EAGLContext,然后重写drawRect:的方法,也可以在里面做OpenGL相关的绘制啦。

- (instancetype)init
{
    self = [super init];
    if (self) {
        [self setupOpenGL];
    }
    return self;
}
- (void)setupOpenGL {
    self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
}
- (void)drawRect:(CGRect)rect {
    [EAGLContext setCurrentContext:self.context];
    glClearColor(0, 1, 0, 1);
    glClear(GL_COLOR_BUFFER_BIT);
}

CAEAGLLayer

通过CAEAGLLayer的方式来初始化OpenGL相对来说,要稍微复杂一点,需要做这么几件事情,初始化Layer,初始化OpenGL,绘制相关代码。

初始化Layer

- (void)setupLayer {
    _eaglLayer = (CAEAGLLayer *)self.layer;
}

初始化OpenGL

创建OpenGL需要的上下文,创建帧缓冲,创建渲染缓冲。
渲染缓冲存储的是颜色、深度、模版等描述信息,不可直接用于渲染。
帧缓冲存储的是颜色、深度、模版描述信息处理后的直接可以显示的像素。

- (void)setupOpenGL {
    _glContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
    [EAGLContext setCurrentContext:_glContext];
    glGenFramebuffers(1, &_frameBuffer);
    glGenRenderbuffers(1, &_renderBuffer);
}

绘制相关代码

OpenGL是一个状态机,设置哪个上下文就是在操作哪个上下文的数据,我们这里需要确保是操作当前上下文。

- (void)drawSome {
    [EAGLContext setCurrentContext:_glContext];
    
    glBindRenderbuffer(GL_RENDERBUFFER, _renderBuffer);
    //为renderBuffer分配存储空间,iOS需要这么用
    BOOL result = [_glContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:_eaglLayer];
    if (!result) {
        printf("failed to renderbufferStorage \n");
    }
    glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _renderBuffer);
    
    glClearColor(0, 0, 1, 1);
    glClear(GL_COLOR_BUFFER_BIT);
    
    [self.glContext presentRenderbuffer:GL_RENDERBUFFER];
}

运行项目,可以看到3个OpenGL渲染出来的视图,它们分别是红绿蓝三个颜色。
Github地址

相关文章

  • 在iOS中如何使用OpenGL

    在iOS中如何使用OpenGL呢,有3种方式,它们都来自系统的库GLKit中。下面我们来看看如何使用他们(我们这里...

  • [iOS]OpenGL

    1.GPUImage如何使用OpenGL,http://ios.jobbole.com/92362/ OpenGL...

  • 在 Android 中使用 OpenGL(图形绘制)

    写几篇博客介绍一下在 Android 中如何使用 OpenGL,包括: 在 Android 中使用 OpenGL(...

  • OpenGL ES入门及GLSL

    使用OpenGL ES最关心的问题 1、如何在iOS上搭建OpenGL ES环境2、如何链接GLSL3、如何通过G...

  • 七、OpenGL纹理相关API

    在OpenGL中,纹理一般是TGA文件进行处理。而在实际的iOS开发中,我们一般不使用OpenGL,而是使用Ope...

  • OpenGL ES for iOS - 6

    OpenGL ES设计指南 现在,您已经掌握了在iOS应用程序中使用OpenGL ES的基础知识,请使用本章中的信...

  • OpenGL ES零基础入门----(2)绘制三角形

    前言 在前文中我们学习了如何在 iOS 平台上设置OpenGL ES 环境,主要是...

  • OpenGL ES for iOS - 6

    OpenGL ES 设计指南 现在您已经掌握了在 iOS 应用程序中使用 OpenGL ES 的基础知识,请使用本...

  • OpenGl 01

    在iOS上使用OpenGL,基本上会涉及到 OpenGL ES,GPUImage, GLKit 这三块的知识,其中...

  • OpenGL_ES GLKit

    1. 简介 基于OpenGL / OpenGL ES进行简化设计的开发框架,使得iOS上使用OpenGL变得容易。...

网友评论

    本文标题:在iOS中如何使用OpenGL

    本文链接:https://www.haomeiwen.com/subject/nkfcnktx.html