百人计划 图形1.4 PC手机图形API介绍
前言
电脑工作原理:电脑是有各种不同的硬件组成,由驱动软件驱使硬件进行工作。所有的如软件工程师都会直接或间接使用到驱动。
定义:是一个针对GPU的图形库,用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。
基础概念
应用端:即我们自己的程序端,相对用OpenGL ES,我们属于应用端。
图元:要渲染的几何物体、形状。
纹理:可以理解为一张图片,在OpenGL中纹理是图片的另一种叫法。
纹素:纹素是纹理的基本单位,但并不是像素。图像是由像素排列而成,纹理是由纹素排列表示。
顶点数组:顶点是指组成图元的各个顶点的坐标数据(在3D笛卡尔坐标中即下x,y,z坐标),这些坐标数据可以一起存到一个内存数组中,这个数组就叫做顶点数组。
顶点缓冲区:在显存中分配一块显存来存储这个顶点数组,这个显存就叫做顶点缓冲区。
顶点着色器:(暂时借鉴课代表的)
DirectX、OpenGL、OpenGL ES
Khronos定义了OpenGL,微软自定义了DriectX,目前手机,不管是IOS还是Android,都是支持OpenGL ES。
电脑:Windows系统支持DriectX和OpenGL,Linux/Max(Unix)系统支持OpenGL。
20世纪90年代:OpenGL开放、2000:OpenGL ES开放,知道现在OpenGL ES已经到了3.2版本、2005: OpenGL SC开放、2008:开放基层更高效计算的OpenGL、2014:开放SPIR,2015:Vulkan开放,更加高效的GPU使用效率。
OpenGL ES
相同点
相比于OpenGL ES 1.x系列的古董功能管线,OpenGL ES2.0和OpenGL ES3.0都是可编程图形管线。开发者可以自行编写图形渲染管线中的顶点着色器和片元着色器两个阶段的代码。
OpenGL ES渲染流程
2.0版本
首先模型准备,由顶点着色器去编辑,把这些点面进行图元重组,进行光栅化,经过片元着色器的编写,最后通过三种测试,输出到Frame Buffer中。
3.1版本
新拿到这些Buffer缓存,传到顶点池,传给顶点着色器,顶点着色器进行分布Tramsform和Feedback,进行一个返回。让我们去了解一些数据下一阶段是使用,下一阶段拿到这些数据使用,之后要去进行光栅化,光栅化之后是片元着色器的计算,之后进行逐片元渲染输入到FrameBuffer中。
不同点
兼容性:OpenGL ES 3.0是向后兼容OpenGL ES 2.0 的。
新特性:采用阴影贴图,体渲染(Volume rendering),基于GPU的动画,几何形状实例化。纹理压缩和伽马矫正等技术的重要功能在2.0都不具备。3.0将这些功能引入,同时继续适应嵌入系统的局限性。
渲染管线:3.0中移除了Alpha测试和逻辑操作(LogicOp)两部分,这两部分存在于OpenGL ES 2.0和OpenGL ES 1.x中。移除Alpha测试是因为片元着色器可能抛弃片段,因此Alpha测试可以在片元着色器中进行,移除逻辑操作(LogicOp)是因为他很少被使用。
着色器脚本编写:
着色器脚本的编写发生了比较大的变化:1、版本声明
2、输入输出(3.0中增加了in、out、inout关键字用来取代attribute和varing关键字,同时gl_FragColor和gl_FragData也删除了,片元着色器可以使用out声明字段输出)3、变量赋值(3.0中可以使用layout对指定位置的变量赋值)
作业
支持OpenGL ES 3.2的 骁龙AdrenoGPU有哪些?
Adreno是骁龙手机端的GPU框架,从Adreno302开始支持OpenGL ES 3.0、Adreno 405开始支持OpenGL ES 3.1、Adreno420开始支持OpenGL ES 3.2.
如何看待Vulkan?
Vulkan是OpenGL的后续产品,是一种多平台的API。可支持开发人员CAD工具、性能基准测试等高性能图形应用。是新一代大API,但在复杂度和维护难度上,Vulkan门槛更高。
发布评论