【TA100】6 PC手机图形API介绍

news2024/11/29 4:27:15

1 电脑的工作原理:

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

在这里插入图片描述
应用端:即我们自己的程序端,相对于opengl es,我们属于应用端
图元:要渲染的几何物体,或者形状。比如要渲染一个正方形的图片,就是一个图元,要渲染两)直线,这两条直线也是图元
纹理:通俗点,可以理解为一张图片,在opengles中纹理就是图片的另外一种叫法纹素:
纹理的基础单元,也就是像素.
顶点数组:顶点指的是组成图元的各个顶点的坐标数据(在3D笛卡尔坐标中即x,y,z坐标),这些坐标数可以一起存到一个内存数组中,这个数组就叫做顶点数组.
顶点缓冲区: 在显存中专门分配一块显存来存储这个顶点数组,这.个显存就称为顶点缓冲区
顶点着色器(大家通过前面几节课都知道了,就不复诉了)片元着色器.

Khronos 定义了OpenGL 微软自己定义了DirectX目前手机,不管是 ioS 还是 Android,都是支持 OpenGL ES电脑:Windows 系统支持 DirectX 和 OpenGL,Linux/Mac(Unix)系统支持OpenGL。

在这里插入图片描述
20 世纪 90 年代——OpenGL 开放
2000 年——openGL ES 开放
2005 年——OpenGL SC 开放
2008 年——开放基层更高效计算的 OpenCL
2014 年——开放 SPIR
2015 年——Vulkan 开放,更加高效的 GPU 使用效率

2 OPENGL ES

在这里插入图片描述

3 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声明字段输出。

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

(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)

4 OpenGL ES 3.0新功能

OpenGL ES不同点

兼容性
OpenGL ES 3.0向后兼容OpenGL ES 2.0。即2.0编写的应用程序可以在3.0中继续使用
新特性
3.0采用了阴影贴图、体渲染( volume rendering ) 、基于GPU的粒子动画、几何形状实例化、纹理压缩和伽马校正等技术,同时继续适应嵌入系统的局限性。2.0中则不具备这些功能。
渲染管线
3.0中移除了Alpha测试和逻辑操作(LogicOp)两部分,这两部分存在于OpenGL ES2.0和 OpenGL ES 1.x中。
移除 Alpha测试是因为片段着色器可能抛弃片段,因此 Alpha测试可以在片段着色器中进行。移除逻辑操作( LogicOp)是因为它很少被使用。

着色器编写

版本声明:使用#version 100 es来声明为OpenGL ES 2.0版本,使用#version 300 es来生命为OpenGL ES 3.0版本。这是因为OpenGL ES 2.0是刚刚发布可编程图形管线的版本所以为100,而OpenGL ES 3.0为了匹配上版本号因此从1.0直接跳到了3.0。

输入输出:3.0中新增了in,out,inout 关键字,用来取代 attribute和varying 关键字。同时gl_FragColor和 gl FragData 也删除了,片段着色器可以使用out 声明字段输出。

变量赋值:3.0中可以直接使用layout对指定位置的变量赋值。代码中,直接写上对应的 layout的值就可以赋值。而2.0中必须使用GLES20.gluniform1f(GLES2e.glGetAttribLocation(program,“a”),1f)这样的形式来赋值。

5 OpenGL ES 3.0新功能

纹理:

sRGB纹理和帧缓冲区——允许应用程序执行伽马校正渲染。

2D纹理数组——保存一组2D纹理的纹理目标。

3D纹理——一些OpenGL ES 2.0实现通过扩展支持3D纹理,而OpenGL ES3.0将此作为强制的功能。

深度纹理和阴影比较——启用存储在纹理中的深度缓冲区。

无缝立方图——立方图可以进行采样如过滤来使用相邻面的数据并删除接缝处的伪像。

浮点纹理——支持并可以过滤半浮点纹理(16位),也支持全浮点纹理(32位),但不能过滤。

ETC2/EAC纹理压缩——OpenGL ES 3.0中强制支持ETC2/EAC格式。(ETC2/EAC的格式为RGB8,RGBA888和单通道及双通道有符号/无符号纹理数据)

整数纹理——OpenGL ES 3.0引人了渲染和读取保存为未规范化有符号或无符号8位、16位和32位整数纹理的能力。

其它纹理格式——OpenGL ES 3.0还包含了对特殊纹理格式的支持。(如11-11-10RGB浮点纹理、共享指数RGB 9-9-9-5纹理、10-10-10-2整数纹理以及8位分量有符号规范化纹理)

非2幂次纹理(NPOT)——纹理现在可以指定为不为2的幂次尺寸。

纹理细节级别(LOD)——现在可以强制使用用于确定读取哪个Mipmap的LOD参数。

纹理调配——允许独立控制纹理数据每个通道(R、G、B、A)在着色器中的映射。

不可变纹理——为应用程序提供在加载数据之前指定纹理格式和大小的机制。

最小尺寸增大——OpenGL ES 3.0支持远大于OpenGL ES 2.0的纹理资源。

着色器:

二进制程序文件——完全链接过的二进制程序文件可以保存为离线二进制格式,运行时不需要链接步骤。

强制的在线编译器——在OpenGL ES 3.0中,所有实现都有在线着色器编译器。

非方对阵——支持方阵之外的新矩阵类型,并在API中增加了相关的统一调用。

全整数支持——支持整数(以及无符号整数)标量和向量类型以及全整数操作。

质心采样——避免在多重采构时产生伪像。

平面/平滑插值程序——插值留序可以显式声明为平面或者平滑着色。

统一变量块——统一变量值可以组合为统一变量块,可以更高效地加载,共享。

布局限定符——显式绑定着色器源代码中的位置,还用于控制统一变量块的内存布局。

实例和顶点ID——可以在顶点着色器中访问顶点索引,实例渲染中访问实例ID。

片段深度——不依赖差值,显式控制当前片段的深度值。

新的内建函数——支持新的纹理功能、片段导数、半浮点数据转换和矩阵及数学运算。

宽松限制——着色器不再限于指令长度,支持变量为基础的循环和分支和数组索引.

几何形状:

变换反馈——可以在缓冲区对象中捕捉顶点着色器的输出。

布尔遮挡查询——应用程序可以查询绘制调用的任何像素是否通过深度测试。

实例渲染——有效地渲染包含类似几何形状但是属性(变化矩阵、颜色或者大小)不同的对象。

图元重启——允许特殊的索引值表示新图元的开始。

新顶点格式——支持更多新的顶点格式。(包括10-10-10-2有符号和无符号规范化顶点属性;8位、16位和132位整数属性;以及16位半浮点)

缓冲区对象:

统一变量缓冲区对象——为存储/绑定大的统一变量块提供高效的方法。

顶点数组对象——提供绑定和在顶点数组状态之间切换的高效方法。

采样器对象——将采样器状态(纹理循环模式和过滤)与纹理对象分离。

同步对象——为应用程序提供检查一组操作是否在GPU上完成执行的机制。

像素缓冲对象——使应用程序能够执行对像素操作和纹理传输操作的异步数据传输。

缓冲区子界映射——使应用程序能够映射缓冲区的一个子区域,供CPU访问。

缓冲区对象间拷贝——提供了高效地从不同的缓冲区对象互相传输数据的机制,不需要CPU干预。

帧缓冲区

多重渲染目标(MRT)——允许应用程序同时渲染到多个颜色缓冲区。

多重采样渲染缓冲区——使应用程序能够渲染到具备多重采样抗锯齿功能的屏幕外帧缓冲区。

帧缓冲区失效提示——为应用程序提供了通知驱动程序不再需要帧缓冲区内容的机制。

新的混合方程式——新增支持最大值/最小值函数作为混合方程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/512588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySql -- JDBC编程

1.Java的数据库编程:JDBC JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开…

Flutter性能分析工具使用

使用前提 flutter常用的性能分析工具,这些工具都集成在android studio中,基本能满足我们的需求了。在下面介绍的几个工具中,Flutter Performance和Flutter Inspector都能够直接在debug模式下使用,但是DevTools只能在profile模式下…

铁路中的警冲标

1、警冲标的定义 警冲标是用来指示机车车辆停车时,不准向道岔方向或线路交叉点方向越过,以防止停留在该线上的机车车辆与邻线上的机车车辆发生侧面冲突的标志。另外,在出站道岔上,警冲标用来确定站界标位置。 2、警冲标怎么设置 …

nettyspringboot开发即时通讯系统

Netty 和 Spring Boot 是当今应用最广泛的 Java 技术之一,两个框架的集成能够构建出高效、稳定并且易于扩展的即时通讯系统。在本篇文章中,我们将会学习和探讨 Netty 和 Spring Boot 的整合,并且演示如何使用它们来构建一个高效、实时的即时通…

浓缩咖啡会降低2型糖尿病风险?

咖啡是全球消费最频繁的饮料之一,其潜在的健康效应引发了重要的科学研究。先前的研究已经将更高的咖啡摄入量与较低的T2D风险联系起来,但潜在机制仍不清楚。 一项新研究揭示,咖啡有助于降低2型糖尿病的风险。研究人员发现,每天增加…

安装endnote 之后打开word出现乱码

文章目录 1 安装endnote 之后打开word出现乱码3 EndNote X9 插入参考文献常见问题总结4 EndNote X9 快速上手教程(毕业论文参考文献管理器) 1 安装endnote 之后打开word出现乱码 安装了endnote,打开文档后,目录显示这样&#xff…

虹科案例 | 对症下药,零售行业商业智能分析解决方案及应用案例!

零售行业商业智能分析解决方案 Domo为零售、电子商务、物联网等提供数据洞察力 利用数字增强数字程序的应用 -快速迭代并指导数字化程序的应用。 -有效管理“最后一公里”并降低交付成本。 -优化客户体验并不断适应客户的新需求,例如线下实体店可进行在线退货。…

【Hackthebox Stocker】打靶记录

Hackthebox Stocker nmap 扫描一把 得到tcp端口22 80 nmap -sC -sV 10.10.11.196 Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-10 05:51 EDT Nmap scan report for 10.10.11.196 Host is up (0.25s latency). Not shown: 998 closed tcp ports (reset) PORT STAT…

C++:C++Primer Plus(第六版):Chapter16 : string类和标准模板库:智能指针

Chapter16.2 : 智能指针模板类 1.指针指针现实需求1.1 普通指针弊端 1.2 智能指针现实需求2. 智能指针使用范式2.1 下面演绎三种智能指针用法注意一个问题 3. 三种智能指针特点3.1 为何摒弃 auto_ptr 3.2 选用 unique_ptr3.3 选用 shared_ptr4. 应该使用哪种智能指针 本章节我们…

学好数据结构的秘诀

学好数据结构的秘诀 作为计算机专业的一名“老兵”,笔者从事数据结构和算法的研究已经近20余年了,在学习的过程中,也会遇到一些问题,但在解决问题时,积累了一些经验,为了让读者在学习数据结构的过程中少走…

Vue2全家桶 (Vue2、VueRouter、Vuex) 笔记

前言 有错的地方希望大家能够帮忙指正一下;本文只是对Vue2全家桶的基本语法进行记录。给孩子点点关注吧!😭 壹、Vue2 Vue:一个 JavaScript 渐进式框架; 渐进式:逐渐使用,集合更多的功能&am…

一文总结 Google I/O 2023

今日凌晨举行的谷歌 I / O 2023 开发者大会上,如果说和往年有什么不同,那么应该就是更大力度的 All in AI 。 毕竟在去年 I/O 宣布重点投入 AI 之后,年末却被 OpenAI 的 ChatGPT “越塔偷家”,匆忙攒出一个发布会还让 Bard 爆出事…

国内最大规模上云实践 | 鹅厂如何在云原生2.0时代“挖呀挖”?

👉腾小云导读 2022 年 10 月,腾讯自研业务产品全面完成云原生上云。自研业务产品云上规模已突破 5000w CPU,借助云原生的技术优势,全面提升了腾讯自研业务产品的运营效率,在此过程中我们也对腾讯云产品进行了打磨和验证…

适合Python 初学者入门教程和资源

如果您是 Python 的初学者,以下是一些入门教程和资源可以帮助您快速开始: 1、Python 官方教程: Python 官方网站提供了完整的入门教程,包括语言基础、面向对象编程、模块、文件处理等方面的内容。这是一个非常全面和权威的资源。 2、Codecade…

盖雅工场重磅发布「劳动力账户」,助力企业实现全面工时成本管理

2023年5月10日,亚太地区领先的劳动力管理云服务商盖雅工场宣布,在原有的智能排班和实时考勤系统基础之上,正式推出全新模块「劳动力账户」,通过为企业里的每一位员工建立劳动力账户,实现工时与成本的全面管控&#xff…

一文打通原生Shiro使用

目录 环境准备 添加依赖 INI 文件 登录认证 登录认证概念 登录认证基本流程 登录认证实例 身份认证流程 角色、授权 授权概念 授权方式 授权流程 授权实例 Shiro 加密 Shiro 自定义登录认证 环境准备 Shiro不依赖容器,直接创建maven工程即可 添加依…

机器学习——线性回归

机器学习——线性回归 文章目录 机器学习——线性回归[toc]1 模型设定2 训练模型3 模型预测4 交叉验证 基于Python实现线性回归、预测和建模评估。 1 模型设定 以Boston数据集为例,其中MEDV是标签,其余均为特征变量 CRIM per capita crime rate by tow…

玩转ChatGPT:Excel操作初探

一、写在前面 首先还是让小Chat推销下自己: Excel 表格制作是个技术活,你掌握了吗?没关系,现在有了 ChatGPT,让 Excel 辅助操作变得更简单!再也不用苦恼于数据分析和整理了,让 ChatGPT 成为你…

C语言:简单的扫雷游戏

扫雷游戏想必大家都玩过,像一些大佬呀,十几秒能通关,给大佬点赞,那咱们也设计一个扫雷游戏,具体怎么实现呢,跟上我的脚步,看看用C语言怎么实现简单的扫雷游戏。 一:扫雷游戏的框架 二…

【Linux】冯诺依曼体系结构以及操作系统的初步认知

🏖️作者:malloc不出对象 ⛺专栏:Linux的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录 前言一、冯诺依曼体系结构二、操…