十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
目录
创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、网站制作、大方网络推广、微信平台小程序开发、大方网络营销、大方企业策划、大方品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供大方建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
零基础 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 编程
EGLNativeDisplayType – 系统显示类型,标识你所开发设备的物理屏幕,DX/OPenGL ES/Metal/Vulkan….
EGLNativeWindowType – 系统窗口,渲染显示的窗口句柄
EGLDisplay – 关联 EGLNativeDisplayType 系统物理屏幕的通用数据类型,是平台上 WGL / GLX / AGL 的等价物
EGLSurface – 渲染区域,相当于 OpenGL ES 绘图的画布 (一块内存空间),用户想绘制的信息首先都要先绘制到 EGLSurface 上,然后通过 EGLDisplay 显示
EGLConfig – 对 EGLSurface 的 EGL 配置,可以理解为绘制目标 framebuffer 的配置属性
EGLContext – OpenGL ES 图形上下文
前面有介绍:
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
。EGLContext
上。EGLContext
上,取决于使用的 GPU 的具体实现,可能成功,也可能失败。共享 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);
本文由博客 - 猿说编程 猿说编程 发布!