1前言
电脑的工作原理:电脑是由各种不同的硬件组成,由驱动软件驱使硬件进行工作。所有的软件工程师都会直接或者间接的使用到驱动。
定义:是一个图形库,用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序接口(API)。针对GPU。
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 不同点
维度 | DirectX | OpenGL | OpenGL ES |
---|---|---|---|
开发者 | 微软 | Khronos Group | Khronos 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