从零开始的技术美术之路(五)主流平台API

本篇参考B站视频 “技术美术百人计划”·霜狼_may
《Shader入门精要》·冯乐乐女神著;
《OpenGL ES 3.0编程指南》

硬件的东西自己确实看的少,平常写的一些着色器什么的也都是引擎封装好的,归根到底还是OpenGL/DirectX这些API上,而研究硬件可以得知有哪些机型支持什么样的API,帮助开发者选择市场更大的API接口。新视频里的PPT基本概括了内容,有些部分我个人觉得说法不妥,在文中会点出来,部分名词打上了链接,可以直接查询相关含义。

本篇主要用于自我复习,如有疑问或发现有什么错误,请多指教~


前言

1.电脑的工作原理:电脑是由各种不同的硬件组成,由驱动软件驱使硬件进行工作。所有软件工程师都会直接或间接使用驱动;
2.定义:是一个图形库,用于渲染2D,3D矢量图形的跨语言,跨平台的应用程序编程接口(API),针对GPU;


一.基础概念

1.应用端:即程序端,相对于opengl es,opengl,DirectX,我们属于应用端,使用这些东西去编写自己的代码,将其渲染出来;

2.图元:要渲染的几何物体或者形状,正方形图片,直线,点不管是什么,只要是想渲染到屏幕上,都可称作是图元;

3.纹理:通俗点,可理解为一张图片,在opengl es中纹理是图片另一种叫法(图片说法不严谨,具体可以参考上一篇主要讲纹理);

4.纹素:纹理的基础单元,也就是像素(这一点上,在《Shader入门精要》里有不同定义,个人比较倾向于两者并非同一种,纹素应该是构成纹理的基本单位恰如像素是构成图像的基本单位一般,像素是显示设备上的最小成像单位,最终的像素可以等于N个纹素,N可以取1)

5.顶点数组:顶点指的是图元各个顶点的坐标数据,这些坐标数据可以存到一个内存数组中,该数组称为顶点数组;

6.顶点缓冲区:在显存中专门分配一块显存来存储这个顶点数组,这个显存称为顶点缓冲区;

7.顶点着色器:流水线第一阶段,完全可编程的,通常用于实现顶点的空间变换,顶点的空间变换,顶点着色;

8.片元着色器:它的输入是从顶点着色器中输出的数据插值,输出是一个或多个颜色值;


二.DirectX,OpenGL,OpenGL ES

Khronos 定义了OpenGL微软自己定义了DirectX;
目前手机,不管是iOS还是安卓都支持OpenGL ES。
电脑:Windows系统两种都支持,Linux/Mac支持OpenGL

如下图,在1.0向2.0的时候没啥改变,在1.0到ES1.1时更改了一些方法(如:glBegin),在2.0/ES 1.1到ES 2.0时都增加了新的片元着色器去替代一些方法
在这里插入图片描述
历史发展如下图

在这里插入图片描述

OpenGL ES
相比于OpenGL ES 1.x系列的固定功能管线,OpenGL ES2.0和OpenGL ES3.0都是可编程图形管线。开发者可以自己编写图形管线中顶点着色器与片元着色器两个阶段的代码。

如下图OpenGL ES2.0中其开发流程为
准备图元->顶点着色器编辑->图元重组->光栅化->片元着色器编辑->三种测试->输出Frame Buffer
在这里插入图片描述
OpenGL ES 3.1
拿到Buffer缓存->顶点缓存池->顶点着色器->返回了解数据->光栅化->片元着色器->逐片元渲染->输出buffer

在这里插入图片描述

OpenGL ES不同点

1.兼容性:
3.0是可以兼容2.0的

2.新特性
采用阴影贴图,体渲染,基于GPU的粒子动画,几何形状实例化,纹理压缩,伽马校正等这些重要功能在2.0是没有的。3.0将其引入,同时继续适应嵌入系统的局限性。
3.渲染管线
3.0中移除了Alpha测试(ES 2.0)和逻辑操作(ES 1.x),片元着色器可以抛弃片段所以Alpha测试可在片元着色器中进行,逻辑操作则是因其较少使用;

4.着色器脚本编写
有几点比较大的变化:
(1)版本声明
必须在着色器脚本中使用#version 300es声明为指定使用OpenGLES3.0版本

#version 300 es
layout(location=0)in vec4 vPosition;
void main(){
     gl_Position = vPosition;
}

不添加版本声明或者使用#version 100 es声明版本则指定使用OpenGL ES 2.0.
(以往2.0刚出来可编程图形管线,版本声明为#version 100 es,后为了与版本号匹配,3.0的shader版本直接从100es跳到300es,故不存在200es
(2)输入输出
3.0新增in,out,inout关键字,用于取代attribute和varying关键字。同时gl_FragColor和gl_FragData被删除,片元着色器可使用out声明字段输出。
(3)变量赋值
3.0中可以直接使用layout对指定位置变量赋值,如:

shader脚本中
layout(location=1)uniform float a;

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

GLES30.glUniform1f(1,1f;

2.0中必须按以下形式赋值

GLES20.glUniform1f(GLES20,glGetAttribLocation(program,"a"),1f)

三.OpenGL ES 3.0新功能

OpenGl ES3.0加入许多新功能与特性,使得我们开发更加灵活与便捷。主要为:纹理,着色器,几何形状,缓冲区对象,帧缓冲区(内容较多,直接截图)

1.纹理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.着色器

在这里插入图片描述在这里插入图片描述

3.几何形状

在这里插入图片描述
4.缓冲区对象

在这里插入图片描述

5.帧缓冲区

在这里插入图片描述


骁龙Adreno对应ES版本型号

1.历史

Adreno由高通开发的SIP核GPU并用于自家的SOC,核心最初作为BitBoys从事GPU开发。
06年,BitBoys被ATI收购开设Imageon产品线。06年AMD收购ATI,09年1月,AMD出售Imageon予高通。随后,Imageon更名为Adreno。

2.Adreno各版本的API支持

  • 视频中的最后又提到从320开始支持3.0是因为320稳定,wiki上是302开始支持3.0;
  • 从420开始支持OpenGL ES 3.2,从505开始支持Vulkan1.0,405和420是计划支持,418和430是已计划支持。
  • 关于Vulkan,它是15年才发表的,Khronos将其称为“下一代OpenGL行动”,Vulkan针对实时3D程序设计,计划提供高性能与低CPU管理负担,虽然比起OpenGL它性能会更好些,但是目前大多数游戏仍是OpengL为主,改变API的话,将对游戏部分进行重新开发,工作量不会小。但这也并不代表Vulkan没有发展前途,在未来,应会有更多的手机厂商开发搭载支持Vulkan的机型,且也会有新的游戏项目采用Vulkan API去开发游戏,就如上古的flash游戏在技术变更的现状几乎入土,Vulkan有可能会取代OpenGL的地位,恰如Khronos的“下一代OpenGL行动”所言。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值