第2章 OpenGL图像管线
OpenGL是整合软硬件的多平台2D和3D图形API。使用OpenGL需要GPU支持足够新版本的OpenGL(如第1章所述)。
在硬件方面,OpenGL提供了一个多级图形管线,可以使用一种名为GLSL的语言进行部分编程。
软件方面,OpenGL的API是用C语言编写的,因此API调用直接兼容C和C++。对于十几种其他的流行语言(Java、Perl、Python、Visual Basic、Delphi、Haskell、Lisp、Ruby等),OpenGL也有着稳定的库(或“包装器”),它们具有与C语言库几乎相同的性能。本书使用的C++是目前流行的OpenGL语言。使用C++时,程序员应编写(编译后)在CPU上运行的代码并包含OpenGL调用。当一个C++程序包含OpenGL调用时,我们将其称为C++/OpenGL应用程序。C++/OpenGL应用程序的一个重要任务是让程序员的GLSL代码运行于GPU上。
基于C++的图形应用概览如图2.1所示,其中软件部分以底色突出显示。
图2.1 基于C++的图形应用概览
在后面的编码中,一部分用 C++实现,进行 OpenGL 调用;另一部分用 GLSL 实现。C++/ OpenGL应用程序、GLSL模块和硬件一起用来生成3D图形输出。当应用程序完成之后,最终用户直接与C++应用程序交互。
GLSL是一种着色器语言。着色器语言主要运行于GPU上,在图形管线上下文中。还有一些其他的着色器语言,如HLSL,用于微软的3D框架DirectX。GLSL是与OpenGL兼容的专用着色器语言,因此我们在编写C++/OpenGL应用程序代码之外,需要用GLSL编写着色器代码。
本章其余内容将简单地介绍OpenGL管线的内容。读者不需要详细理解所有细节,对各阶段如何工作有大致印象即可。