2D情况下的渲染比较简单,无论软件渲染还是硬件加速,本质上都是生成图像的像素阵列,只不过一个是由CPU来计算的,而另一个是由GPU来计算的,当然,对于硬件加速的情况,也不是完全用不到CPU,在这种情况下,CPU主要充当一个翻译角色,将数学,几何模型按照GPU的要求翻译为其可以识别的指令和数据。2D渲染的流程大致如下:
运行在X上的2D程序,都将绘制请求发送给X服务器,由X服务器来完成绘制,但是对于3D图形的绘制,X因考古用需要通过套接字向X服务器传递的数据量比较大,这种机制严重影响了图形渲染的效率,为了解决效率问题,X的开发者设计了DRI机制,即X应用不再将绘制请求发送给X服务器了,而是由应用自行绘制。
在嵌入式平台上,OPENGL的实现者是GPU的原厂,比如MALI GPU的OpenGL由于ARM提供,而PowerVR GPU的OPENGL层则要由imagation提供,那么在桌面上呢?
在Linux桌面上,OpenGL的实现是MESA实现的GPU PIPELINE:
上帝视角看GPU(1):图形流水线基础_哔哩哔哩_bilibili
pipeline可完全由软件实现(CPU),也可全部由硬件实现(GPU),或者二者混合,这完全取决于GPU的能力,对于GPU没有3D计算能力的,则PIPELINE完全由软件实现,比如下图中的,每一个PIPELINE阶段均有CPU负责渲染。
mesa的defalut pipeline stage:
RADEON GPU的PIPELINE
针对各类GPU加速的pipeline stage
途中可以看到INTEL集成显卡 INTEL HD Graphics的Pipeline实现:
通过命令查看:
glxinfo | grep "OpenGL version"
strace -f -e trace=open,openat glxinfo