编辑推荐

  《华章OpenGLES3.0编程指南(原书第2版)》由资深OpenGL技术专家亲笔撰写,全面介绍OpenGLES3.0的各种特性及新增功能;
  通过大量已经编译和测试过的实例,详细讲解OpenGLES3.0中的应用程序接口(API)和图形管线,既涵盖简单图形的渲染方法,又深入介绍逐像素照明和粒子系统等高级渲染技术,并且包含大量有效使用API和硬件的实用技巧,为手持设备的各种高性能3D应用开发提供翔实指导。

内容简介

  《华章OpenGLES3.0编程指南(原书第2版)》由资深OpenGL技术专家亲笔撰写,全面介绍OpenGLES3.0的各种特性及新增功能,,通过大量已经编译和测试过的实例,详细讲解OpenGLES3.0中的应用程序接口(API)和图形管线,既涵盖简单图形的渲染方法,又深入介绍逐像素照明和粒子系统等高级渲染技术,并且包含大量有效使用API和硬件的实用技巧,为手持设备的各种高性能3D应用开发提供翔实指导。
  《华章OpenGLES3.0编程指南(原书第2版)》共16章:第1章简单介绍OpenGLES,并概述OpenGLES3.0图形管线;第2章通过绘制一个三角形的简单OpenGLES3.0示例程序,讲解一些API概念,并说明如何构建和运行OpenGLES示例程序;第3章讲述为OpenGLES3.0创建表面和渲染上下文的API——EGL;第4章讨论创建着色器对象、编译着色器和检查编译错误的方法;第5章讲解编写着色器所需的着色语言基本知识;第6章详细介绍几何形状输入图形管线的方法,包含对顶点属性、顶点数组和缓冲区对象的讨论;第7章讨论几何形状如何装配成图元,介绍OpenGLES3.0中所有可用图元类型,包括点精灵、直线、三角形、三角形条带和三角扇形;第8章概述顶点着色器如何融入管线,以及OpenGLES着色语言中可用于顶点着色器的特殊变量;第9章和第10章介绍片段着色器,包括多重纹理、雾化、Alpha测试和用户裁剪平面等;第11章讨论片段操作,包括剪裁测试、模板测试、深度测试、多重采样、混合和抖动;第12章介绍使用帧缓冲区对象渲染屏幕外表面;第13章讨论同步对象和栅栏的使用方法;第14章介绍OpenGLES3.0高级编程,包含使用法线贴图的逐像素照明、环境贴图、粒子系统、图像后处理、程序纹理、阴影贴图、地形渲染和投影纹理等渲染技术。;第15章提供OpenGLES3.0中各种可用状态查询的参考;第16章讨论如何为iOS7、Android4.3NDK、Android4.3SDK、Windows和Linux构建OpenGLES样板代码。

作者简介

  DanGinsburg,UpsampleSoftware公司创始人,该软件公司提供3D图形和GPU计算的咨询服务。Dan参与撰写了多部著作,包括《OpenCL编程指南》和《OpenGLShadingLanguage》(第3版)。在过去的工作中,Dan曾经开发OpenGL驱动程序、桌面和手持3D演示、GPU开发人员工具、3D医学显示和游戏。

  BudirijantoPurnomo,AMD公司高级软件架构师,领导跨越多个AMD软件栈的GPU调试和剖析技术的软件实现工作。他与多位AMD的软件和硬件架构师协作,定义用于调试和剖析GPU应用的未来硬件架构。他曾在国际会议上发表过许多与计算机图形技术相关的论文。

  DaveShreiner,ARM公司图形与GPU计算部门主管,自从OpenGL诞生之日起就积极地参与到它的开发当中。他创建了OpenGL的个商业培训课程,并且拥有超过20年的OpenGL编程教学经验。

精彩书评

  ★作为一名图形技术人员和认真的OpenGLES开发人员,我真心诚意地认为,如果你只购买一本有关OpenGLES3.0编程的书籍,那么就应该是买这《华章 OpenGL ES 3.0编程指南(原书第2版)》。Dan和Budirijanto的这《华章 OpenGL ES 3.0编程指南(原书第2版)》很明显是程序员写给程序员的书,任何对OpenGLES3.0感兴趣的人都有必要阅读它。你会发现在编程过程中,你将会一次又一次地打开《华章 OpenGL ES 3.0编程指南(原书第2版)》,而不是阅读OpenGLES的规范。我极力推荐你阅读它!
  ——RickTewell,Freescale图形技术架构师
  
  ★《华章 OpenGL ES 3.0编程指南(原书第2版)》用清晰、全面的解释和大量示例,介绍了OpenGLES的版本,任何开发移动应用的人的桌面上都应该有它。
  ——DaveAstle,高通公司图形工具主管,GameDev.net创始人

目录

华章 OpenGL ES 3.0编程指南(原书第2版)》赞誉
译者序

前言
致谢
第1章 OpenGLES3.0简介
1.1 OpenGLES3.0
1.1.1 顶点着色器
1.1.2 图元装配
1.1.3 光栅化
1.1.4 片段着色器
1.1.5 逐片段操作
1.2 OpenGLES3.0新功能
1.2.1 纹理
1.2.2 着色器
1.2.3 几何形状
1.2.4 缓冲区对象
1.2.5 帧缓冲区
1.3 OpenGLES3.0和向后兼容性
1.4 EGL
1.4.1 使用OpenGLES3.0编程
1.4.2 库和包含文件
1.5 EGL命令语法
1.6 OpenGLES命令语法
1.7 错误处理
1.8 基本状态管理
1.9 延伸阅读
第2章 你好,三角形:一个OpenGLES3.0示例
2.1 代码框架
2.2 示例下载位置
2.3 "你好,三角形"(HelloTriangle)示例
2.4 使用OpenGLES3.0框架
2.5 创建简单的顶点和片段着色器
2.6 编译和加载着色器
2.7 创建一个程序对象并链接着色器
2.8 设置视口和清除颜色缓冲区
2.9 加载几何形状和绘制图元
2.10 显示后台缓冲区
2.11 小结
第3章 EGL简介
3.1 与窗口系统通信
3.2 检查错误
3.3 初始化EGL
3.4 确定可用表面配置
3.5 查询EGLConf?ig属性
3.6 让EGL选择配置
3.7 创建屏幕上的渲染区域:EGL窗口
3.8 创建屏幕外渲染区域:EGLPbuffer
3.9 创建一个渲染上下文
3.10 指定某个EGLContext为当前上下文
3.11 结合所有EGL知识
3.12 同步渲染
3.13 小结
第4章 着色器和程序
4.1 着色器和程序
4.1.1 创建和编译一个着色器
4.1.2 创建和链接程序
4.2 统一变量和属性
4.2.1 获取和设置统一变量
4.2.2 统一变量缓冲区对象
4.2.3 获取和设置属性
4.3 着色器编译器
4.4 程序二进制码
4.5 小结
第5章 OpenGLES着色语言
5.1 OpenGLES着色语言基础知识
5.2 着色器版本规范
5.3 变量和变量类型
5.4 变量构造器
5.5 向量和矩阵分量
5.6 常量
5.7 结构
5.8 数组
5.9 运算符
5.10 函数
5.11 内建函数
5.12 控制流语句
5.13 统一变量
5.14 统一变量块
5.15 顶点和片段着色器输入/输出
5.16 插值限定符
5.17 预处理器和指令
5.18 统一变量和插值器打包
5.19 精度限定符
5.20 不变性
5.21 小结
第6章 顶点属性、顶点数组和缓冲区对象
6.1 指定顶点属性数据
6.1.1 常量顶点属性
6.1.2 顶点数组
6.2 在顶点着色器中声明顶点属性变量
6.3 顶点缓冲区对象
6.4 顶点数组对象
6.5 映射缓冲区对象
6.6 复制缓冲区对象
6.7 小结
第7章 图元装配和光栅化
7.1 图元
7.1.1 三角形
7.1.2 直线
7.1.3 点精灵
7.2 绘制图元
7.2.1 图元重启
7.2.2 驱动顶点
7.2.3 几何形状实例化
7.2.4 性能提示
7.3 图元装配
7.3.1 坐标系统
7.3.2 透视分割
7.3.3 视口变换
7.4 光栅化
7.4.1 剔除
7.4.2 多边形偏移
7.5 遮挡查询
7.6 小结
第8章 顶点着色器
8.1 顶点着色器概述
8.1.1 顶点着色器内建变量
8.1.2 精度限定符
8.1.3 顶点着色器中的统一变量限制数量
8.2 顶点着色器示例
8.2.1 矩阵变换
8.2.2 顶点着色器中的照明
8.3 生成纹理坐标
8.4 顶点蒙皮
8.5 变换反馈
8.6 顶点纹理
8.7 将OpenGLES1.1顶点管线作为ES3.0顶点着色器
8.8 小结
第9章 纹理
9.1 纹理基础
9.1.1 2D纹理
9.1.2 立方图纹理
9.1.3 3D纹理
9.1.4 2D纹理数组
9.1.5 纹理对象和纹理的加载
9.1.6 纹理过滤和mip贴图
9.1.7 自动mip贴图生成
9.1.8 纹理坐标包装
9.1.9 纹理调配
9.1.10 纹理细节级别
9.1.11 深度纹理对比(百分比渐进过滤)
9.1.12 纹理格式
9.1.13 在着色器中使用纹理
9.1.14 使用立方图纹理的示例
9.1.15 加载3D纹理和2D纹理数组
9.2 压缩纹理
9.3 纹理子图像规范
9.4 从颜色缓冲区复制纹理数据
9.5 采样器对象
9.6 不可变纹理
9.7 像素解包缓冲区对象
9.8 小结
第10章 片段着色器
10.1 固定功能片段着色器
10.2 片段着色器概述
10.2.1 内建特殊变量
10.2.2 内建常量
10.2.3 精度限定符
10.3 用着色器实现固定功能技术
10.3.1 多重纹理
10.3.2 雾化
10.3.3 Alpha测试(使用Discard)
10.3.4 用户裁剪平面
10.4 小结
第11章 片段操作
11.1 缓冲区
11.1.1 请求更多缓冲区
11.1.2 清除缓冲区
11.1.3 用掩码控制帧缓冲区的写入
11.2 片段测试和操作
11.2.1 使用剪裁测试
11.2.2 模板缓冲区测试
11.3 混合
11.4 抖动
11.5 多重采样抗锯齿
11.6 在帧缓冲区读取和写入像素
11.7 多重渲染目标
11.8 小结
第12章 帧缓冲区对象
12.1 为什么使用帧缓冲区对象
12.2 帧缓冲区和渲染缓冲区对象
12.2.1 选择渲染缓冲区与纹理作为帧缓冲区附着的对比
12.2.2 帧缓冲区对象与EGL表面的对比
12.3 创建帧缓冲区和渲染缓冲区对象
12.4 使用帧缓冲区对象
12.4.1 多重采样渲染缓冲区
12.4.2 渲染缓冲区格式
12.5 使用帧缓冲区对象
12.5.1 连接渲染缓冲区作为帧缓冲区附着
12.5.2 连接一个2D纹理作为帧缓冲区附着
12.5.3 连接3D纹理的一个图像作为帧缓冲区附着
12.5.4 检查帧缓冲区完整性
12.6 帧缓冲区位块传送
12.7 帧缓冲区失效
12.8 删除帧缓冲区和渲染缓冲区对象
12.9 删除用作帧缓冲区附着的渲染缓冲区对象
12.10 示例
12.11 性能提示和技巧
12.12 小结
第13章 同步对象和栅栏
13.1 刷新和结束
13.2 为什么使用同步对象
13.3 创建和删除同步对象
13.4 等待和向同步对象发送信号
13.5 示例
13.6 小结
第14章 OpenGLES3.0高级编程
14.1 逐片段照明
14.1.1 使用法线贴图的照明
14.1.2 照明着色器
14.1.3 照明方程式
14.2 环境贴图
14.3 使用点精灵的粒子系统
14.3.1 粒子系统设置
14.3.2 粒子系统顶点着色器
14.3.3 粒子系统片段着色器
14.4 使用变换反馈的粒子系统
14.4.1 粒子系统渲染算法
14.4.2 使用变换反馈发射粒子
14.4.3 渲染粒子
14.5 图像后处理
14.5.1 渲染到纹理设置
14.5.2 模糊片段着色器
14.5.3 眩光
14.6 投影纹理
14.6.1 投影纹理基础
14.6.2 投影纹理所用的矩阵
14.6.3 投影聚光灯着色器
14.7 使用3D纹理的噪声
14.7.1 生成噪声
14.7.2 使用噪声
14.8 过程纹理
14.8.1 过程纹理示例
14.8.2 过程纹理的抗锯齿
14.8.3 关于过程纹理的延伸阅读
14.9 用顶点纹理读取渲染地形
14.9.1 生成一个正方形的地形网格
14.9.2 在顶点着色器中计算顶点法线并读取高度值
14.9.3 大型地形渲染的延伸阅读
14.10 使用深度纹理的阴影
14.10.1 从光源位置渲染到深度纹理
14.10.2 从眼睛位置用深度纹理渲染
14.11 小结
第15章 状态查询
15.1 OpenGLES3.0实现字符串查询
15.2 查询OpenGLES实现决定的限制
15.3 查询OpenGLES状态
15.4 提示
15.5 实体名称查询
15.6 不可编程操作控制和查询
15.7 着色器和程序状态查询
15.8 顶点属性查询
15.9 纹理状态查询
15.10 采样器查询
15.11 异步对象查询
15.12 同步对象查询
15.13 顶点缓冲区查询
15.14 渲染缓冲区和帧缓冲区状态查询
15.15 小结
第16章 OpenGLES平台
16.1 在包含VisualStudio的MicrosoftWindows上构建
16.2 在UbuntuLinux上构建
16.3 在Android4.3+NDK(C++)上构建
16.3.1 先决条件
16.3.2 用AndroidNDK构建示例代码
16.4 在Android4.3+SDK上构建(Java)
16.5 在iOS7上构建
16.5.1 先决条件
16.5.2 用Xcode5构建示例代码
16.6 小结
附录A GL_HALF_FLOAT
附录B 内建函数
附录C ES框架API

前言/序言

  OpenGLES3.0是在手持设备和嵌入式设备上渲染复杂3D图形的软件接口。OpenGLES是具有可编程3D硬件的手持和嵌入式设备(包括手机、个人数字助理(PDA)、控制台、家用设备、车辆和航空电子设备)的主要图形程序库。《华章 OpenGL ES 3.0编程指南(原书第2版)》详细地介绍了整个OpenGLES3.0应用程序编程接口(API)和管线,并包含详细的例子,为手持设备的各种高性能3D应用的开发提供指导。
  目标读者
  《华章 OpenGL ES 3.0编程指南(原书第2版)》是为对学习OpenGLES3.0感兴趣的开发人员所写的,我们希望读者在计算机图形学领域有一定的基础。在正文部分我们解释了许多相关的图形学概念,因为它们与OpenGLES3.0的各个部分有关,但是我们期望读者理解基本的3D概念。《华章 OpenGL ES 3.0编程指南(原书第2版)》中的代码示例都以C语言编写。我们假定读者熟悉C或者C++,并且只介绍与OpenGLES3.0相关的语言主题。
  读者将学到有关图形管线各个方面的设置和编程的知识。《华章 OpenGL ES 3.0编程指南(原书第2版)》详细介绍了如何编写顶点和片段着色器,以及如何实现逐像素照明和粒子系统等高级渲染技术。此外,书中还提供性能提示以及有效使用API和硬件的技巧。
  完成《华章 OpenGL ES 3.0编程指南(原书第2版)》的学习之后,读者就能为编写充分利用嵌入式图形硬件可编程能力的OpenGLES3.0应用做好准备。
  《华章 OpenGL ES 3.0编程指南(原书第2版)》的组织结构
  《华章 OpenGL ES 3.0编程指南(原书第2版)》将顺序介绍API,帮助你逐步形成对OpenGLES3.0的认识。
  第1章——OpenGLES3.0简介
  第1章简单介绍OpenGLES,概述了OpenGLES3.0图形管线,讨论了OpenGLES3.0的设计理念和限制,最后介绍了OpenGLES3.0中使用的一些约定和类型。
  第2章——你好,三角形:一个OpenGLES3.0示例
  第2章介绍绘制三角形的一个简单OpenGLES3.0示例。我们的目的是说明OpenGLES3.0程序的样子,向读者介绍一些API概念,并说明如何构建和运行OpenGLES3.0示例程序。
  第3章——EGL简介
  第3章介绍EGL——为OpenGLES3.0创建表面和渲染上下文的API。我们说明与原生窗口系统通信、选择配置和创建EGL渲染上下文及表面的方法,传授足够多的EGL知识,你可以了解到启动OpenGLES3.0进行渲染所需的所有知识。
  第4章——着色器和程序
  着色器对象和程序对象是OpenGLES3.0中最基本的对象。第4章介绍创建着色器对象、编译着色器和检查编译错误的方法。这一章还说明如何创建程序对象、将着色器对象连接到程序对象以及链接最终程序对象的方法。我们讨论如何查询程序对象的信息以及加载统一变量(uniform)的方法。此外,你将学习有关源着色器和程序二进制代码之间的差别以及它们的使用方法。
  第5章——OpenGLES着色语言
  第5章介绍编写着色器所需的着色语言的基础知识。这些着色语言基础知识包括变量和类型、构造器、结构、数组、统一变量、统一变量块(uniformblock)和输入/输出变量。该章还描述着色语言的某些更细微的部分,例如精度限定符和不变性。
  第6章——顶点属性、顶点数组和缓冲区对象
  从第6章开始(到第11章为止),我们将详细介绍管线,教授设置和编程图形管线各个部分的方法。这一旅程从介绍几何形状输入图形管线的方法开始,包含了对顶点属性、顶点数组和缓冲区对象的讨论。
  第7章——图元装配和光栅化
  在前一章讨论几何形状输入图形管线的方法之后,第7章将讨论几何形状如何装配成图元,介绍OpenGLES3.0中所有可用的图元类型,包括点精灵、直线、三角形、三角形条带和三角扇形。此外,我们还说明了在顶点上进行坐标变换的方法,并简单介绍了OpenGLES3.0管线的光栅化阶段。
  第8章——顶点着色器
  我们所介绍的管线的下一部分是顶点着色器。第8章概述了顶点着色器如何融入管线以及OpenGLES着色语言中可用于顶点着色器的特殊变量,介绍了多个顶点着色器的示例,包括逐像素照明和蒙皮(skinning)。我们还给出了用顶点着色器实现OpenGLES1.0(和1.1)固定功能管线的示例。
  第9章——纹理
  第9章开始介绍片段着色器,描述OpenGLES3.0中所有可用的纹理功能。该章提供了创建纹理、加载纹理数据以及纹理渲染的细节,描述了纹理包装模式、纹理过滤、纹理格式、压缩纹理、采样器对象、不可变纹理、像素解包缓冲区对象和Mip贴图。该章介绍了OpenGLES3.0支持的所有纹理类型:2D纹理、立方图、2D纹理数组和3D纹理。
  第10章——片段着色器
  第9章的重点是如何在片段着色器中使用纹理,第10章介绍编写片段着色器所需知道的其他知识。该章概述了片段着色器和所有可用的特殊内建变量,还演示了用片段着色器实现OpenGLES1.1中所有固定功能技术的方法。多重纹理、雾化、Alpha测试和用户裁剪平面的例子都使用片段着色器实现。
  第11章——片段操作
  第11章讨论可以适用于整个帧缓冲区或者在OpenGLES3.0片段管线中执行片段着色器后适用于单个片段的操作。这些操作包括剪裁测试、模板测试、深度测试、多重采样、混合和抖动。本章介绍OpenGLES3.0图形管线的最后阶段。
  第12章——帧缓冲区对象
  第12章讨论使用帧缓冲区对象渲染屏幕外表面。帧缓冲区对象有多种用法,最常见的是渲染到一个纹理。本章提供API帧缓冲区对象部分的完整概述。理解帧缓冲区对象对于实现许多高级特效(如反射、阴影贴图和后处理)至关重要。
  第13章——同步对象和栅栏
  第13章概述同步对象和栅栏,它们是在OpenGLES3.0主机应用和GPU执行中同步的有效图元。我们讨论同步对象和栅栏的使用方法,并以一个示例作为结束。
  第14章——OpenGLES3.0高级编程
  第14章是核心章节,将《华章 OpenGL ES 3.0编程指南(原书第2版)》介绍的许多主题串联在一起。我们已经选择了高级渲染技术的一个样本,并展示了实现这些功能的示例。该章包含使用法线贴图的逐像素照明、环境贴图、粒子系统、图像后处理、程序纹理、阴影贴图、地形渲染和投影纹理等渲染技术。
  第15章——状态查询
  OpenGLES3.0中有大量的状态查询。对于你的几乎任何设置,都有获取当前值的对应方法。第15章提供了OpenGLES3.0中各种可用状态查询的参考。
  第16章——OpenGLES平台
  在最后一章中,我们抛开API的细节,讨论如何为iOS7、Android4.3NDK、Android4.3SDK、Windows和Linux构建OpenGLES样板代码。该章的意图是作为一个指南,帮助你在所选择的OpenGLES3.0平台上建立和运行样板代码。
  附录A——GL_HALF_FLOAT
  附录A详细介绍半浮点格式,并提供如何从IEEE浮点值转换为半浮点值(以及相反方向的转换)的参考。
  附录B——内建函数
  附录B提供了OpenGLES着色语言中所有可用的内建函数。
  附录C——ES框架API
  附录C提供了我们为《华章 OpenGL ES 3.0编程指南(原书第2版)》开发的实用框架的参考,并说明了每个函数的作用。
  OpenGLES3.0参考卡片
  《华章 OpenGL ES 3.0编程指南(原书第2版)》正文前面有几页OpenGLES3.0参考卡片,版权归Khronos所有,并授权我们使用。该参考卡片包含了OpenGLES3.0中所有函数的完整列表以及OpenGLES着色语言中的所有类型、操作符、限定符、内建函数和函数。
  代码和着色器示例
  《华章 OpenGL ES 3.0编程指南(原书第2版)》包括大量程序和着色器示例。你可以从《华章 OpenGL ES 3.0编程指南(原书第2版)》英文版网站(opengles-book.com)上下载这些示例,该网站提供了寄存《华章 OpenGL ES 3.0编程指南(原书第2版)》代码的github.com网站链接。在写作《华章 OpenGL ES 3.0编程指南(原书第2版)》时,示例程序已在iOS7、Android4.3NDK、Android4.3SDK、Windows(OpenGLES3.0Emulation)和UbuntuLinux上编译和测试过。该网站提供了任何必要工具的下载链接。
  致谢Acknowledgements
  我要感谢AffieMunshi和DaveShreiner对《华章 OpenGL ES 3.0编程指南(原书第2版)》第1版做出的巨大贡献,非常感谢BudiPurnomo和我一起将《华章 OpenGL ES 3.0编程指南(原书第2版)》更新到OpenGLES3.0。我还要感谢多年来一起工作的同事,他们对我在计算机图形学、OpenGL和OpenGLES上的教育给予了许多帮助。需要感谢的人很多,无法一一列出,特别要感谢ShawnLeaf、BillLicea-Kane、MauriceRibble、BenjLipchak、RogerDescheneaux、DavidGosselin、ThorstenScheuermann、JohnIsidoro、ChrisOat、JasonMitchell、DanGessel和EvanHart。
  我要特别感谢我的妻子Sofia,感谢她在我忙于《华章 OpenGL ES 3.0编程指南(原书第2版)》时对我的支持。我还要感谢我的儿子Ethan,他出生于《华章 OpenGL ES 3.0编程指南(原书第2版)》写作期间,他的笑声每天都给我带来欢乐。
  ——DanGinsburg
  我要向DanGinsburg致以深深的谢意,感谢他给我提供机会为《华章 OpenGL ES 3.0编程指南(原书第2版)》做出贡献。感谢我的经理CallanMcInally和AMD所有同事对我的支持。我还要感谢过去的教授——JonathanCohen、SubodhKumar、Ching-KuangShene和JohnLowther,感谢他们带我进入计算机图形和OpenGL的世界。
  我要感谢父母和姐妹无条件的爱。特别感谢我了不起的妻子——LianaHadi,她的爱和支持帮助我完成了这个项目。感谢我的女儿MichelleLo和ScarlettLo,她们是我生命中的阳光。
  ——BudiPurnomo
  我们都要感谢NeilTrevett为《华章 OpenGL ES 3.0编程指南(原书第2版)》作序,并从Khronos发起人委员会获得批准,允许我们在附录B中使用来自OpenGLES着色语言规范的文本以及OpenGLES3.0参考卡片。特别感激评阅人宝贵的反馈——MauriceRibble、PeterLohrmann和EmmanuelAgu。我们还要感谢《华章 OpenGL ES 3.0编程指南(原书第2版)》第1版的技术评审——BrianCollins、ChrisGrimm、JeremySandmel、TomOlson和AdamSmith。
  对Addison-Wesley的编辑LauraLewin,我们亏欠她太多了,她对《华章 OpenGL ES 3.0编程指南(原书第2版)》创作的每个方面都给予了很多帮助。Addison-Wesley的许多人都对《华章 OpenGL ES 3.0编程指南(原书第2版)》的编辑做出了宝贵的贡献,对此我们深深感激,这些人包括DebraWilliamsCauley、OliviaBasegio、SheriCain和CurtJohnson等。
  我们要感谢第1版的读者,他们报告书中的错误并改进样板代码,对我们的帮助很大。特别要感谢读者JavedRabbaniShah,他用Java将OpenGLES3.0样板代码移植到Android4.3SDK中。他还帮助我们进行AndroidNDK的移植,并解决了许多设备特定问题。我们感谢JarkkoVatjus-Anttila提供LinuxX11移植,EduardoPelegri-Llopart和DarrylGough将第1版的代码移植到BlackBerryNativeSDK中。
  深深感谢OpenGLARB、OpenGLES工作组和所有对OpenGLES开发做出贡献的人。



其他推荐