Chapter 1. Introduction

学习目标

图形管道是什么以及和OpenGL的关系
OpenGL 的起源以及它如何成为今天的样子
一些基本概念

OpenGL and the Graphics Pipeline

产品高效大规模的关键是可扩展性和并行性。
工厂造车的时候,流水线上,一个工人装引擎另一个工人装门,还有工人装轮子。(不是很恰当)

发送到OpenGL中的命令会排队,但是也会重叠,前一个任务的末尾和后一个任务的开始。其实这里我理解类似于处理器的流水线,取值、译码、执行、访存、写回同时进行。
OpenGL里面会有很多重复性工作,类似于判断像素颜色,这些工作彼此不会互相影响。OpenGL会分解你给他的任务成这种基础元素,这样就可以并行运行了。

OpenGL提供了底层图形子系统和应用程序之间的抽象层(abstraction layer)。这个层级的高低很重要,太高了程序员没办法优化程序,太低了可能又过度关心底层实现。

现代GPU有很多名为shader cores的小的计算单元,可以运行mini程序叫shaders。这些计算单元吞吐量很小也不具备类似于无需执行分支预测的高级功能,但是每个GPU有几十个到几千个这样的单元,他们可以一起执行大量的工作。
图形系统分为多个阶段,每个阶段由着色器(shader)或固定功能的处理块来执行,简化pipeline如下图所示:

上图中圆角的是固定功能的处理块,方角的是可编程的Shader。在实践中,部分或全部固定功能阶段也可能在着色器代码中实现,只是开发者不提供该代码,而是 GPU 制造商通常将其作为驱动程序、固件或其他系统软件的一部分提供,也就是说,固定部分也可能只是软件而不是硬件,只不过这部分是对开发者不透明的。

The Origins and Evolution of OpenGL

没什么好说的,截个版本发布时间表吧

Core Profile OpenGL

1992年的时候,大部分图形渲染都是软件渲染。后来发展起来了,需要向前兼容支持,导致引入新的特性也很难。这个问题很头疼,所以2008年的时候,分成了两个profile,core profile去除了很多legacy的特性。core profile比compatibility profile的规范简短了几百页,compatibility profile向前支持最早的版本(1.0)。显而易见,core profile的性能要高很多。

这本书只包含了core profile。

Primitives, Pipelines, and Pixel

OpenGL模型是一个pipeline,用户调用命令时,数据进入pipeline的前端,并随着这些Shader和固定功能的处理块一步一步向前,在这个过程中他们可能会拾取bufferstextures中的数据。

OpenGL 中渲染的基本单位称为Primitives(基元)。OpenGL 支持多种类型的基元,但三种基本的可渲染基元类型是点、线和三角形。屏幕上看见的所有的东西都是点、线和三角形的集合。应用程序通常会将复杂的表面分解为非常多的三角形,并将它们发送到 OpenGL,在那里使用称为光栅器(rasterizer)的硬件加速器进行渲染。光栅器硬件可以直接把三角形光栅化,而其他复杂的图形可能是由driver中的硬件或者软件光栅化的。

Vertex(顶点)是坐标空间中一个简单的点,我们主要考虑三维坐标空间。绘制图形的pipeline主要分为两个部分。
第一部分,通常被称为the front end,处理vertices和Primitives,最终将它们形成点、线和三角形这三种Primitives。这些点、线和三角形将传递给光栅化器(rasterizer)。在经过光栅化器后,几何图形已从本质上的矢量表示转换为大量独立像素。这些被移交给back end(后端),包括depth testing(深度测试)、stencil testing(模板测试)、fragment shading(片段着色)、blending(混合)和输出图像的更新。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

大纲

Share the Post:
滚动至顶部