OpenGL初探

1. OpenGL、OpenGL ES、EGL三者的区别和联系?

OpenGL(Open Graphics Library): 开放图形库,主要用于2D、3D矢量图形的绘制。封装了一系列API用于图像绘制,OpenGL具有非常好的跨平台性,可在Windows、Linux、MacOS上使用,它依赖于硬件的支持,能够通过GPU高效绘制各种图形和动画。
OpenGL ES (OpenGL for Embedded Systems): OpenGL的简化版本,是以手持和移动设备为目标的高级3D图形图像API。OpenGL ES去除了一些OpenGL中移动端用不到的冗余功能,是目前主流的智能手机图形API,目前支持的平台包括:iOS、Android、BlackBerry、bada、Linux、Windows等。
EGL: OpenGL ES API没有提供如何创建渲染上下文或者上下文如何链接到原生窗口。EGL是渲染API和原生窗口系统之间的接口,比如OpenGL ES和各个平台。iOS系统是唯一支持OpenGL ES但不支持EGL的平台,因为苹果提供了一套自己的EGL API实现,称为EAGL。这有些类似与我们日常开发中对第三方库的二次封装,OpenGL/OpenGL ES对于苹果来说就是他们的第三方库。

2. 什么是OpenGL上下文?

OpenGL是一个状态机,它拥有非常多的状态变量,并且每个状态变量都有默认值。
OpenGL在渲染的时候需要一个Context来记录OpenGL渲染需要的所有信息和状态,可以把它理解成一个大的结构体,里面记录了当前绘制使用的颜色、是否有光照计算以及开启的光源等非常多我们使用OpenGL函数调用设置的状态和状态属性。
在程序中,我们设置的各种状态和默认状态会一直生效,直到我们再次修改它们。
OpenGL的绘制命令都是作用在当前的Context上,这个Current Context是一个线程私有(thread-local)的变量,也就是说如果我们在线程中绘制,那么需要为该线程指定一个Current Context的,当多个线程参与绘制任务时,需要原线程解绑再重新绑定新的线程。多个线程不能同时指定同一个Context为Current Context,否则会导致崩溃。

3. 什么是固定管线和可编程管线?

根据渲染管线的类型,OpenGLES可以被分为固定管线和可编程管线两类。
固定渲染管线的OpenGLES不需要也不允许你自己去定义顶点渲染和像素渲染的具体逻辑,它内部已经固化了一套完整的渲染流程,只需要开发者在CPU代码端输入渲染所需要的参数并指定特定的开关,就能完成不同的渲染。
可编程渲染管线的OpenGLES版本必须由开发者自行实现渲染流程,否则无法绘制出最终的画面。开发者可以根据自己的具体需要来编写顶点渲染(Vertex Shader)和像素渲染(Fragment Shader)中的具体逻辑,可最大程度的简化渲染管线的逻辑以提高渲染效率,也可自己实现特定的算法和逻辑来渲染出固定管线无法渲染的效果。
  

4. OpenGL多线程绘制方式?

实现效果: OpenGL开启两个线程,一个线程用于绘制,另一个线程用于加载纹理。
实现方法: OpenGL是单线程的,其他线程不能访问另外线程的纹理资源,但是,如果两个线程共享上下文,就可以访问彼此的纹理资源。
绘制线程: 创建两个上下文

// 只有主要代码
...
context = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值