OpenGL底层实现原理

一、什么是OpenGL

         OpenGL是Open Graphics Library的缩写,是个定义了一个跨编程语言、跨平台的编程接口的标准,显卡通常有OpenGL的实现,不同显卡上的OpenGL实现也不一定相同,OpenGL标准不是平台相关的,所以同一个程序可能在不同的显卡上运行。

       这个首先说明一点,OpenGL并不是一个API库,而是一个标准,一个规范。这个规范严格的规定了每个函数要如何执行、以及函数的输出值,至于每个函数具体的实现过程、是由各个厂商的开发者,也就是OpenGL库的开发者根据自己的硬件特性开发出相应的API。市场上,OpenGL大都是显卡厂商、GPU厂商、以及浏览器厂商比如Mozilla、Google等尖端科技公司来实现。

二、OpenGL与GPU

      OpenGL主要通过GPU而不是CPU进行图形绘制,这是由于两者架构不一样所致,如下图所示:

OpenGL底层实现原理

       其中,黄色是控制器,绿色是计算单元,红色是缓存;

       在这里需要先提到 CPU 和 GPU 的区别,它们的功能都是用于计算,也都是由很多核组成,区别在于 CPU 的核比较少,但是单个核的计算能力比较强,而 GPU 的核很多,但是每个核的计算能力都不算特别强。目前 GPU 的主要工作是用于生成图片(现在也有通过 GPU 进行高性能运算_并行运算,但是在这里不属于讨论的范围),原因就是图片是由很多像素组成,每个像素都包含有颜色、深度等信息,而为了得到这些信息数据,针对每个像素点的计算,是可以通过统一的算法来完成。GPU 就擅长处理针对这种大规模数据,使用同一个算法进行计算。而这个算法,就是使用 GLSL 写成 Shader,供 GPU 运算使用。

      OpenGL的实现,是对数学思想淋漓尽致的发挥,计算机图形学的背后就是数学,也就是说GPU在图形绘制上性能更加优越。但是,我们一般进行图形绘制,少不了CPU的参与。计算机图形的图形系统需要CPU提供下基本的参数和配置,然后再GPU内部实现图形的渲染,再传输到前端。

OpenGL底层实现原理

三、OpenGL渲染流程

GPU上的渲染流程

      OpenGL利用GPU进行图形绘制,主要做了两件事,1.配置图元的位置,2.配置图元的颜色,这两者分别通过顶点着色器和图元着色器这一对方法,操作GPU进行像素的位置和色彩数值计算,从而实现图形绘制。大体流程如下:

基本的流程如下图所示:

OpenGL底层实现原理

 

名词解释:

顶点数据:buffer是放置数据的地方,老外起的名字

顶点着色器:顶点数据传递给着色器,着色器通过glsl对顶点进行编辑

顶点变换:顶点数据有时需要矩阵变换

图元装配:顶点信息根据画图的需要,将一些点连接起来

光栅化:连接顶点的线段上用点拼接起来,三角形填充也用点

片元着色器:将所有的点通过片元着色器填充颜色或纹理图片

 

OpenGL在CPU和GPU上的架构

      虽然OpenGL在图形绘制实现时是基于GPU进行,但是调用OpenGL的API,却是在CPU上进行,这里简单介绍下OpenGL在计算机上的实现,希望大家有个更加深刻的认识。

 

OpenGL的实现可以分为服务端和客户端两部分,其中服务端是指基于GPU的算法实现,而客户端是指算法的编写和编译。这里的客户端是指代码编译环境,主要针对的是CPU,而服务端是指代码执行环境,指的是GPU。OpenGL的跨平台主要体现在,在客户端A编写编译的代码,除了在本地服务端A的GPU下可以运行,到了其他服务端B的GPU环境下,也能够正常运行。因为他们都遵循同一个OpenGL接口标准。