图形1.4PC手机图形API介绍
基础概念
图形API
- 是一个图形库,用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序接口(API),针对GPU。
应用端
- 我们自己的程序端
图元
- 要渲染的几何物体、形状
纹理
- 可以理解为贴图,opengl es中纹理就是图片的另一种叫法
纹素
- 纹理的基础单元(纹理的像素)
顶点数组
- 顶点是组成图元的各个顶点的坐标数据(vertex),这些坐标数据可以一起存到要给内存数组中,这就是顶点数组
顶点缓冲区
- 显存中专门分配一块显存来存储这个顶点数组,这个显存就是顶点缓冲区
顶点着色器
片元着色器
主流图形API
DirectX(windows)
Opengl(windows,linux,mac)
Opengl ES(移动设备——手机、oculus)
- Opengl ES2.0/3.0是可编程图形管线(vs、fs),1.x是固定管线
Opengl ES3.0新功能
兼容性
- gles 3.0是向后兼容的(2.0的程序可以在3.0中使用)
新特性
- 阴影贴图、体渲染、gpu粒子动画、几何形状实例化、纹理压缩、gamma矫正
- 适应嵌入系统的局限性
渲染管线
- 移除alpha测试
- 片段着色器可抛弃片段,因此alpha测试可以在fs中进行
- 移除逻辑操作(LogicOp)
- 很少使用
- 移除alpha测试
Shader编写
版本声明
#version 300 es//声明为指定使用Opengl ES3.0版本 //不添加版本声明或使用#version 100 es 指定使用ES2.0 //(2.0是es中最先出的可编程管线,所以是100,为了匹配版本号,3.0跳到了300 es)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- 输入输出
- in,out,inout关键字取代attribute,varing
- gl_FragColor和gl_FragData删除了
- 片段着色器可以使用out声明字段输出
- 变量赋值
- 可以直接使用layout对指定位置变量赋值
- ```glsl
//shader中
layout (location = 1) uniform float a;
//应用端代码中
GLES30.glUniform1f(1,1f);
//2.0中必须使用如下形式
GLES20.glUniform1f(GLES20.glGetAttribLocation(program,"a"),1f)
骁龙Adreno对应ES版本型号
https://zh.wikipedia.org/wiki/Adreno
高通骁龙组件列表 - 维基百科,自由的百科全书 (wikipedia.org)
Adreno320开始支持OpenglES3.0
作业
- 支持Opengl es3.2的骁龙GPU型号有哪些
- Adreno420/430/5xx/6xx/7xx
- 如何看待Vulkan、
- 对Vulkan了解不多,最大的特点就是:更复杂,也更高性能,并且支持跨平台。这增加了它的学习成本和上手难度的同时,能更深入地控制硬件,达到对性能更极致的追求。