OpenGLES与IOS编程

本文介绍了OpenGLES在iOS平台上的使用,包括EGLDisplay、EGLSurface和EGLContext的概念以及它们在iOS中的实现方式。通过创建OffScreen Framebuffer、CAEAGLLayer、EAGLContext,并将它们关联,实现3D场景的渲染。在iOS中,需要将UIView的layer类型改为CAEAGLLayer,并使用EAGLContext的renderbufferStorage分配内存,最后通过presentRenderbuffer显示渲染结果。
摘要由CSDN通过智能技术生成

    要实现3D引擎的跨平台功能. 必须研究OpenGLES的接口规范. 而OpenGLES 在IOS平台上的使用也有自身的特点.本文将详细比较两者在使用上的异同.


一. OpenGL ES对象及接口函数

    OpenGL ES中的对象分别用于处理两大类问题:   平台相关的问题和OpenGL渲染相关的问题.

    EGLDisplay与EGLSurface用于处理与平台相关的问题.

    EGLContext处理与OpenGL渲染相关的问题.

1. EGLDisplay可以简单理解为一个显示渲染结果的渲染窗口. EGLSurface可以理解为此窗口中的显示表面.只有画在此surface上的内容,才是渲染窗口中最后显示出来的画面.

1)   一般的应用平台在使用OpenGLES对象时, 只要使用以下API即可:

   eglGetDisplay,  eglInitialize,   eglChooseConfig,   eglCreateWindowSurface 等.

2)  但在Apple平台中, 对OpenGLES的使用略有不同.

   在IOS编程中必须要有一个UIWindow类实例对象,UIWindow就相当于上面的EGLDisplay.

   同时还必须要有一个从UIView类派生的类(可以称之为CustomView),UIView就相当于上面的EGLSurface. 并且必须将CustomView的成员变量layer, 由CALayer类型变为CAEAGLLayer类型. CAEAGLLayer成员的作用, 类似于eglChooseConfig函数. 用来设置目标surface的宽,高,像素格式及透明性等属性.设置完CAEAGLLayer后, 再以此对象的设置为参数, 调用renderbufferStorage来分配相应的内存空间(其作用类似于eglCreateWindowSurface?).

   需要明确的是, 一个UIView的最终显示结果, 是由它所包含的所有layer的画面叠加后形成的.


2. EGLContext

    与OpenGL渲染相关的内容由EGLContext对象来管理. 首先要调用eglCreateContext函数创建一个EGLContext对象,EGLContext内部采用双缓冲机制来实现渲染结果的显示.EGLContext有两个Framebuffer对象.一个做为back一个为front.当渲染完一帧后.通过调用eglSwapBuffers函数, EGLContext会自动交换两个Framebuffer的位置, 并且将front Framebuffer中的内容提交给相应的EGLSurface.
在一个进程中,可以同时创建多个EGLContext对象(eglCreateContext),但当前context只能有一个, 需要通过eglMakeCurrent来设定.

 在App
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值