TA学习之路——1.6 PC手机图形API介绍

news2025/4/15 21:31:47

1前言

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

基础概念
DrectX,OpenGL,OpenGL ES
OpenGL ES 3.0新功能
晓龙Adreno对应ES版本型号

2 基础概念

2.1应用端

即我们自己的程序端,相对于opengl es,我们属于应用端。

2.2 图元

要渲染的几何物体,或者形状。比如要渲染一个正方形的图片,就是一个图元,要渲染两条直线,这两条直线也是图元。

2.3 纹理

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

2.4 纹素

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

2.5 顶点数组

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

2.6 顶点缓冲区

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

2.7 顶点着色器

2.7.1 作用

1.坐标变换:将顶点的局部坐标(模型空间)通过模型视图投影矩阵转换为裁剪空间坐标(gl_Position),供后续光栅化使用。
2.属性传递:处理顶点的颜色、法线、纹理坐标等属性,并通过out变量传递给片元着色器。这些属性在光栅化阶段会被插值。
**3.顶点动画:**实现动态效果,如波浪位移、布料模拟等,通过修改顶点位置或属性实现。

2.7.2 输入

1.attribute变量:每个顶点的固有属性(位置、颜色、法线等)。
2.统一变量(uniform):全局数据(如变换矩阵、时间参数等)。

示例代码(GLSL):

#version 330 core
layout (location = 0) in vec3 aPosition;
layout (location = 1) in vec2 aTexCoord;

out vec2 vTexCoord;
uniform mat4 modelViewProjection;

void main() {
    gl_Position = modelViewProjection * vec4(aPosition, 1.0);
    vTexCoord = aTexCoord;
}

2.8 片元着色器

2.8.1 作用

1.颜色计算:根据插值后的属性(如纹理坐标、法线)、纹理采样和光照模型,计算每个片元的最终颜色。
2.复杂效果:实现光照(Phong、PBR)、阴影、后处理(模糊、边缘检测)等。

2.8.2 输入

1.插值后的in变量(由顶点着色器传递)。
2.纹理、光照参数等uniform变量。

2.8.3 输出

片元颜色(如out vec4 FragColor或传统的gl_FragColor)。

示例代码(GLSL):

#version 330 core
in vec2 vTexCoord;
out vec4 FragColor;
uniform sampler2D uTexture;

void main() {
    FragColor = texture(uTexture, vTexCoord);
}

3.DirectX,OpenGL,OpenGL ES

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

3.1 DirectX

3.1.1 定义与背景:

DirectX 是由微软开发的一套多媒体编程接口(API),主要用于 Windows 和 Xbox 平台的游戏开发和高性能图形应用。它包含多个组件,例如 Direct3D(3D 图形)、Direct2D(2D 图形)、DirectSound(音频)、DirectInput(输入设备)等,是一个综合性框架。

3.1.2 平台支持

主要支持 Windows 和 Xbox,其他平台(如 Linux)需通过第三方工具(如 Wine)间接支持。

3.1.3 特点

1.与 Windows 系统深度绑定,性能优化好。
2.提供完整的游戏开发工具链(如 HLSL 着色器语言、PIX 调试工具)。
3.最新版本 DirectX 12 支持底层硬件访问(类似 Vulkan),显著提升多线程性能。

3.2 OpenGL

3.2.1 定义与背景:

OpenGL(Open Graphics Library)是由 Khronos Group 维护的跨平台图形 API,专注于 2D/3D 渲染。它是行业标准,广泛应用于科学计算、CAD、游戏开发等领域。

3.2.2 平台支持

支持 Windows、Linux、macOS 等主流操作系统,以及部分移动端(需通过扩展)。

3.2.3 特点

1.纯图形 API,不包含音频或输入功能,需结合其他库(如 SDL)。
2.通过扩展机制支持新硬件特性(如 GLSL 着色器)。
3.更新缓慢,逐渐被 Vulkan 取代,但仍是跨平台开发的经典选择。

3.3 OpenGL ES

3.3.1 定义与背景:

OpenGL ES(OpenGL for Embedded Systems)是 OpenGL 的简化版本,专为移动设备、嵌入式系统(如智能手机、车载系统、游戏主机)设计。

3.3.2 平台支持

主要应用于 Android、iOS(通过 Metal 封装)、PlayStation Vita 等资源受限设备。

3.3.3 特点

1.移除高级功能(如固定管线),保留核心渲染功能。
2.高度优化功耗和性能,适合移动 GPU。
3.OpenGL ES 3.0+ 支持计算着色器等现代特性。

3.4 相同点

维度说明
图形渲染核心均基于 GPU 加速的渲染管线(顶点处理、光栅化、片元着色等)。
着色器支持支持可编程着色器(DirectX 的 HLSL vs. OpenGL/GL ES 的 GLSL)。
跨平台潜力OpenGL 和 GL ES 天然跨平台;DirectX 需借助其他技术(如 ANGLE)实现。
硬件抽象层提供对 GPU 的统一访问,屏蔽底层硬件差异。

3.5 不同点

维度DirectXOpenGLOpenGL ES
开发者微软Khronos GroupKhronos Group
核心用途游戏开发(图形+音频+输入等完整方案)跨平台图形渲染(仅图形)移动/嵌入式图形渲染
平台绑定Windows/Xbox全平台(需驱动支持)Android/iOS/嵌入式设备
功能复杂度高(整合多模块)中等(需搭配其他库低(精简核心功能)
更新与生态频繁更新(如 DX12 Ultimate)已停滞(转向 Vulkan)稳定(ES 3.2 为主流)
底层控制DX12 支持底层 API高层抽象,灵活性较低类似 OpenGL,但更简化
典型应用场景《赛博朋克 2077》(PC/Xbox)Blender(3D 建模)、Unity《原神》(移动端适配)

3.6 选择建议

1.Windows/Xbox 独占游戏 → DirectX 12(性能最优)。
2.跨平台桌面应用 → OpenGL 或 Vulkan(未来趋势)。
3.移动/嵌入式开发 → OpenGL ES 或 Vulkan(Android 主流)。
4.科学可视化/CAD → OpenGL(历史兼容性好)。

3.7 补充说明

1.Vulkan:作为 OpenGL 的继任者,提供类似 DirectX 12 的底层控制,跨平台且性能更强,逐渐成为移动和桌面开发的新标准。
2.Metal/Mantle:苹果的 Metal 和 AMD 的 Mantle(已停用)是特定平台的竞争技术,DirectX 和 Vulkan 仍是通用解决方案。

4 OpenGL ES 3.0新功能

4.1 渲染管线增强

4.1.1 变换反馈(Transform Feedback)

允许捕获顶点着色器的输出到缓冲区,用于后续渲染或计算,支持粒子系统等动态效果。

4.1.2 多重渲染目标(MRT, Multiple Render Targets)

片段着色器可同时输出到多个颜色附件(如颜色、法线、深度),支持延迟着色等高级技术。

4.1.3 实例化渲染(Instanced Rendering)

通过 glDrawArraysInstanced 和 glDrawElementsInstanced 减少重复对象的绘制调用,提升渲染效率。

4.1.4 遮挡查询增强

新增 GL_ANY_SAMPLES_PASSED 和 GL_ANY_SAMPLES_PASSED_CONSERVATIVE,优化可见性检测。

4.2 着色器语言升级(GLSL ES 3.0)

4.2.1更灵活的控制流

支持全功能的循环(for、while)和分支(if-else、switch)语句。

4.2.2 增强的纹理采样

引入 textureLod、textureGrad 等函数,支持非均匀纹理细节控制。

4.2.3 统一变量块(UBO, Uniform Buffer Objects)

统一变量可分组管理,提升多着色器间数据共享效率。

4.2.4 顶点着色器输入增强

支持更多顶点属性(从 ES 2.0 的 8 个增加到 16 个)。

4.3 纹理与帧缓冲

4.3.1 压缩纹理格式

支持 ETC2/EAC 压缩格式(支持 RGBA 和透明通道),替代 ES 2.0 的 ETC1。

4.3.2 3D 纹理和数组纹理

新增 3D 纹理(GL_TEXTURE_3D)和纹理数组(GL_TEXTURE_2D_ARRAY),支持体渲染和动画。

4.3.3 浮点纹理

支持 GL_RGB32F、GL_RGBA32F 等浮点格式,提升高动态范围(HDR)渲染能力。

4.3.4 多重采样渲染到纹理

支持 GL_TEXTURE_2D_MULTISAMPLE,提升抗锯齿效果。

4.4 缓冲区与内存管理

4.4.1 顶点数组对象(VAO, Vertex Array Object)

简化顶点属性配置,减少状态切换开销。

4.4.2 像素缓冲区对象(PBO, Pixel Buffer Object)

提升像素数据传输效率,支持异步操作。

4.4.3 着色器存储缓冲区对象(SSBO)

(注:SSBO 实际在 ES 3.1 引入,此处需注意版本差异)

4.5 增强的 API 功能

4.5.1 增强的混合模式

支持 GL_MIN 和 GL_MAX 混合方程。

4.5.2 sRGB 帧缓冲

支持伽马校正的 sRGB 色彩空间渲染,提升颜色准确性。

4.5.3 查询对象(Query Objects)

精确统计渲染时间、图元数量等性能指标。

4.6 其他改进

4.6.1 提升的最大值限制

如纹理尺寸(从 ES 2.0 的 1024 提升至 2048)、Uniform 变量数量等。

4.6.2 更严格的错误检查

引入 GL_KHR_debug 扩展支持,增强调试能力。

5 晓龙Adreno对应ES版本型号

Adreno对应ES

高通骁龙组件列表链接
Adreno对应ES

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

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

相关文章

Matlab 调制信号和fft变换

1、内容简介 Matlab 194-调制信号和fft变换 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

100M/1000M 以太网静电浪涌防护方案

方案简介 以太网是一种生产较早且广泛应用的局域网通讯方式,同时也是一种协议,其核 心在于实现区域内(如办公室、学校等)的网络互联。根据数据传输速度的不同,以 太网大致可以划分为几个等级:标准以太网…

C语言中while的相关题目

一、题目引入 以下程序中,while循环的循环次数是多少次? 二、代码分析 首先要明确的一点 while循环是当循环条件为真 就会一直循环 不会停止 while中i是小于10的 说明i可以取到0 1 2 3 4 5 6 7 8 9 进入第一个if判断i小于1为真时执行continue i0是为真的 执行continue 后…

「Unity3D」图片导入选项取消Read/Write,就无法正确显示导入大小,以及Addressable打包无法正确显示的问题

如果在Edit -> Project Settings -> Editor中的“Load texture data on demand”勾选,就会让图片导入设置中,不勾选Read/Write,就无法正确显示纹理的大小数字。 更进一步的问题是,使用Addressable打包的时候, 如…

Xcode为不同环境配置不同的环境变量

一般有三种方式: 一、通过多Target 二、通过scheme,也就是多configurations 三、通过.xcconfig文件 先来看第二种方式:通过scheme,也就是多configurations,包括自定义User-settings 第一步:增加configurations,Xcode默认为我们生成了…

阿里通义实验室发布图片数字人项目LAM,实现高保真重建

简介 LAM项目结合了3D Gaussian Splatting(高斯点云渲染)和大规模预训练模型的优势,解决了传统头部重建方法效率低、依赖多数据的痛点。其背景源于AI生成内容(AIGC)领域对实时、高保真3D头像生成的需求,尤其…

镜像端口及观察端口的配置

配好路由器的各个接口的IP PC1ping PC3的IP,在路由器中抓2/0/0端口的包,可观察到无结果 输入observe-port interface g 2/0/0 命令配置观察端口 输入mirror to observe-port both命令 (其中both表示接收来去的数据包,inboun…

STM32——I2C通讯(软件模拟)

I2C概念 I2C:Inter-Integrated Circuit(内部集成电路) Philps公司80年代初期开发的,引脚少,硬件实现简单,可扩展性广泛地使用在系统内多个集成电路(IC)间的低速通讯 简单的双向两线制总线协议…

JetBrains Terminal 又发布新架构,Android Studio 将再次迎来新终端

不到一年的时间,JetBrains 又要对 Terminal 「大刀阔斧」,本次发布的新终端是重构后的全新的架构,而上一次终端大调整还是去年 8 月的 v2024.2 版本,并且在「Android Studio Ladybug | 2024.2.1」也被引入。 不知道你们用不用内置…

论文:Generalized Category Discovery with Large Language Models in the Loop

论文下载地址:Generalized Category Discovery with Large Language Models in the Loop - ACL Anthology 1、研究背景 尽管现代机器学习系统在许多任务上取得了优异的性能,绝大多数都遵循封闭世界的设置,假设训练和测试数据来自同一组预定义…

第十六届蓝桥杯 省赛C/C++ 大学B组

编程题目现在在洛谷上都可以提交了。 未完待续,写不动了。 C11 编译命令 g A.cpp -o A -Wall -lm -stdc11A. 移动距离 本题总分:5 分 问题描述 小明初始在二维平面的原点,他想前往坐标 ( 233 , 666 ) (233, 666) (233,666)。在移动过程…

【计网】网络交换技术之分组交换(复习自用,重要1)

复习自用的,处理得比较草率,复习的同学或者想看基础的同学可以看看,大佬的话可以不用浪费时间在我的水文上了 另外两种交换技术可以直接点击链接访问相关笔记: 电路交换 报文交换 一、分组交换的定义 1.定义 分组交换&#x…

解密CHASE-SQL和XiYan-SQL多智能体AI如何最终实现TEXT2SQL的突破

想象一个世界,无论技术背景如何,任何人都能轻松查询海量数据库、挖掘深层洞察。比如:“我想知道安徽地区最畅销电子产品的第三季度销售额?”——只需一句话。“去年营销支出与客户获取成本之间的相关性如何?”——像聊天一样输入问题。这就是Text-to-SQL的承诺:将人类语言…

思考力提升的黄金标准:广度、深度与速度的深度剖析

文章目录 引言一、广度的拓展:构建多元知识网络1.1 定义与重要性1.2 IT技术实例与提升策略小结:构建多元知识网络,提升IT领域思考力广度 二、深度的挖掘:追求知识的精髓2.1 定义与重要性2.2 IT技术实例与提升策略小结:…

web自动化:下拉选择框、弹出框、滚动条的操作

web自动化:下拉选择框、弹出框、滚动条的操作 一、下拉选择框 1、导包 from selenium.webdriver.support.select inport Select 2、实例化对象 Select(element) 3、常用方法 通过option索引来定位,从0开始:select_by_index(index)通过…

数字人:打破次元壁,从娱乐舞台迈向教育新课堂(4/10)

摘要:数字人正从娱乐领域的璀璨明星跨界到教育领域的智慧导师,展现出无限潜力。从虚拟偶像、影视游戏到直播短视频,数字人在娱乐产业中大放异彩,创造巨大商业价值。在教育领域,数字人助力个性化学习、互动课堂和虚拟实…

互联网三高-数据库高并发之分库分表ShardingJDBC

1 ShardingJDBC介绍 1.1 常见概念术语 ① 数据节点Node:数据分片的最小单元,由数据源名称和数据表组成 如:ds0.product_order_0 ② 真实表:再分片的数据库中真实存在的物理表 如:product_order_0 ③ 逻辑表&#xff1a…

Android游戏逆向工程全面指南

文章目录 第一部分:基础概念与环境搭建1.1 游戏逆向工程概述1.2 法律与道德考量1.3 开发环境准备基础工具集:环境配置示例: 第二部分:静态分析技术2.1 APK反编译与资源提取使用Apktool解包:关键文件分析: 2…

antv x6使用(支持节点排序、新增节点、编辑节点、删除节点、选中节点)

项目需要实现如下效果流程图&#xff0c;功能包括节点排序、新增节点、编辑节点、删除节点、选中节点等 html部分如下&#xff1a; <template><div class"MindMapContent"><el-button size"small" click"addNode">新增节点&…

榕壹云在线商城系统:基于THinkPHP+ Mysql+UniApp全端适配、高效部署的电商解决方案

项目背景&#xff1a;解决多端电商开发的痛点 随着移动互联网的普及和用户购物习惯的碎片化&#xff0c;传统电商系统面临以下挑战&#xff1a; 1. 多平台适配成本高&#xff1a;需要同时开发App、小程序、H5等多端应用&#xff0c;重复开发导致资源浪费。 2. 技术依赖第三方…