官方网址: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整理相关推荐

  1. android 接口实现方法,Android应用开发之Android 请求网络接口实现方法

    本文将带你了解Android应用开发之Android 请求网络接口实现方法,希望本文对大家学Android有所帮助. public   class Fragment01 extends Fragmen ...

  2. android datepicker使用方法,android DatePicker

    Date Picker 提供了一个构件去选择一个时间,使用DatePicker构件,该构件允许用户去选择月,日,年在一个界面中. 实例介绍 首先我们应该先创建一个DatePickerDialog,该D ...

  3. android view使用方法,Android View构造方法第三参数使用方法详解

    我们都知道,在Android中要使用一个View,一般会有两种方式: 在XML文件中配置: 直接在代码中new一个View的对象. 我们今天讨论的内容就是围绕着View的构造方法的. 1.实例 首先我 ...

  4. android返回键方法,Android按返回键(后退键)Back键事件捕获的两种方法

    package zhangphil.back; import android.support.v7.app.ActionBarActivity; import android.util.Log; im ...

  5. android avd 使用方法,Android中Android Virtual Device(AVD)使用教程

    AVD的全称为:Android Virtual Device,就是Android运行的虚拟设备,他是Android的模拟器识别.建立的Android要运行,必须创建AVD,每个AVD上可以配置很多的运 ...

  6. android datepicker使用方法,android中DatePicker和TimePicker的使用方法详解

    本文以实例讲述了android中DatePicker和TimePicker的使用方法,具体步骤如下: 下面是实现具体功能的代码,其中main.xml代码为: android:layout_width= ...

  7. android view使用方法,android – 如何使用getView()方法,它在哪里被调用?

    我是Android开发的新手,并且一直遵循Android网站上提供的教程.我目前在视图教程部分,特别是Grid Views: Hello, Grid View Tutorial的教程. 我无法通过适配 ...

  8. Android代码混淆方法,Android 代码混淆零基础入门

    内容提要 本篇文章主要有三个部分,让读者读完后能自己写规则混淆项目 对Android代码怎么开启混淆做一个简单的介绍. 对混淆规则做一个简单介绍: 在混淆过后Crash日志反推代码工具retrace. ...

  9. android模拟按键方法,Android随笔之——模拟按键操作的几种方式

    前几天转过一篇Android上模拟按键操作.触屏事件的博客,昨天又去找了百度.谷歌了一下,写了一点简单的测试代码,留待不时之需.有需要看之前转载的那篇博客的请看这里→_→转:Android随笔之--使 ...

  10. android 静态工厂方法,Android 源码中的静态工厂方法

    我们知道工厂模式有三兄弟,通常我们说的工厂模式指的是工厂方法模式,它的应用频率最高.本篇博客分享的简单工厂模式是工厂方法模式的"小弟",确切的来讲它不属于设计模式,而是一种方法.此 ...

最新文章

  1. 垃圾清理代码_最近弄了个清理电脑C盘的经验
  2. vscode用鼠标滚轮_「鼠标」垂直鼠标体验之三 麦塔奇Rockstick2摇杆鼠标
  3. java ee核心框架实战 pdf_Java EE核心框架实战 高洪岩 中文PDF
  4. 转入肥胖基因改造RNA,作物增产50%
  5. Android开发之搜Ya项目说明(3)
  6. 华为新系统鸿蒙有哪些手机_华为鸿蒙OS系统传来新消息!外媒宣布:未来几年内华为手机都将无缘...
  7. Spring MVC原理学习之how is return type handled
  8. flutter 国际化_Flutter 开发实战资源推荐
  9. jacascript 立即执行函数(IIFE)与闭包
  10. [最小割][Kruskal] Luogu P5039 最小生成树
  11. WIFI和蓝牙无线模块的应用小结
  12. java给pdf加水印_java pdf添加水印
  13. javascript 动态画心加文字
  14. Symbol Factory Universal v3.X 工业图形库
  15. Android C++ Parcel
  16. Redis 报错: WRONGTYPE Operation against a key holding the wrong kind of value
  17. 关于计算机的英语谚语,关于英语谚语83句
  18. 轻快PDF阅读器下载中文版
  19. 【Keras】使用LSTM预测股票走势
  20. 计算机应用一级考试win10,2016年计算机一级考试试题「Windows」

热门文章

  1. S7-1200PLC通过增量式编码器实现速度采集和模拟量采集
  2. 关于手写unshift方法
  3. 【桶哥的问题——吃桶-简化版】【洛谷p2671】求和
  4. CenterNet2:CenterNet再升级,原作者提出基于概率解释的两阶段目标检测
  5. CST——贴片天线仿真
  6. 一篇文章带你认识【集线器、网桥、交换机、路由器、网关】
  7. 学生用计算机怎么转换进制,一种计算机二进制和十进制转换教具的制作方法
  8. 短视频SDK测试tips
  9. 自动激活win7系统的bat文件
  10. typora用Pandoc导出html,typora使用pandoc导出功能