3. 图形处理器接口(已完成)

图形处理器接口(实际上通过第2章的内容可知,现代GPU大都包含两套API:一套是专门针对图形渲染的,如OpenGL等;而另一套是针对一般的并行计算,如CUDA或OpenCL等。本章以及本书大部分的内容都是指前者)大概是每个从事图形渲染相关工作的工程师都非常熟悉的概念了,大多数程序员开始学习渲染相关的知识的时候,都是从OpenGL或DirectX等这样的图形接口开始。经典的图形接口以光栅化为核心,以管线的方式分阶段处理整个渲染过程,其中在现代图形接口中,程序员能够以着色器的方式可编程地控制管线的一些阶段,因此某种程度上,有时候我们甚至直接称图形接口为渲染管线(然而这实际上并不准确,图形渲染中涉及的对帧缓存的一些后期操作并不能称为传统渲染管线的一部分。因此本书只有在讲述完全使用传统光栅化方式渲染的时候才会称其为渲染管线)。

一般计算机图形学相关的书籍都会有独立的一部分专门介绍渲染管线,然而它们当中的大部分主要都是围绕渲染管线的各个阶段做一般性描述,或者仅是从使用的角度讲解在程序中怎样调用图形接口进行渲染。然而实际情况是图形接口较其它一般程序接口要复杂得多,例如它要涉及到多个阶段,每个阶段有很多状态,内存结构及使用的复杂性等等因素,这使得很多程序员真正掌握图形接口的过程非常漫长。因此本书认为,讲解图形接口背后的工作机制,以及这些技术怎么被用于解决渲染问题十分关键。这不仅能够使读者更加透彻理解图形接口,同时,现代的渲染技术中,光栅化并不是一种独立的渲染技术,它还需要结合很多其它的方法一起实现整个渲染工作,所以更系统地理解图形接口而不仅仅是使用它们显得更加重要,例如在后处理中需要涉及很多对纹理的读和写操作,而在一般渲染管线着色器中,我们只是简单地使用采样器读取纹理的某个(重采样之后的)纹素。

所以,限于篇幅,本章不会讲解很多图形接口基础的知识,相反,它假设读者对图形接口具有一定的了解,而本章试图使您对这些概念会有更系统甚至完全地理解。本章在解释相关概念的时候以OpenGL(4.5版本)为准,关于OpenGL更多的知识请参考\cite{b:OpenGLProgrammingGuide:TheOfficialGuidetoLearningOpenGLVersion4.3, b:OpenGL4.5CoreProfile, b:TheOpenGLShadingLanguage}。