OpenGL ES EGL eglSwapBuffer
目录
- 一. EGL 前言
- 二. EGL 绘制流程简介
- 三.eglSwapBuffer 函数简介
- 四.关于多个 EGLContext
- 五.共享 EGLContext
- 六.猜你喜欢
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 转场
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 函数
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES GPUImage 使用
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES GLSL 编程
一. EGL 前言
EGLNativeDisplayType – 系统显示类型,标识你所开发设备的物理屏幕,DX/OPenGL ES/Metal/Vulkan….
EGLNativeWindowType – 系统窗口,渲染显示的窗口句柄
EGLDisplay – 关联 EGLNativeDisplayType 系统物理屏幕的通用数据类型,是平台上 WGL / GLX / AGL 的等价物
EGLSurface – 渲染区域,相当于 OpenGL ES 绘图的画布 (一块内存空间),用户想绘制的信息首先都要先绘制到 EGLSurface 上,然后通过 EGLDisplay 显示
EGLConfig – 对 EGLSurface 的 EGL 配置,可以理解为绘制目标 framebuffer 的配置属性
EGLContext – OpenGL ES 图形上下文
二. EGL 绘制流程简介
- 获取 EGL Display 对象:eglGetDisplay
- 初始化与 EGLDisplay 之间的连接:eglInitialize
- 获取 EGLConfig 对象:eglChooseConfig / eglGetConfigs
- 创建 EGLContext 实例:eglCreateContext
- 创建 EGLSurface 实例:eglCreateWindowSurface / eglCreatePbufferSurface
- 连接 EGLContext 和 EGLSurface 上下文 eglMakeCurrent
- 使用 OpenGL ES API 绘制图形:gl_*
- 切换 front buffer 和 back buffer 显示:eglSwapBuffer
- 断开并释放与 EGLSurface 关联的 EGLContext 对象:eglRelease
- 删除 EGLSurface 对象
- 删除 EGLContext 对象
- 终止与 EGLDisplay 之间的连接
三.eglSwapBuffer 函数简介
前面有介绍:
EGLDisplay – 关联 EGLNativeDisplayType 系统物理屏幕的通用数据类型,是平台上 WGL / GLX / AGL 的等价物
EGLSurface – 渲染区域,相当于 OpenGL ES 绘图的画布 (一块内存空间),用户想绘制的信息首先都要先绘制到 EGLSurface 上,然后通过 EGLDisplay 显示
EGLSurface 作为内存中的画布(不可见),EGLDisplay 作为显示器输出显示(可见)**,而 eglSwapBuffer 作用就是把内存 EGLSurface** **中画布中的数据交换到 EGLDisplay ,输出到屏幕显示绘制的内容**
/*描述:把内存 EGLSurface 中画布中的数据交换到 EGLDisplay ,输出到屏幕显示绘制的内容*参数:* display:指定显示的连接* surface:EGL 绘图表面**返回值:成功是返回 EGL_TRUE,失败时返回 EGL_FALSE*/EGLBoolean eglSwapBuffers(EGLDisplay display,EGLSurface surface);
四.关于多个 EGLContext
某些情况下,我们想创建、使用多个 EGLContext ,对于这种情况,需要注意以下几个情况:
- 不能在 2 个线程里绑定同一个
EGLContext
。 - 不能在 2 个不同的线程里,绑定相同的 EGLSurface 到 2 个不同的
EGLContext
上。 - 在 2 个不同的线程里,绑定 2 个不同 EGLSurface 到 2 个
EGLContext
上,取决于使用的 GPU 的具体实现,可能成功,也可能失败。
五.共享 EGLContext
共享 EGLContext 这种方式在加载阶段很有用。由于上传数据到 GPU(尤其是纹理数据(textures))这类操作很重,如果想要维持帧率稳定,应该在另一个线程进行上传。
然而,对于上面多个 EGLContext 的 3 种情况的限制,必须在第一个 EGLContext 之外,创建第二个 EGLContext ,这个 EGLContext 将使用第一个 EGLContext 使用的内部状态信息。这两个 Context 即共享 Context 上下文。
**需要注意的是:这****两个 EGLContext 共享的只是内部状态信息,它们两个并不共享调用缓存(每个 EGLContext** 各自拥有一个调用缓存)。
创建第二个 EGLContext 的方法:
/*描述:创建 OpenGL ES 上下文 EGLContext*参数:* display:指定显示的连接* config:配置 EGLConfig* share_context:允许其它 EGLContext 共享数据,使用 EGL_NO_CONTEXT 表示不共享* attribList:指定操作的属性列表,只能接受一个属性 EGL_CONTEXT_CLIENT_VERSION(设置 OpenGL ES 版本)**返回值:成功时返回新创建的 EGLContext,失败时返回 EGL_NO_CONTEXT*/EGLContext eglCreateContext(EGLDisplay display,EGLConfig config,EGLContext share_context,EGLint const * attrib_list);
注意:第三个参数
share_context
是最重要的,它就是第一个 Context ,表示共享上下文
在第二个线程,不进行任何的绘制,只进行上传数据到 GPU 的操作。所以,给第二个 Context 的 Surface 应该是一个像素缓冲 (pixel buffer) Surface。
/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES EGL eglCreatePbufferSurface
//@Time:2022/08/04 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/EGLSurface eglCreatePbufferSurface(EGLDisplay display,EGLConfig config,EGLint const * attrib_list);
六.猜你喜欢
- OpenGL ES 简介
- OpenGL ES 版本介绍
- OpenGL ES 2.0 和 3.0 区别
- OpenGL ES 名词解释(一)
- OpenGL ES 名词解释(二)
- OpenGL ES GLSL 着色器使用过程
- OpenGL ES EGL 简介
- OpenGL ES EGL 名词解释
- OpenGL ES EGL eglGetDisplay
- OpenGL ES EGL eglInitialize
- OpenGL ES EGL eglGetConfigs
- OpenGL ES EGL eglChooseConfig
- OpenGL ES EGL eglGetError
- OpenGL ES EGL eglCreateContext
- OpenGL ES EGL eglCreateWindowSurface
- OpenGL ES EGL eglCreatePbufferSurface
- OpenGL ES EGL eglMakeCurrent
- OpenGL ES EGL eglSwapBuffer
OpenGL ES EGL eglSwapBuffer相关推荐
- OpenGL ES EGL eglDestroyContext
目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglDestroyContext 函数简介 四.eglDestroyContext 使用 四.猜你喜欢 零基础 OpenGL ES 学习路线 ...
- OpenGL ES EGL eglQueryContext
目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglQueryContext 函数简介 四.eglQueryContext 使用 四.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : ...
- OpenGL ES EGL eglDestroySurface
目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglDestroySurface 函数简介 四.eglDestroySurface 使用 四.猜你喜欢 零基础 OpenGL ES 学习路线 ...
- OpenGL ES EGL eglCreatePbufferSurface
目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglCreatePbufferSurface 函数简介 1.eglCreatePbufferSurface 简介 2.eglCreatePb ...
- OpenGL ES EGL 简介
目录 一.EGL 简介 二.EGL 跨平台之 ANGLE 1.ANGLE 支持跨平台 2.ANGLE 支持渲染器 3.ANGLE 下载地址 三.EGL 坐标系 四.EGL 绘图步骤 五.猜你喜欢 零基 ...
- OpenGL ES EGL TLS(线程局部存储) G3D
1. 什么是EGL EGL是用来管理绘图表面的(Drawing surfaces),并且提供了如下的机制 (1) 与本地窗口系统进行通信 (2) 查找绘图表面可用的类型和配置信息 (3) 创建绘图表面 ...
- OpenGL ES glut glew glfw glad freeglut
目录 一.简介 1.freeglut 2.glew 3.glut 4.glfw 5.glad 二.分类 1.窗口管理 2.函数加载 三.组合使用 1.freeglut + glew 2.glfw + ...
- OpenGL ES glfw 下载和使用
目录 一.glfw 简介 二.glfw 下载 三.glfw 编译 四.glfw 使用 1.OpenGL glfw + glad 效果演示 2.OpenGL glfw + glad <源码下载&g ...
- OpenGL ES freeglut 下载和使用
目录 一.freeglut 简介 二.freeglut 下载 五.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基 ...
最新文章
- win7旗舰版下配置IIS服务器
- 面试官扎心一问:数据量很大,分页查询很慢,有什么优化方案?
- 蓝桥杯练习系统习题-算法训练1
- VSCode插件开发全攻略(六)开发调试技巧
- 一些在数字化转型的方面的公司和例子
- Spring Boot (1) 构建第一个Spring Boot工程
- 微软请你学Linux第三季: 6月最后的约会,再次诚意邀请!
- 中国象棋口诀及要领精髓
- [bzoj1026] [SCOI2009]windy数
- oracle下查询的sql已经超出IIS响应时间
- AlphaZero问世:8小时完爆围棋、国际象棋、日本将棋(转)
- 通过Log4j生成CSV格式日志时自动插入表头处理方法
- MySQL 聚簇索引和非聚簇索引 mysql 索引为啥用b 树
- 洛谷 P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
- 苹果自带的APP下载分析统计工具
- css:css样式背景图片设置透明度,css如何设置背景图片的透明度
- java去掉可最后一个逗号
- 计算机网络实验1:HTTP 代理服务器的设计与实现
- GitHub 安装失败 Win7 64位
- 论文笔记:深度学习方法的翼型设计及性能预测代理模型
热门文章
- 计算机网络三大基本的功能,Internet
- c++ opencv 图像处理:直方图处理(直方图均衡化,直方图匹配(规定化))
- Qt局域网聊天(私聊/截图/文件/语音)
- 计算机配件声卡,什么是声卡?声卡(也叫音频卡)是mpc的必要部件,它是计算机进行 爱问知识人...
- HDU 4808 数学 期望 积分
- 自媒体写作如何提高文章原创度?4个步骤,教你轻松去重
- 矩阵理论| 特殊矩阵:酉矩阵、旋转与镜射
- python 处理json数据
- 三菱plc pwm指令_三菱PLC高速指令汇总,使用方法讲解!
- create-react-app项目添加webpack.config.js配置文件