描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111575115丛书名: 华章程序员书库
24位并行技术专家联袂编写,分享业界前沿的OpenACC开发策略和实践经验
以性能为导向,从标准解析、性能优化到程序移植,满足未来的并行和扩展需求
本书由高性能技术专家Rob Farber领衔编著,24位来自世界各地的业界翘楚分享了他们的一线经验。你不仅能够从中学到OpenACC的基础知识和编程技巧,还能够通过多领域的应用案例快速掌握实战方法。其中涉及PGI和Cray等编译器的使用,以及在多核CPU和GPU等设备上的运行和性能分析。此外,本书网站上还提供了大量实用代码,涵盖科学、商业、大数据和实时系统等热门领域OpenGL图形系统是图形硬件的一种软件接口(GL表示Graphics Library,即图形库)。它使得用户可以创建交互式的程序以产生运动的三维对象的颜色图像。通过OpenGL,我们可以使用计算机图形学技术产生逼真的图像,或者通过一些虚构的方式产生虚拟的图像。这本指南将告诉你如何使用OpenGL图形系统进行编程,得到你所期望的视觉效果。
作为如今世界知名的图形学标准接口,OpenGL的*版本(OpenGL 4.5)显著提升了应用程序的运行效率、灵活性和性能。OpenGL 4.5是一个非常成熟而且稳健的平台,可以实现高质量的计算机图像和交互程序的开发工作,并且使用2D和3D物体、彩色图像以及着色器的方式来表达整个场景。
本书详细介绍了OpenGL 4.5(包括4.4、SPIR-V和扩展功能),以及OpenGL着色语言的方方面面,能有效地帮助你编写和维护OpenGL代码。
本版新增OpenGL特性包括:
– 涵盖OpenGL 4.5的直接状态访问(DSA)特性,这是对OpenGL开发模式及应用程序访问对象的方式的一次重大变革。
– 有关着色器的功能和GPU处理过程的深入讨论以及案例讲解,而越来越多的程序功能正趋向于在图形处理器上直接实现。
– 根据开发者社区的反馈和建议,增加了一些关键性功能的介绍和案例。
– 更新了附录部分,包含*的OpenGL库、相关API、函数、变量、格式,以及调试和性能评价的方法。
第1章 OpenGL概述 1
1.1 什么是OpenGL 1
1.2 初识OpenGL程序 2
1.3 OpenGL语法 6
1.4 OpenGL渲染管线 7
1.4.1 准备向OpenGL传输数据 8
1.4.2 将数据传输到OpenGL 8
1.4.3 顶点着色 9
1.4.4 细分着色 9
1.4.5 几何着色 9
1.4.6 图元装配 9
1.4.7 剪切 9
1.4.8 光栅化 9
1.4.9 片元着色 10
1.4.10 逐片元的操作 10
1.5 个程序:深入分析 11
1.5.1 进入main()函数 11
1.5.2 OpenGL的初始化过程 12
1.5.3 次使用OpenGL进行渲染 21
第2章 着色器基础 24
2.1 着色器与OpenGL 25
2.2 OpenGL的可编程管线 25
2.3 OpenGL着色语言概述 27
2.3.1 使用GLSL构建着色器 27
2.3.2 存储限制符 33
2.3.3 语句 36
2.3.4 计算的不变性 40
2.3.5 着色器的预处理器 42
2.3.6 编译器的控制 44
2.3.7 全局着色器编译选项 44
2.4 数据块接口 45
2.4.1 uniform块 45
2.4.2 指定着色器中的uniform块 46
2.4.3 从应用程序中访问uniform块 47
2.4.4 buffer块 53
2.4.5 in/out块、位置和分量 53
2.5 着色器的编译 54
2.6 着色器子程序 59
2.6.1 GLSL的子程序设置 59
2.6.2 选择着色器子程序 60
2.7 独立的着色器对象 62
2.8 SPIR-V 64
2.8.1 选择SPIR-V的理由 64
2.8.2 SPIR-V与OpenGL 66
2.8.3 使用GLSL在OpenGL中生成SPIR-V 67
2.8.4 Glslang 69
2.8.5 SPIR-V中包含了什么 69
第3章 OpenGL绘制方式 70
3.1 OpenGL图元 70
3.1.1 点 71
3.1.2 线、条带与循环线 72
3.1.3 三角形、条带与扇面 72
3.2 OpenGL缓存数据 75
3.2.1 创建与分配缓存 75
3.2.2 向缓存输入和输出数据 77
3.2.3 访问缓存的内容 81
3.2.4 丢弃缓存数据 86
3.3 顶点规范 86
3.3.1 深入讨论VertexAttribPointer 87
3.3.2 静态顶点属性的规范 90
3.4 OpenGL的绘制命令 92
3.4.1 图元的重启动 99
3.4.2 多实例渲染 102
第4章 颜色、像素和片元 112
4.1 基本颜色理论 113
4.2 缓存及其用途 114
4.2.1 缓存的清除 116
4.2.2 缓存的掩码 117
4.3 颜色与OpenGL 118
4.3.1 颜色的表达与OpenGL 118
4.3.2 平滑数据插值 119
4.4 片元的测试与操作 121
4.4.1 剪切测试 122
4.4.2 多重采样的片元操作 123
4.4.3 模板测试 124
4.4.4 模板的例子 125
4.4.5 深度测试 127
4.4.6 融混 129
4.4.7 逻辑操作 133
4.4.8 遮挡查询 134
4.4.9 条件渲染 138
4.5 多重采样 139
4.6 逐图元的反走样 141
4.6.1 线段的反走样 142
4.6.2 多边形的反走样 143
4.7 像素数据的读取和拷贝 143
4.8 拷贝像素矩形 145
第5章 视口变换、裁减、剪切与反馈 147
5.1 观察视图 148
5.1.1 视图模型 148
5.1.2 相机模型 148
5.1.3 正交视图模型 151
5.2 用户变换 152
5.2.1 矩阵乘法的回顾 153
5.2.2 齐次坐标 155
5.2.3 线性变换与矩阵 157
5.2.4 法线变换 167
5.2.5 OpenGL矩阵 168
5.3 OpenGL变换 170
5.3.1 高级技巧:用户裁减和剪切 172
5.3.2 OpenGL变换的控制 173
5.4 transform feedback 174
5.4.1 transform feedback对象 175
5.4.2 transform feedback缓存 176
5.4.3 配置transform feedback的变量 179
5.4.4 transform feedback的启动和停止 185
5.4.5 transform feedback的示例:粒子系统 187
第6章 纹理与帧缓存 192
6.1 纹理综述 193
6.2 基本纹理类型 194
6.3 创建并初始化纹理 195
6.4 指定纹理数据 200
6.4.1 显式设置纹理数据 200
6.4.2 从缓存中加载纹理 202
6.4.3 从文件加载图像 203
6.4.4 获取纹理数据 206
6.4.5 纹理数据的排列布局 207
6.5 纹理格式 211
6.5.1 内部格式 211
6.5.2 外部格式 214
6.6 压缩纹理 216
6.7 采样器对象 218
6.8 纹理的使用 220
6.8.1 纹理坐标 222
6.8.2 排列纹理数据 225
6.8.3 使用多重纹理 227
6.9 复杂纹理类型 229
6.9.1 3D纹理 229
6.9.2 纹理数组 230
6.9.3 立方体映射纹理 231
6.9.4 阴影采样器 236
6.9.5 深度-模板纹理 237
6.9.6 缓存纹理 238
6.10 纹理视图 240
6.11 滤波方式 243
6.11.1 线性滤波 243
6.11.2 使用和生成mipmap 245
6.11.3 计算mipmap层次 249
6.11.4 mipmap细节层次的控制 250
6.12 高级纹理查询函数 250
6.12.1 显式的细节层次控制 250
6.12.2 显式的梯度设置 251
6.12.3 带有偏移参数的纹理获取函数 251
6.12.4 投影纹理 252
6.12.5 在着色器中执行纹理查询 253
6.12.6 纹素收集 255
6.12.7 组合功能的特殊函数 255
6.13 无绑定纹理 256
6.13.1 纹理句柄 256
6.13.2 纹理驻留 257
6.13.3 采样无绑定纹理 258
6.14 稀疏纹理 259
6.14.1 稀疏纹理的数据提交 259
6.14.2
前 言
OpenGL图形系统是图形硬件的一种软件接口(GL表示Graphics Library,即图形库)。它使得用户可以创建交互式的程序以产生运动的三维对象的颜色图像。通过OpenGL,我们可以使用计算机图形学技术产生逼真的图像,或者通过一些虚构的方式产生虚拟的图像。这本指南将告诉你如何使用OpenGL图形系统进行编程,得到你所期望的视觉效果。
本书的主要内容本书中包含以下章节:
第1章对OpenGL可以完成的工作进行了概览。它还提供了一个简单的OpenGL程序并解释了一些本质性的编程细节,它们可能会用于后续的章节中。
第2章讨论了OpenGL中主要的特性—着色语言和SPIR-V,并介绍了它们在应用程序中的初始化和使用方法。
第3章介绍了使用OpenGL进行几何体绘制的各种方法,以及一些可以让渲染更为高效的优化手段。
第4章解释了OpenGL对于颜色的处理过程,包括像素的处理、缓存的管理,以及像素处理相关的渲染技术。
第5章给出了将三维场景表现在一个二维计算机屏幕上的操作细节,包括各种几何投影类型的数学原理和着色器操作。
第6章讨论了将几何模型与图像结合来创建真实的、高质量的三维模型的方法。
第7章介绍了计算机图形的光照效果模拟方法,主要是这类方法在可编程着色器中的实现。
第8章介绍了使用可编程着色器生成纹理和其他表面效果的方法细节,从而增强真实感和其他的渲染特效。
第9章解释了OpenGL管理和细分几何表面的着色器功能。
第10章介绍了在OpenGL渲染流水线中使用着色器进行几何体图元修改的一种特殊技术。
第11章介绍了使用OpenGL帧缓存和缓存内存实现高级渲染技术和非图形学应用的相关方法。
第12章介绍了的着色器阶段,将通用计算的方法融合到OpenGL的渲染管线当中。
此外,我们也提供了一系列作为参考的附录内容。
附录A介绍了本书示例程序中用到的一些第三方支持库。GLFW是可移植的,它可以用来实现更简短也更加可读的代码示例。而GL3W负责处理应用程序与OpenGL函数之间的绑定关系。
附录B介绍了OpenGL体系中的其他API,包括用于嵌入式和移动平台系统的OpenGL ES,以及用于Web浏览器内的交互式3D应用程序的WebGL。
附录C提供了有关OpenGL着色语言的详细参考文档。
附录D列出了OpenGL维护的所有状态变量,并介绍了获取其值的方法。
附录E介绍了矩阵变换相关的一些数学方法。
附录F对于OpenGL中所用到的浮点数格式做出了概述。
附录G介绍了OpenGL中的调试特性。
附录H给出了有关uniform缓存的使用的参考文档,其中使用了OpenGL定义的标准内存布局。
性能至上!OpenACC是为未来的高度并行而设计的,在现有代码中增加指令比用一门新语言重写代码简单得多。本书将帮助你精巧地设计各类应用,充分释放程序性能,不仅从当下的并行系统中受益,而且在之后的几十年中都将持续受益。
—— Michael Wolfe,OpenACC技术委员会主席
过去十年,伴随着异构系统的突飞猛进,众多科研团队都开始在大型超级计算机上编写程序,而OpenACC正是实现加速的*开放编程标准。本书包含丰富的OpenACC开发策略和实践经验,对于广大程序员而言极富参考价值。
—— Jeffrey S. Vetter,橡树岭国家实验室
评论
还没有评论。