技美 百人计划 1.4PC手机图形API介绍

技美 百人计划 1.4PC手机图形API介绍

1.4PC手机图形API介绍

前言

电脑的工作原理:电脑是由不同的硬件组成,由驱动软件驱动硬件工作。所有的软件工程师都会直接或间接的使用到驱动

定义:是一个图形库,用于渲染2D,3D矢量图形的跨语言,跨平台的应用程序编程接口(API)针对CPU

基础概念

  • 应用端

    即我们自己的程序端,相对于Opengl es我们属于应用端, 应用端就是我们自己编写的程序,相对于,OPenGl DirectX OPenGlES 来说我们都是应用端

  • 图元

    要渲染的几何物体,或者形状,不如要渲染一个正方形的图片,就是一个图元,要渲染两天直线,这两条直线也是图元。只要想要渲染到屏幕上就可以说是图元

  • 纹理

可以理解为一张图片,在opengl es中纹理就是图片的另一种叫法

  • 纹素

纹理的基础单元,也就是像素

  • 顶点数组

顶点指的是组成图元的各个顶点的坐标数据(在3D笛卡尔坐标中即x,y,z坐标),这些坐标数据可以一起存到一个内存数组中,这个数组就叫做顶点数组

  • 顶点缓冲区

在显存中专门分配一块显存来储存这个顶点数组,这个显存就称为顶点缓存区

  • 顶点着色器
  • 片元着色器

DirectX、OpenGL、OpenGL ES 发展史

Khrons 定义了OpenGL ,微软自己定义了DirectX,目前手机不管是IOS还是Android,都支持OpenGL ES
电脑:Windows系统支持DirectX和OpenGL,Linux/Mac(Unix)系统支持OpenGL
请添加图片描述
OpenGl 的发展过程中,从1.0开始有一个分支,一个是OPenGL ES1.1,一个是OPenGL2.0,最后都是OPenGL ES2.0
在中都是增加了一些片元着色器,替代了一些原先的方法

20 世纪 90 年代
OpenGL 开放
2000 年
OpenGL ES 开放
直到现在的年代,OpenGL ES 已经到了 3.2 版本
2005 年
OpenGL SC 开放
2008 年
开放基层更高效计算的 OpenCL
2014 年
开放 SPIR
2015 年
Vulkan 开放,更加高效的 GPU 使用效率

OpenGL ES

相同点
相比于OpenGL ES1.x系列的古董功能管线,OpenGL ES2.0 和OpenGL ES 3.0都是可编程渲染管线。开发者可以自己编写图形管线中的顶点着色器和片元着色器两个阶段的代码
请添加图片描述

OpenGL ES渲染流程

2.0版本

首先是模型准备,然后由顶点着色器去编辑,然后把这些点面进行图元重组,然后进行光栅化,然后经过片元着色器的编写,最后通过三种测试,最后都输出到 Frame Buffer中

3.0版本

新拿到这些Buffer 缓存,然后传到顶点池,然后传给顶点着色器,然后顶点着色器进行分布Transform的Feedback,进行一个返回,让我们去了解一些数据给下一阶段使用,下一阶段拿到这些数据使用之后要去进行光栅化,光栅化之后就是片元着色器的计算,之后进行逐片元渲染,然后输出到Frame Buffer中

不同点

1.兼容性
OpenGL ES 是向后兼容 OpenGL ES 2.0的。也就是说使用2.0编写的应用程序可以在3.0中继续使用
2,新特性
采用阴影贴图,体渲染(volume rendering),基于GPU的例子动画,几何形状实例化,纹理压缩和伽马矫正等技术的重要功能在2.0都不具备。3.0将这些功能引入,同时继续适应嵌入系统的局限性。
3,渲染管线
3.0中移除了Alpha测试和逻辑操作(LogincOp)两部分,这两部分存在于OpenGL ES 2.0和OpenGL ES1.x中
移除Alpha测试是因为片元着色器可能抛弃片段,因此Alpha测试可以在片段着色器 中进行 移除逻辑操作(LogicOp)是因为它很少被使用
4,着色器脚本编写
着色器脚本的辨析发生了较大的变化,其中几点为
1)版本声明
必须在着色器脚本中使用#version 300 es 声明为指定使用 OpenGl ES 3.0版本

#version 300 es

而不添加版本声明或者使用 #version 100 es 声明版本则指定使用 OpenGl ES 2.0
2)输入输出
3.0中新增了 in,out ,inout关键字,用来取代attribute和varying关键字。同时gl_FragColor和gl_FragData也删除了,片段着色器可以使用out 声明字段输出
3)变量赋值
3.0中可以直接使用layout对指定位置的变量赋值例如

layout(location=1)uniform float a;

代码中 直接写上对应的layout的值就可以赋值

GLES30.glUniformlf(11f;

而2.0中必须使用如下赋值

GLES20.glUnformlf(GLES20.glGetAttribLocation(program,"a",1f

OpenGL ES 3.0新功能,

这块有点多看了一遍也记不太住,碰到了再查吧,这里暂时找了个其他人做的总结

骁龙Adreno 对应的OpenGL ES版本

Adreno 是骁龙手机端的GPU框架。
从 Adreno 302 开始,支持 OpenGL ES 3.0。
从 Adreno 405 开始,支持 OpenGL ES 3.1。
从 Adreno 420 开始,支持 OpenGL ES 3.2。

Adreno 305、306、320、330、405、420 支持 OpenGL ES 3.0 版本

Adreno 320 开始支持 OpenGL ES 3.0 是指的稳定支持

关于 Vulkan

Vulkan 被视作是 OpenGL 的后续产品。 它是一种多平台 API,可支持开发人员准备游戏、CAD 工具、性能基准测试等高性能图形应用。 它可在不同的操作系统(比如 Windows*、Linux* 或 Android*)上使用
Vulkan相当于OpenGl 的下一代产品用来替代OpenGl但是短期应该还不会。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值