【TA-霜狼_may-《百人计划》】1.4 PC手机图形API介绍
1.4.1 基础概念
- 应用端:程序本身,相对于opengl es, 我们本身程序属于应用端
- 图元:要渲染的几何物体,或者形状。任何一个正方形或者直线这些元素都是一个图元。
- 纹理:通俗点理解,可以理解为一张图片,在opengl es中纹理就是图片的另一种叫法。
- 纹素:纹理的基础单元
- 顶点数组:顶点指的是组成图元的各个顶点的坐标数据(在3D笛卡尔坐标中即x,y,z坐标),这些坐标数据可以一起存到一个内存数组中,这个数组就叫做顶点数组。
- 顶点缓冲区:在显存中专门分配一块区域用以存储顶点数组,这块显存区域就称为顶点缓冲区。
1.4.2 DirectX, OpenGL, OpenGL ES
Khronos定义了OpenGL,微软定义了DirectX
- 手机端:ios和android都支持OpenGL ES;
- 电脑:Windows系统支持DirectX 和 OpenGL, Linux/Mac系统支持OpenGL。
Khronos Open Standards for Graphics and Compute
- 1990’s OpenGL
- 2000’s OpenGL|ES
- 2005 OpenGL|SC
- 2008 OpenCL
- 2014 SPIR
- 2015 Vulkan
OpenGL ES
OpenGL ES 1.x系列的固定功能管线
OpenGL ES 2.0、3.0 都是可编程图形管线。
开发者可以自己编写图形管线中的顶点着色器和片段着色器两个阶段的代码。
渲染流程示意图:
不同点
- 兼容性
3.0向下兼容2.0; - 新特性
阴影贴图、体渲染、基于GPU的粒子动画、几何形状实例化、纹理压缩和伽马校正等技术的重要功能在2.0中不具备。3.0引入上述功能并且继续适应嵌入系统的局限性。 - 渲染管线
3.0中移除了Alpha测试和逻辑操作两部分,Alpha测试可以在片段着色器中进行,逻辑操作则是因为很少被使用。 - 着色器脚本编写
(1) 版本声明
必须在着色器脚本中使用#version 300 es声明为指定使用OpenGL ES 3.0版本。而不添加版本声明或者使用#version 100 es声明版本则指定使用OpenGL ES 2.0。
(2) 输入输出
3.0新增了in,out,inout关键字,用以取代attribute和varying关键字。
同时删除gl_FragColor和gl_FragData了,片段着色器可以使用out声明字段输出。
(3) 变量赋值
3.0 可以直接使用layout对指定位置的变量赋值。
1.4.3 OpenGL ES 3.0新功能
现在还看不懂,有个印象,以后回来再看吧。
纹理
着色器
几何形状
缓冲区对象
帧缓冲区
1.4.4 骁龙Adreno对应ES版本型号
Adreno是由高通开发的SIP核GPU并用于其自家的SoC,该核心最初作为BitBoys从事GPU开发工作。
2006年,BitBoys被ATI收购开设Imageon产品线。同年AMD收购ATI。2009年1月,AMD出售Imageon给高通,随后Imageon更名为Adreno。
近年来骁龙高端处理器版本对应的Adreno
骁龙835——Adreno540
骁龙845——Adreno630
骁龙850——Adreno630
骁龙855——Adreno640
各版本Adreno对应的OpenGL ES版本
Adreno130——OpenGL ES 1.1
Adreno200-225——OpenGL ES 2.0
Adreno302-330——OpenGL ES 3.0
Adreno405、418——OpenGL ES 3.1
Adreno420、430——OpenGL ES 3.2
Adreno505、506、508——OpenGL ES 3.2
也就是说骁龙8代以上的CPU都已经智齿OpenGL ES 3.2了。
Vulkan
新一代的API,同样是由Khronos公司牵头开发,旨在成为下一代的OpenGL。Vulkan能够更好地利用CPU的多线程能力,并且通过暴露GPU底层功能的方法,提供了大量的控制手段。再加上高可预测性行为使得图形效果更优。但是针对GPU高负荷的现有程序,如果想要通过OpenGL转向Vulkan从而实现性能的提升是无法达成的。重点在于针对CPU的优化。