Android OpenGL ES初窥

OpenGL(Open Graphics Library)最初是由SGI(Silicon Graphics Inc)公司开发的,发展到今天,它已经占据了包括虚拟现实、CAD、能源、游戏研发等多个行业领域,成为名副其实的跨语言跨平台的2D/3D图形处理王者。由于OpenGL的运行对设备要求比较高,很难被直接使用在CPU和内存资源匮乏的嵌入式设备上,于是OpenGL ES应运而生。

OpenGL ES(OpenGL for Embeded Systems)是又Khronos推出的,专门面向嵌入式系统的OpenGL API子集。它不仅可以为android开发者提供3D图形的实现,也同样广泛应用于2D视频于图像处理。其强大的渲染和特效处理功能可以无限扩展应用开发者的想象力。

代码路径:

java层sdk

framework/base/opengl

jni层实现

framework/base/core/jni

c++代码实现

framework/native/opengl

mesa 3D引擎库

external/mesa3d

图形渲染API------EGL

EGL:它是"Khronos Native Platform Graphics Interface"的缩写,即介于本地窗口系统和Rendering API(这里指OpenGL ES)之间的一层接口。EGL主要负责图形环境管理。surface/buffer/绑定,渲染同步等。功能如下:

1 创建redering surfaces

surface可以理解成承载图形的介质,只有成功申请到surface,应用程序才能作图到屏幕上。

2 创造图形环境(graphics context)

OpenGL ES说白了就是一个Pipeline(图形管线,指图形硬件设备GPU的渲染流程,以3D数据为输入最终输出到2D光栅图形的一种流水处理过程),因而它需要状态管理,这就是contextd 主要工作。

3 同步应用程序和本地平台的渲染API

4 提供了对显示设备的访问

5 提供了对渲染配置的管理

简而言之,EGL可以有效保证OPenGL ES的平台独立性。

egl.cfg:

图形渲染所采用的的方式是在系统启动后动态确定的(源码文件是/framwork/native/opengl/libs/egl/Loader.cpp)------如果是在硬件家属的情况下,系统首先要加载相应的libhgl库,否则加载libagl来由CPU进行图形处理。具体来说系统根据egl.cfg文件的解析结果来选择图形渲染的方式。该文件的语法格式如下:

#<DisplayNumber><HW/SW><Lib_Name>

0 1 mali

显示屏编号 硬件库(1)/软件库(0) 库名

egl.cfg文件可以配置多个库,优先级逐行递减,

0 1 mali #硬件加速,采用ARM的mali系列GPU

0 0 android #默认配置

EGL接口解析:

EGL接口是理解android显示系统的关键,以下接口定义来源于:

framework、native/opengl/include/egl/Egl.h

1 eglGetDisplay(EGLNativeDisplayType display_id);

该函数用来取得设备的display,一般传参EGL_DEFAULT_DISPLAY(0),即默认屏

2 eglGetError(void)

用于返回当前EGL中已经发生的错误。

3 eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)

用于对EGL进行初始化,并返回当前的版本号(即major, minor两个参数)。

4 eglGetConfigs(EGLDIsplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);

初始完EGL,要获取一个最佳的Surface,方法有两种,其一通过查询当前系统所有Surface配置,然后手动选择一个,其二就是填写我们的需求,然后由GEL推荐一个最佳匹配的Surface。

5 eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config , EGLint attribute, EGLint *value);

EGLConfig包含了一个有效Surface的所有信息,如颜色数量,额外的缓冲区,Surface类型等。

6 eglChooseConfig();

相关推荐
2501_944424124 小时前
Flutter for OpenHarmony游戏集合App实战之俄罗斯方块七种形状
android·开发语言·flutter·游戏·harmonyos
不会Android的潘潘6 小时前
受限系统环境下的 WebView 能力演进:车载平台 Web 渲染异常的根因分析与优化实践
android·java·前端·aosp
建军啊6 小时前
java web常见lou洞
android·java·前端
豆奶dudu6 小时前
安卓应用签名生成+微信开放平台安卓应用签名
android·微信开放平台
一只专注api接口开发的技术猿8 小时前
微服务架构下集成淘宝商品 API 的实践与思考
java·大数据·开发语言·数据库·微服务·架构
AC赳赳老秦8 小时前
Dify工作流+DeepSeek:运维自动化闭环(数据采集→报告生成)
android·大数据·运维·数据库·人工智能·golang·deepseek
明洞日记8 小时前
【软考每日一练009】计算机系统性能评价:基准程序分类与 TPC 实战案例详解
大数据·数据库
2501_944424128 小时前
Flutter for OpenHarmony游戏集合App实战之记忆翻牌配对消除
android·java·开发语言·javascript·windows·flutter·游戏
李慕婉学姐8 小时前
【开题答辩过程】以《基于Spring Boot和大数据的医院挂号系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
大数据·spring boot·后端
2501_944526428 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 设置功能实现
android·javascript·flutter·游戏·harmonyos