android egl使用方法,Android EGL整理
官方网址:https://www.khronos.org/registry/EGL/
eglSwapBuffers
Android OpenGL ES相关说明: https://source.android.google.cn/devices/graphics/arch-egl-opengl?hl=zh-cn
参考
https://www.jianshu.com/p/8aa897af47ac
void egl_demo() {
EGLDisplay display = eglGetDisplay (EGL_DEFAULT_DISPLAY); //获取显示器
eglInitialize(display , 0, 0); //初始化显示器
EGLConfig config;
eglChooseConfig(display , attribs, & config, 1, &numConfigs ); //初始化配置
EGLSurface surface = eglCreateWindowSurface(display, config, ANativeWindow , NULL); //创建surface
EGLContext context = eglCreateContext (display, config, NULL , NULL);//创建场景
eglMakeCurrent (display, surface, surface , context);//绑定线程
while(true){ //opengl绘制
glxx();
eglSwapBuffers(display , surface );
}
eglDestroyContext( display , context );//销毁
surface eglDestroySurface(display , surface );//销毁场景
eglTerminate(display );
}
EGLSurface 可以是由 EGL 分配的离屏缓冲区(称为“pbuffer”),也可以是由操作系统分配的窗口。调用 eglCreateWindowSurface() 函数可创建 EGL 窗口 Surface。 eglCreateWindowSurface() 将“窗口对象”作为参数,在 Android 上,该对象是 Surface。Surface 是 BufferQueue 的生产方。使用方(SurfaceView、SurfaceTexture、TextureView 或 ImageReader)创建 Surface。当您调用 eglCreateWindowSurface() 时,EGL 将创建一个新的 EGLSurface 对象,并将其连接到窗口对象的 BufferQueue 的生产方接口。此后,渲染到该 EGLSurface 会导致一个缓冲区离开队列、进行渲染,然后排队等待使用方使用
在上面的demo中的ANativeWindow其实就是由SurfaceFlinger创建的Surface对象,后期交于OpenGL API进行渲染填充。
AOSP中EVS示例解读:packages/services/Car/evs/app
见https://www.jianshu.com/p/8793f0fbd1e6,EGL创建EGLSurface有三个方法:eglCreateWindowSurface()、eglCreatePbufferSurface()和eglCreatePixmapSurface()。
WindowSurface
顾名思义WindowSurface是和窗口相关的,也就是在屏幕上的一块显示区的封装,渲染后即显示在界面上。
PbufferSurface
在显存中开辟一个空间,将渲染后的数据(帧)存放在这里。
PixmapSurface
以位图的形式存放在内存中,据说各平台的支持不是很好。
在AOSP的EVS中使用了eglCreatePbufferSurface
在RenderBase.cpp中使用glGenRenderbuffers- 生成渲染缓冲区对象,使用glGenFramebuffers生成帧缓冲区对象
见EGL官网,eglCreateImage is used to create an EGLImage object from an existing image resource buffer
Android OpenGL 图形系统的接口,主要包括两大部分,一部分是 EGL,它为 OpenGL 渲染准备环境;另一部分是 OpenGL,它执行图形渲染。见:https://www.jianshu.com/p/6eed13ca91ae
EGL库位于:frameworks/native/opengl/libs/EGL
glext_api.in 文件位于 frameworks/native/opengl/libs/GLES_CM/glext_api.in
entries.in 文件位于 frameworks/native/opengl/libs/entries.in
glEGLImageTargetRenderbufferStorageOES使用EGLImage来构建渲染缓冲区
使用void glFramebufferRenderbuffer( GLenum target,
GLenum attachment,
GLenum renderbuffertarget,
GLuint renderbuffer);//将渲染缓冲区挂载到当前帧缓冲区上
class RenderDirectView: public RenderBase //RenderBase的attachRenderTarget将创建渲染缓冲区并将其挂到帧缓冲区中,后续子类RenderDirectView进行的渲染操作都会渲染到帧缓冲区上,而不是系统窗口默认的帧缓冲区,所以对窗口视频输出不会产生影响,这就是离屏渲染。
见:https://www.jianshu.com/p/29a7dde7d21f 帧缓冲区介绍
和纹理图像一样,渲染缓冲对象也是一个缓冲,它可以是一堆字节、整数、像素或者其他东西。
渲染缓冲对象的一大优点是,它以OpenGL原生渲染格式储存它的数据,因此在离屏渲染到帧缓冲的时候,这些数据就相当于被优化过的了。
其中内核缓冲区内存的申请使用frameworks/native/libs/ui实现的,其通过android.hardware.graphics.allocator来访问供应商的接口。可进行一步优化成直接调用供应商接口或者是通过DRM申请。
android egl使用方法,Android EGL整理相关推荐
- android 接口实现方法,Android应用开发之Android 请求网络接口实现方法
本文将带你了解Android应用开发之Android 请求网络接口实现方法,希望本文对大家学Android有所帮助. public class Fragment01 extends Fragmen ...
- android datepicker使用方法,android DatePicker
Date Picker 提供了一个构件去选择一个时间,使用DatePicker构件,该构件允许用户去选择月,日,年在一个界面中. 实例介绍 首先我们应该先创建一个DatePickerDialog,该D ...
- android view使用方法,Android View构造方法第三参数使用方法详解
我们都知道,在Android中要使用一个View,一般会有两种方式: 在XML文件中配置: 直接在代码中new一个View的对象. 我们今天讨论的内容就是围绕着View的构造方法的. 1.实例 首先我 ...
- android返回键方法,Android按返回键(后退键)Back键事件捕获的两种方法
package zhangphil.back; import android.support.v7.app.ActionBarActivity; import android.util.Log; im ...
- android avd 使用方法,Android中Android Virtual Device(AVD)使用教程
AVD的全称为:Android Virtual Device,就是Android运行的虚拟设备,他是Android的模拟器识别.建立的Android要运行,必须创建AVD,每个AVD上可以配置很多的运 ...
- android datepicker使用方法,android中DatePicker和TimePicker的使用方法详解
本文以实例讲述了android中DatePicker和TimePicker的使用方法,具体步骤如下: 下面是实现具体功能的代码,其中main.xml代码为: android:layout_width= ...
- android view使用方法,android – 如何使用getView()方法,它在哪里被调用?
我是Android开发的新手,并且一直遵循Android网站上提供的教程.我目前在视图教程部分,特别是Grid Views: Hello, Grid View Tutorial的教程. 我无法通过适配 ...
- Android代码混淆方法,Android 代码混淆零基础入门
内容提要 本篇文章主要有三个部分,让读者读完后能自己写规则混淆项目 对Android代码怎么开启混淆做一个简单的介绍. 对混淆规则做一个简单介绍: 在混淆过后Crash日志反推代码工具retrace. ...
- android模拟按键方法,Android随笔之——模拟按键操作的几种方式
前几天转过一篇Android上模拟按键操作.触屏事件的博客,昨天又去找了百度.谷歌了一下,写了一点简单的测试代码,留待不时之需.有需要看之前转载的那篇博客的请看这里→_→转:Android随笔之--使 ...
- android 静态工厂方法,Android 源码中的静态工厂方法
我们知道工厂模式有三兄弟,通常我们说的工厂模式指的是工厂方法模式,它的应用频率最高.本篇博客分享的简单工厂模式是工厂方法模式的"小弟",确切的来讲它不属于设计模式,而是一种方法.此 ...
最新文章
- 垃圾清理代码_最近弄了个清理电脑C盘的经验
- vscode用鼠标滚轮_「鼠标」垂直鼠标体验之三 麦塔奇Rockstick2摇杆鼠标
- java ee核心框架实战 pdf_Java EE核心框架实战 高洪岩 中文PDF
- 转入肥胖基因改造RNA,作物增产50%
- Android开发之搜Ya项目说明(3)
- 华为新系统鸿蒙有哪些手机_华为鸿蒙OS系统传来新消息!外媒宣布:未来几年内华为手机都将无缘...
- Spring MVC原理学习之how is return type handled
- flutter 国际化_Flutter 开发实战资源推荐
- jacascript 立即执行函数(IIFE)与闭包
- [最小割][Kruskal] Luogu P5039 最小生成树
- WIFI和蓝牙无线模块的应用小结
- java给pdf加水印_java pdf添加水印
- javascript 动态画心加文字
- Symbol Factory Universal v3.X 工业图形库
- Android C++ Parcel
- Redis 报错: WRONGTYPE Operation against a key holding the wrong kind of value
- 关于计算机的英语谚语,关于英语谚语83句
- 轻快PDF阅读器下载中文版
- 【Keras】使用LSTM预测股票走势
- 计算机应用一级考试win10,2016年计算机一级考试试题「Windows」