首页 > 编程知识 正文

手机opengl和vulkan哪个好,usb2.0和3.0通用吗

时间:2023-05-04 07:16:09 阅读:62677 作者:2588

另一方面,与OpenGL ES 1.x系列固定功能管线相比,OpenGL ES 2.0OpenGL ES 3.0均为可编程图形管线开发人员可以自行编写图形管线的两级代码: 3358www.Sina.com/和顶点着色器

二、区别1 .兼容性片段着色器OpenGL ES 3.0向后兼容。 也就是说,在2.0中创建的APP应用程序在3.0中仍然可用。

2 .采用新功能阴影贴图、体渲染、基于GPU的粒子动画、几何形状实例化、纹理压缩、伽马校正等技术的关键功能不在2.0。 3.0在引入这些功能的同时,继续适应嵌入式系统的局限性。 这一部分将在下一章详细介绍。

3 .从渲染管线3.0中删除了两个部分:OpenGL ES 2.0Alpha 测试。 这些部分存在于OpenGL ES 2.0和OpenGL ES 1.x中。

alpha测试可以在片段着色器上进行,因为片段着色器可能会销毁片段,所以可以删除逻辑操作(LogicOp)

删除Alpha 测试是因为很少使用。

4 .着色器脚本创建着色器脚本的创建进行了相对较大的更改。 其中一些如下。

必须在逻辑操作(LogicOp)着色器脚本中使用#version 300 es声明指定使用OpenGL ES 3.0版本。 例如:

# vec4v位置在版本300 eslayout (位置=0)中; void main () { gl_Position=vPosition; }如果不添加版本声明或使用#version 100 es声明版本,请指定使用OpenGL ES 2.0。

版本声明以前版本声明为#version 100 es,因为2.0刚刚出现可编程图形管道。 然后,为了匹配版本号,OpenGL ES 3.0的着色器版本从1.0直接跳转到3.0。

备注:3.0中添加了in、out和inout关键字,而不是attribute和varying关键字。 gl_FragColor和gl_FragData也被删除,片段着色器可以使用out声明字段输出。

输入输出3.0中,可以直接使用layout为指定位置的变量赋值。 例如:

# shader脚本的布局(位置=1)统一浮动a; 通过直接写下相应的layout值,可以将值指定给代码

gles 30.GL统一1 f (1,1f ); 2.0要求按以下格式赋值:

gles 20.GL统一1 f (gles 20.glgetattriblocation (program,' a ' ),1f )和新功能OpenGL ES 3.0添加了许多新功能和特性,使开发更加灵活方便以下是3.0的新功能。这部分摘自一本叫《OpenGL ES 3.0 编程指南》的书:

1 .纹理sRGB纹理和帧缓冲区——允许APP应用程序执行伽马校正渲染。 纹理存储在gamma校正的sRGB空间中,可以在着色器导入时反向校正为线性空间,并在输出到帧缓冲区时转换回srgb gamma校正空间。 在线性空间中正确进行照明和其他计算可能会提供更高的视觉保真度。 2D纹理数组——存储2D纹理的一组纹理目标。 例如,可以使用这些数组来执行纹理动画。 通常,该动画是通过在2D纹理阵列出现之前在一个2D纹理中排列动画帧、更改纹理坐标和更改动画帧来实现的。 使用2D纹理数组,可以在数组的一个2D切片中指定动画的每个帧。 三维纹理。 虽然某些OpenGL ES 2.0实现通过扩展支持3D纹理,但OpenGL ES3.0将其作为强制功能。 深度纹理和阴影比较启用存储在——纹理中的深度缓冲区。 深度纹理最常见的用途是渲染阴影。 深度缓冲区从光源的角度渲染,用于确定剪辑是否位于阴影中,与渲染场景时相比。 除了深度纹理之外,OpenGL ES 3.0还可以在读取时比较深度纹理,以便在深度纹理中完成双线性过滤。 无缝立方体。 传统上,在多维数据集渲染中,多维数据集各面之间的边界可能会出现瑕疵。 在OpenGL ES 3.0中,多维数据集图表可以进行采样(如过滤),使用相邻面上的数据并删除接缝对象。 浮点纹理。 OpenGL ES 3.0扩展了支持的纹理格式。 它还支持半浮点纹理(16位)和全浮点纹理(32位),但不能过滤。 ETC2/EAC纹理压缩。 OpenGL ES 3.0强制支持ETC2/EAC。 ETC2/EAC的格式是RGB888,而RGBA8888、单通道和双通道是有符号/无符号纹理

数据。纹理压缩的好处包括更好的性能以及减少GPU内存占用。整数纹理。OpenGL ES 3.0引入了渲染和读取保存为未规范化有符号或无符号8位、16位和32位整数纹理的能力。其它纹理格式。OpenGL ES 3.0还包含了对11-11-10 RGB浮点纹理、共享指数RGB 9-9-9-5纹理、10-10-10-2整数纹理以及8位分量有符号规范化纹理的支持。非2幂次纹理(NPOT)。纹理现在可以指定为不为2的幂次尺寸。纹理细节级别(LOD)。现在可以强制使用用于确定读取哪个Mipmap的LOD参数。此外,可以强制基本和最大Mipmap级别。这两个功能组合起来,可以流化Mipmap。在更大的Mipmap级别可用时,可以提高基本级别,LOD值可以平滑地增加,以提供平滑的流化纹理。这一功能非常有用,例如用于通过网络连接下载纹理Mipmap。纹理调配。引入新的纹理对象状态,允许独立控制纹理数据每个通道(R、G、B、A)在着色器中的映射。不可变纹理。为应用程序提供在加载数据之前指定纹理格式和大小的机制。在这样做的时候,纹理格式不可变,OpenGL ES驱动程序可以预先执行所有一致性和内存检查。通过允许驱动程序在绘制的时候跳过一致性检查,可以改善性能。最小尺寸增大。OpenGL ES 3.0支持远大于OpenGL ES 2.0的纹理资源。 2. 着色器 二进制程序文件。在OpenGL ES 2.0中可以二进制格式存储着色器,但是仍需要在运行时链接到程序。在OpenGL ES 3.0中,完全链接过的二进制程序文件可以保存为离线二进制格式,运行时不需要链接步骤。这有助于减少应用程序的加载时间。强制的在线编译器。在OpenGL ES 2.0可以选择驱动程序是否支持着色器的在线编译,意图是降低驱动程序的内存需求,但是这一功能代价很大,开发人员不得不依靠供应商专用工具来生成着色器。在OpenGL ES 3.0中,所有实现都有在线着色器编译器。非方矩阵。支持方阵之外的新矩阵类型,并在API中增加了相关的统一调用,以支持这些矩阵的加载。非方矩阵可以减少执行变换所需的指令。例如执行仿射变换时,可以使用43矩阵代替最后一行为(0, 0, 0, 1)的44矩阵,从而减少执行变换所需的指令。全整数支持。支持整数(以及无符号整数)标量和向量类型以及全整数操作。有各种内建函数可以实现从整数到浮点数、从浮点数到整数的转换以及从纹理中读取整数值和向整数颜色缓冲区中输出整数值的功能。质心采样。为了避免在多重采样时产生伪像,可以用质心采样声明顶点着色器和片段着色器的输出变量平面/平滑插值程序。在OpenGL ES 2.0中所有插值程序均隐含地在图元之间采用线性插值。在OpenGL ES 3.0中插值程序可以显式声明为平面或者平滑着色。统一变量块。统一变量值可以组合为统一变量块。统一变量块可以更高效地加载,也可在多个着色器程序间共享。布局限定符。顶点着色器输入可以用布局限定符声明,以显式绑定着色器源代码中的位置,而不需要调用API。布局限定符也可以用于片段着色器的输出,在渲染到多个渲染目标时将输出绑定到各个目标。而且,布局限定符可以用于控制统一变量块的内存布局。实例和顶点ID。顶点索引现在可以在顶点着色器中访问,如果使用实例渲染,还可以访问实例ID。片段深度。片段着色器可以显式控制当前片段的深度值,而不是依赖深度值的插值。新的内建函数。引入了许多新的内建函数,以支持新的纹理功能、片段导数、半浮点数据转换和矩阵及数学运算。宽松的限制。大大放松了对着色器的限制。着色器不再限于指令长度,完全支持变量为基础的循环和分支,并支持数组索引。 3. 几何形状 变换反馈。可以在缓冲区对象中捕捉顶点着色器的输出。这对许多在GPU上执行动画而不需要CPU干预的技术很实用,例如,粒子动画或者使用“渲染到顶点缓冲区”的物理学模拟。布尔遮挡查询。应用程序可以查询一个(或者一组)绘制调用的任何像素是否通过深度测试。这个功能可以在各种技术中使用,例如镜头眩光效果的可见性确定,以及避免在边界被遮挡的对象上进行几何形状处理的优化。实例渲染。有效地渲染包含类似几何形状但是属性(例如变化矩阵、颜色或者大小)不同的对象。这一功能在渲染大量类似对象时很有用,例如人群的渲染。图元重启。在OpenGL ES 2.0中为新图元使用三角形条带时,应用程序必须在索引缓冲区中插入索引,以表示退化的三角形。在OpenGL ES 3.0中,可以还是要特殊的索引值表示新图元的开始。这就消除了使用三角形条带时生成退化三角形的需求。新顶点格式。支持包括10-10-10-2有符号和无符号规范化顶点属性;8位、16位和32位整数属性;以及16位半浮点。 4. 缓冲区对象

引入了许多新的缓冲区对象,以提高为图形管线各部分指定数据的效率和灵活性。

统一变量缓冲区对象。为存储/绑定大的统一变量块提供高效的方法。统一变量缓冲区对象可以减少将统一变量值绑定带着色器的性能代价,这是OpenGL ES 2.0应用程序中的常见瓶颈。顶点数组对象。提供绑定和在顶点数组状态之间切换的高效方法。顶点数组对象实际上是顶点数组状态的容器对象。使用它们,应用程序可以在一次API调用中切换顶点数组状态,而不是发出多个调用。采样器对象。将采样器状态(纹理循环模式和过滤)与纹理对象分离。这为在纹理中共享采样器状态提供了更高效的方法。同步对象。为应用程序提供检查一组操作是否在GPU上完成执行的机制。相关的新功能是栅栏(Fence),它为应用程序提供了通知GPU应该等待一组操作结束才能接受更多操作进入执行队列的方法。像素缓冲对象。使应用程序能够执行对像素操作和纹理传输操作的异步数据传输。这种优化主要是为了在CPU和GPU之间提供更快的数据传输,在传输操作期间,应用程序可以继续工作。缓冲区子界映射。使应用程序能够映射缓冲区的一个子区域,供CPU访问。这可以提供比传统缓冲区映射更好的性能,在传统缓冲区映射中,必须使整个缓冲区可用于客户。缓冲区对象间拷贝。提供了高效地从一个缓冲区对象向另一个缓冲区对象传输数据的机制,不需要CPU干预。 5. 帧缓冲区

增添了许多与屏幕外渲染带帧缓冲区对象相关的新功能

多重渲染目标(MRT)。允许应用程序同时渲染到多个颜色缓冲区。利用MRT技术,片段着色器输出多个颜色,每个用于一个相连的颜色缓冲区。MRT用于许多高级的渲染算法,例如延迟着色。多重采样渲染缓冲区。使应用程序能够渲染到具备多重采样抗锯齿功能的屏幕外帧缓冲区。多重采样帧缓冲区不能直接绑定到纹理,但是可以用新引入的帧缓冲区块移动解析为单采样纹理。帧缓冲区失效提示。OpenGL ES 3.0的许多实现使用基于块状渲染(TBR)的GPU。TBR常常在必须为了进一步渲染到帧缓冲区而毫无必要地恢复图块内容时导致很高的性能代价。帧缓冲区失效为应用程序提供了通知驱动程序不再需要帧缓冲区内容的机制。这使驱动程序能够采取优化步骤,跳过不必要的图块恢复操作。这一功能对于在许多应用程序中实现峰值性能很重要,特别是那些进行大量屏外渲染的程序。新的混合方程式。OpenGL ES 3.0支持最大值/最小值函数作为混合方程式。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。