1. EGL

OpenGL ES命令须要一个rendering context和一个drawing surface。

Rendering Context: 保存当前的OpenGL ES状态。

Drawing Surface: 是原语(primitive)绘图的Surface。

它指定了渲染的buffer类型,如:color buffer。depth buffer和stencil buffer;同一时候它也指定了每一个须要的buffer的位深度(bit depth)。

EGL是OpenGL ES API与Native Window System之间的接口。

在OpenGL ES运行render之前,须要EGL做下面工作:

• 查询设备上可得到的显示设备,并初始化它们。

•  创建一个Rendering Surface(渲染表面)。

EGL能够创建屏幕上的表面(on-srceen surface)或离线屏幕表面off-screen surface,屏幕上的表面连接到本地窗体系统;而离线屏幕表面不显示,但能够用于渲染表面(rendering surface)的像素缓冲区。

• 创建一个rendering context(渲染环境)。

在真正開始绘图之前,须要把渲染环境连接到渲染表面。

1.1 EGL 数据类型

Data Type

C-Language Type

EGL Type

32-bit integer int EGLint
32-bit unsigned integer unsigned int EGLBoolean, EGLenum
32-bit pointer void * EGLConfig, EGLContext,
EGLDisplay, EGLSurface,
EGLClientBuffer

2.  OpengGL ES命令后缀和參数数据类型

Data Type Suffix Data Type C-Language Type GL Type
b 8-bit signed integer signed char GLbyte
ub 8-bit unsigned integer unsigned char GLubyte,
GLboolean
s 16-bit signed integer short GLshort
us 16-bit unsigned integer unsigned short GLushort
i 32-bit signed integer int GLint
ui 32-bit unsigned integer unsigned int GLuint,
GLbitfield,
GLenum
x 16.16 fixed point int GLfixed
f 32-bit floating point float GLfloat,
GLclampf

GLvoid是OpenGL ES命令可接受的指针。

2.1 OpenGL ES基本错误码

错误码可通过GLenum glGetError(void)函数获取。假设当前错误码的值不为GL_NO_ERROR。则新产生的错误码不能被保存。

Error Code Description
GL_NO_ERROR No error has been generated since the last call to glGetError.
GL_INVALID_ENUM A GLenum argument is out of range. The command that generated the error is ignored.
GL_INVALID_VALUE A numeric argument is out of range. The command that generated the error is ignored.
GL_INVALID_OPERATION The specific command cannot be performed in the current OpenGL ES state. The command that generated the error is ignored.
GL_OUT_OF_MEMORY There is insufficient memory to execute this command. The state of the OpenGL ES pipeline is considered to be undefined if this error is encountered except for the current error code.

 3. Flush和Finish

OpenGL ES2.0 API继承了OpenGL的C-S(client-server)模式。应用程序(client)公布命令,则Server负责运行处理。且不是应用程序每发一个命令都被及时地发送给Server。在设备中CPU负责运行游戏的逻辑。并向GPU(硬件显卡或是软件模拟的显卡)发送绘图指令。在这样的架构下,CPU和GPU分别充当client与server端的角色。

glFlush命令把当前OpenGL ES环境中的命令进行刷新,然后发送给Server。glFlush仅仅是把命令发送给Server,但并不等待运行完毕。

假设须要等到Server运行完毕时才返回,则须要调用glFinish,但它严重影响性能。

eglSwapBuffers中调用了glFlush。

4. 主要的状态管理

管道的每一个阶段都有自己的一些状态,且每一个状态有相应的值,这些状态值能够通过下面两个函数进行改动:

void glEnable(GLenum cap)
void glDisable(GLenum cap)

在初始状态时,除GL_DITHER(初始值为GL_TRUE)之外,其他每一个状态的初始值都为GL_FALSE。这些状态值被保存在EGLcontext中。

其状态值可通过glIsEnabled(GLboolean glIsEnabled(GLenum cap))来进行查询。

OpenGL ES2.0 基本编程的更多相关文章

  1. iOS开发——图形编程OC篇&OpenGL ES2.0编程步骤

    OpenGL ES2.0编程步骤 OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设 ...

  2. OpenGL ES2.0入门详解

    引自:http://blog.csdn.net/wangyuchun_799/article/details/7736928  1.决定你要支持的OpenGL ES的版本.目前,OpenGL ES包含 ...

  3. OpenGL ES2.0 入门经典例子

    原文链接地址:http://www.raywenderlich.com/3664/opengl-es-2-0-for-iphone-tutorial 免责申明(必读!):本博客提供的所有教程的翻译原稿 ...

  4. Cocos2d-x中使用OpenGL ES2.0编写shader

    这几天在看子龙山人的关于OpenGL的文章,先依葫芦画瓢,能看到些东西,才能慢慢深入了解,当入门文章不错,但是其中遇到的一些问题,折腾了一些时间,为了方便和我一样的小白们,在这篇文章中进行写补充. O ...

  5. Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤

    原文地址: Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤 - 网络资源是无限的 - 博客频道 - CSDN.NET http://blog.csdn.net/fen ...

  6. OPENGL ES2.0如何不使用glActiveTexture而显示多个图片

    https://www.oschina.net/question/253717_72107 用opengl es 2.0显示多个图片的话,我只会一种方式,先将图片生成纹理,然后用下面的方式渲染 // ...

  7. Android +NDK+eclipse+opengl ES2.0 开启深度測试

    參考:https://www.opengl.org/discussion_boards/showthread.php/172736-OpenGL-ES-Depth-Buffer-Problem 环境: ...

  8. OpenGL ES2.0编程三步曲 -转

    原地址:http://blog.csdn.net/myarrow/article/details/7707943 1. 保存全局变量的数据结构 以下例子程序均基于Linux平台. typedef st ...

  9. OpenGL ES2.0基础入门

    1.OpenGL ES 1.x渲染管线(又称为渲染流水线) (1).基本处理: 基本处理主要是设定3D空间中物体的顶点坐标.顶点对应的颜色.顶点的纹理坐标等属性,并且指定绘制方式. 常见的绘制方式有: ...

随机推荐

  1. call( )、apply( )

    call( )和apply( )都是用于改变函数执行时的上下文,唯一最大区别在于传入参数的形式不同. 这两个函数都是函数的方法,只有函数能够打点调用call().apply(),表示用指定的上下文执行 ...

  2. python自动化测试学习笔记-6redis应用

    上次我们学到了redis的一些操作,下面来实际运用以下. 这里我们先来学习一下什么是cookie和session. 什么是Cookie 其实简单的说就是当用户通过http协议访问一个服务器的时候,这个 ...

  3. scrapy 简单操作

    1.创建一个简单的scrapy项目 scrapy startproject search(项目名称)按照提示cd searchscrapy genspider serachname search.co ...

  4. sql 列集合转换成逗号分隔的字符类型

    CREATE function [dbo].[getGroupPath](@groupId int) returns nvarchar(2000) as begin declare @path nva ...

  5. JQuery中常用的$.get(),$.post(),$.ajax(),$.getJSON(),load()的详解与区别

    背景:因为最近需要获取本地的数据件进行项目测试,需要用到JQuery实现数据文件的读取,但是由于对JQuery内的获取文件方式不太了解,这次趁着机会进行一下总结.因为该总结是本人根据平常的使用及网上的 ...

  6. 02--Java Socket编程--IO方式

    一.基础知识 1. TCP状态转换知识,可参考: http://www.cnblogs.com/qlee/archive/2011/07/12/2104089.html 2. 数据传输 3. TCP/ ...

  7. CSS——规避脱标流和vertical-align

    规避脱标流: 1.尽量使用标准流. 2.标准流解决不了的使用浮动. 3.浮动解决不了的使用定位. 问题解决:嵌套盒子在不使用定位的情况下定位到右上角 <!DOCTYPE html> < ...

  8. 易买网之smartupload实现文件上传

    经过俩个星期的奋斗,易买网项目完工.在之前,实现图片的上传,走过许多弯路,原来是好多基础的知识忘记了,没把smartupload文件包添加组件jar包至WEB-INF/lib包中,在此特别重视,做下文 ...

  9. 实例分割:MaskXRCnn 与Visual Genome数据集

    一.VG数据集 机器学习领域的突破突然让计算机获得了以未曾有的高精度识别图像中物体的能力--几乎达到了让人惊恐的程度.现在的问题是机器是否还能更上层楼,学会理解这些图片中所发生的事件. Visual ...

  10. 如何在Android Studio中查看一个类的继承关系呢?

    在面板顶部的工具栏中,找到Navigate,然后在下拉列表中,找到“Type Hierarchy”(快捷键 Ctrl+H),点击.即可在面板右侧出现该类的Hierarchy层级图.