OpenGL ES2.0 基本编程
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 基本编程的更多相关文章
- iOS开发——图形编程OC篇&OpenGL ES2.0编程步骤
OpenGL ES2.0编程步骤 OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设 ...
- OpenGL ES2.0入门详解
引自:http://blog.csdn.net/wangyuchun_799/article/details/7736928 1.决定你要支持的OpenGL ES的版本.目前,OpenGL ES包含 ...
- OpenGL ES2.0 入门经典例子
原文链接地址:http://www.raywenderlich.com/3664/opengl-es-2-0-for-iphone-tutorial 免责申明(必读!):本博客提供的所有教程的翻译原稿 ...
- Cocos2d-x中使用OpenGL ES2.0编写shader
这几天在看子龙山人的关于OpenGL的文章,先依葫芦画瓢,能看到些东西,才能慢慢深入了解,当入门文章不错,但是其中遇到的一些问题,折腾了一些时间,为了方便和我一样的小白们,在这篇文章中进行写补充. O ...
- Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤
原文地址: Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤 - 网络资源是无限的 - 博客频道 - CSDN.NET http://blog.csdn.net/fen ...
- OPENGL ES2.0如何不使用glActiveTexture而显示多个图片
https://www.oschina.net/question/253717_72107 用opengl es 2.0显示多个图片的话,我只会一种方式,先将图片生成纹理,然后用下面的方式渲染 // ...
- Android +NDK+eclipse+opengl ES2.0 开启深度測试
參考:https://www.opengl.org/discussion_boards/showthread.php/172736-OpenGL-ES-Depth-Buffer-Problem 环境: ...
- OpenGL ES2.0编程三步曲 -转
原地址:http://blog.csdn.net/myarrow/article/details/7707943 1. 保存全局变量的数据结构 以下例子程序均基于Linux平台. typedef st ...
- OpenGL ES2.0基础入门
1.OpenGL ES 1.x渲染管线(又称为渲染流水线) (1).基本处理: 基本处理主要是设定3D空间中物体的顶点坐标.顶点对应的颜色.顶点的纹理坐标等属性,并且指定绘制方式. 常见的绘制方式有: ...
随机推荐
- MFC学习篇(二):error LNK2005 及其解决方法
环境:MFC条件下添加原有代码 >nafxcwd.lib(afxmem.obj) : error LNK2005: @YAPAXI@Z) already defined in LIBCMTD.l ...
- ACM_迟到的祝福(四)
迟到的祝福(四) Time Limit: 2000/1000ms (Java/Others) Problem Description: 据说前几天是雁来师姐的生日,作为一个15级的小鲜肉A,没及时给师 ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制
SAS学习笔记之<SAS编程与数据挖掘商业案例>(4)DATA步循环与控制.常用全程语句.输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和E ...
- [Windows Server 2003] IIS自带FTP安装及配置方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:IIS6.0自 ...
- C# 获得 当年1月1号
//默认当年1月1号 ViewBag.time1 = , ).ToString("yyyy-MM-dd"); ViewBag.time2 = DateTime.Now.ToStri ...
- bat配置JDK环境变量
最近总是部署服务器,总是要安装配置JDK,今天就想写个bat来配置JDK的环境变量,首先介绍点bat的小知识 @符号后面的命令不会显示在terminal上 例如: @echo运行时 隐藏命令(不在te ...
- JNI数组操作
在Java中数组分为两种: 1.基本类型数组 2.对象类型(Object[])的数组(数组中存放的是指向Java对象中的引用) 一个能通用于两种不同类型数组的函数: GetArrayLength(ja ...
- chrome浏览器 快捷键设置
如何设置谷歌浏览器在新窗口中打开链接?如何设置谷歌浏览器在新标签页中打开链接?一.快捷键方式: 1.左键单击 ==> 在当前窗口中打开目标网页. 2.Shift + 左键单击 ==> 在新 ...
- 码书:编码与解码的战争 PDF 下载
码书:编码与解码的战争 PDF 下载 下载地址:https://pan.baidu.com/s/14Y_krHh-unOv4g2KYFFDgQ 如需分享码:[打开微信]->[扫描右侧二维码]-& ...
- 关于panda中dataframe的与&运算*(stackoverflow高票答案)
85 down vote favorite 31 What explains the difference in behavior of boolean and bitwise operations ...