java使用egl_EGL 学习
0.概念:
1. OpenGL ES:
OpenGL ES是针对内存紧张的系统定义的一套非常有用的OpenGL子集。
2. WGL,GLX,AGL,EGL:
OpenGL 在使用时,需要与一个实际的窗口系统关联起来。在不同平台上有不同的机制以关联窗口系统,在Windows上是WGL,在Linux上是GLX,在Apple OS上是AGL等
EGL则是OpenGL ES在嵌入式平台上(WGL,GLX,AGL)的等价物。
EGL假设OS会提供窗口系统,但EGL与平台无关,并不局限于任何特定的窗口系统,所有用到本地窗口系统的地方都用屏蔽指针来处理。(Sam认为,这就是它易于移植的关键)
1. EGL使用:
OpenGL ES是一个平台无关的图形库,如上所述,在它能够工作之前,需要与一个实际的窗口系统关联起来。这部分工作依赖于EGL。下面具体谈他们如何开始工作:
OpenGL ES的初始化过程如下图所示意:
Display → Config → Surface ↑ Context ↑ Application → OpenGL Command
1.1. 获取Display:Display代表显示器,在有些系统上可以有多个显示器,也就会有多个Display。(Sam觉得这个观点有点牵强,Sam觉得Display理解为显存Framebuffer比较合适一些)。获得Display要调用EGLboolean eglGetDisplay(NativeDisplay dpy),参数一般为 EGL_DEFAULT_DISPLAY 。该参数实际的意义是平台实现相关的,在X-Window下是XDisplay ID,在MS Windows下是Window DC。EGL(Boardcom)为NativeDisplayType。
Sam: 所以在不同平台开发时,第一件需要确认的就是:这个平台上的display概念是的实现是什么?
1.2. 初始化egl:
调用 EGLboolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor),该函数会进行一些内部初始化工作,并传回EGL版本号(major.minor)。
1.3. Config的选择:
Config指的是FrameBuffer的参数,在Windows下对应于PixelFormat,在X-Window下对应Visual。在EGL(Boardcom)下也指PixelFormat. 一般用
EGLboolean eglChooseConfig(EGLDisplay dpy, const EGLint * attr_list, EGLConfig * config, EGLint config_size, EGLint *num_config);
参数1:dpy: display.
参数2:attr_list: 使用这个参数,来选中符合的config.
参数3:config: 将符合的config,放到这里。
参数4:想要选中符合的config的最大个数。
参数5:真正选中的符合的config的个数。
其中attr_list是以EGL_NONE结束的参数数组,通常以id,value依次存放,对于个别标识性的属性可以只有 id,没有value。
另一个办法是用:
EGLboolean eglGetConfigs(EGLDisplay dpy, EGLConfig * config, EGLint config_size, EGLint *num_config) 来获得所有config。
参数1:dpy, display.
参数2:输出参数,会在其中放置config.
参数3:config_size: 取config的个数。
参数4:num_config: 当参数2为空时,返回全部config个数。当参数2不为空时,返回读取config的个数。
这两个函数都会返回不多于config_size个Config,结果保存在config[]中,系统的总Config个数保存在num_config中。可以利用eglGetConfig()中间两个参数为0来查询系统支持的Config总个数。
Config有众多的Attribute,这些Attribute决定FrameBuffer的格式和能力,通过eglGetConfigAttrib ()来读取,但不能修改。
1.4. 构造Surface:
Surface实际上就是一个FrameBuffer,通过 EGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig confg, NativeWindow win, EGLint *cfg_attr) 来创建一个可实际显示的Surface。系统通常还支持另外两种Surface:PixmapSurface和PBufferSurface,这两种都不是可显示的Surface,PixmapSurface是保存在系统内存中的位图,PBuffer则是保存在显存中的帧。
Surface也有一些attribute,基本上都可以故名思意, EGL_HEIGHT EGL_WIDTH EGL_LARGEST_PBUFFER EGL_TEXTURE_FORMAT EGL_TEXTURE_TARGET EGL_MIPMAP_TEXTURE EGL_MIPMAP_LEVEL,通过eglSurfaceAttrib()设置、eglQuerySurface()读取。
1.5. 创建Context:
OpenGL的pipeline从程序的角度看就是一个状态机,有当前的颜色、纹理坐标、变换矩阵、绚染模式等一大堆状态,这些状态作用于程序提交的顶点坐标等图元从而形成帧缓冲内的像素。在OpenGL的编程接口中,Context就代表这个状态机,程序的主要工作就是向Context提供图元、设置状态,偶尔也从Context里获取一些信息。
用EGLContext eglCreateContext(EGLDisplay dpy, EGLSurface write, EGLSurface read, EGLContext * share_list)来创建一个Context。
1.6. 绘制:
应用程序通过OpenGL API进行绘制,一帧完成之后,调用eglSwapBuffers(EGLDisplay dpy, EGLContext ctx)来显示。
Boardcom的EGL使用的差别:
java使用egl_EGL 学习相关推荐
- Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
Java IO流学习总结四:缓冲流-BufferedReader.BufferedWriter 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/det ...
- Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...
- Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论
Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...
- Java零基础学习难吗
java编程是入行互联网的小伙伴们大多数的选择,那么对于零基础的小伙伴来说Java零基础学习难吗?如果你是初学者,你可以很好的理解java编程语言.并不困难.如果你的学习能力比较高,那么你对Java的 ...
- Java培训深度学习都要学什么
java的知识点有很多,如果是有java基础的同学,进行深度学习是非常有必要的,比较职场技能更新迭代非常的快,那么java培训深度学习都要学什么呢?来看看下面的详细介绍. Java培训深度学习都要学什 ...
- 零基础参加java培训如何学习
零基础的同学想要学好java技术,一定要比有基础的学员更加努力才可以,因为java技术要学习的东西有很多,在Java培训学习的过程中也是要掌握一定的技巧和方法的,下面就为大家详细的介绍一下零基础参加j ...
- java/android 设计模式学习笔记(1)--- 单例模式
前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...
- 用 Java 训练深度学习模型,原来这么简单
作者 | DJL-Keerthan&Lanking 来源 | HelloGitHub 头图 | CSDN下载自东方IC 前言 很长时间以来,Java 都是一个很受企业欢迎的编程语言.得益于丰富 ...
- [转]java.lang.instrument 学习(一)
[转]java.lang.instrument 学习(一) 收藏 sunyh 发表于 10个月前 阅读 40 收藏 3 点赞 1 评论 0 转自:http://jiangbo.me/blog/201 ...
- java之字符串学习记录
java之字符串学习记录 public class StringDemo { public static void main(String[] args) { //静态初始化字符串 String s1 ...
最新文章
- 关于Android H5混合开发遇到的问题
- C语言回溯算法解决N皇后问题
- centos6 进入命令行_CentOS 6.x误删libc.so.6,紧急恢复
- Comet OJ-栈的数据结构题【线段树】
- MySQL高级知识(三)——索引
- 第四篇:在MVPArms中报错error: cannot find symbol class DaggerXXXComponent的问题
- 计算机相关各机构简称
- 化工、食品外贸行业管理难点
- vue element-ui 键盘输入enter键 触发事件
- 请求转发(request对象)和重定向(response)的区别及何时使用请求转发和重定向
- 计算机读不了硬盘分区,对移动硬盘分区失败计算机不识别的修复
- 机器学习项目入门篇:一个完整的机器学习项目
- mysql innodb 数据打捞(二)innodb 页面打捞编程
- 网页自动弹窗被拦截 html,JS弹出新窗口被拦截的解决方法
- consul服务注册常见bug
- vc检测显示器的信息
- 朗强:视频监控矩阵切换器和视频会议信号传输器已进入无缝切换时代
- 互联网盈利模式主要只有三种
- 如何删除计算机中的“天翼云盘(32位)”图标
- linux内存跑分,RaspberryPi 4B 4G版本跑分测|CPU|内存|IO|网络|性能全面测试
热门文章
- Libero Soc 安装和License申请
- Microsemi Libero系列教程(六)——Identify片上逻辑分析仪的使用
- docker 启动失败:specified both as a flag and in the configuration fir/daemon.json
- A记录、CNAME、MX记录、NS记录的区别和联系
- 用计算机编程解魔方,魔方程序 (详细的解释)
- 【C语言题解】将数字金额翻译成中文大写金额
- 爬取电影天堂最新电影的名称和下载链接(增量爬取mysql存储版)
- android系统佳明app,佳明garmin运动手表app
- 为什么说java是一个纯粹的面向对象的语言?面向对象语言和面向对象编程
- 炼数成金-Spark大数据平台