设为首页 加入收藏

TOP

OpenGL ES EGL eglMakeCurrent(一)
2023-07-23 13:31:33 】 浏览:150
Tags:OpenGL EGL eglMakeCurrent

目录

零基础 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 的配置属性

EGLContextOpenGL ES 图形上下文

二. EGL 绘制流程简介

  1. 获取 EGL Display 对象:eglGetDisplay
  2. 初始化与 EGLDisplay 之间的连接:eglInitialize
  3. 获取 EGLConfig 对象:eglChooseConfig / eglGetConfigs
  4. 创建 EGLContext 实例:eglCreateContext
  5. 创建 EGLSurface 实例:eglCreateWindowSurface / eglCreatePbufferSurface
  6. 连接 EGLContext 和 EGLSurface 上下文 eglMakeCurrent
  7. 使用 OpenGL ES API 绘制图形:gl_*
  8. 切换 front buffer 和 back buffer 显示:eglSwapBuffer
  9. 断开并释放与 EGLSurface 关联的 EGLContext 对象:eglRelease
  10. 删除 EGLSurface 对象
  11. 删除 EGLContext 对象
  12. 终止与 EGLDisplay 之间的连接

三.eglMakeCurrent 函数简介

EGLContext 上下文包含了操作所需的所有状态信息,OpenGL ES 必须有一个可用的上下文才能进行绘图。

1.eglMakeCurrent 简介

创建了 EGLSurface 和 EGLContext 之后,因为可能有多个 EGLSurface 和 EGLContext ,所以需要通过 eglMakeCurrent 绑定 EGLSurface 来指定当前上下文

/*描述:创建 OpenGL ES EGLSurface
 *参数:
 *    display:指定显示的连接
 *    draw:EGL 绘图表面
 *    read:EGL 绘图表面
 *    context:通过 eglCreateContext 创建的上下文
 *
 *返回值:成功是返回 EGL_TRUE,失败时返回 EGL_FALSE
 */

EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(
        	EGLDisplay display,
                EGLSurface draw,
              	EGLSurface read,
                EGLContext context);

相关错误码:

EGL_BAD_MATCH :提供了与窗口属性不匹配的 EGLConfig,或该 EGLConfig 不支持渲染EGL_BAD_DISPLAY
EGL_NOT_INITIALIZED
EGL_BAD_SURFACE
EGL_BAD_CONTEXT
EGL_BAD_MATCH
EGL_BAD_ACCESS
EGL_BAD_NATIVE_PIXMAP
EGL_BAD_NATIVE_WINDOW
EGL_BAD_CURRENT_SURFACE
EGL_BAD_ALLOC
EGL_CONTEXT_LOST

2.eglMakeCurrent 实现

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES EGL eglMakeCurrent
//@Time:2022/08/04 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/


EGLBoolean eglMakeCurrent(  EGLDisplay dpy, EGLSurface draw,

                            EGLSurface read, EGLContext ctx)

{

    if (egl_display_t::is_valid(dpy) == EGL_FALSE)

        return setError(EGL_BAD_DISPLAY, EGL_FALSE);

    if (draw) {

        egl_surface_t* s = (egl_surface_t*)draw;

        if (!s->isValid())

            return setError(EGL_BAD_SURFACE, EGL_FALSE);

        if (s->dpy != dpy)

            return setError(EGL_BAD_DISPLAY, EGL_FALSE);

        // TODO: check that draw is compatible with the context

    }

    if (read && read!=draw) {

        egl_surface_t* s = (egl_surface_t*)read;

        if (!s->isValid())

            return setError(EGL_BAD_SURFACE, EGL_FALSE);

        if (s->dpy != dpy)

            return setError(EGL_BAD_DISPLAY, EGL_FALSE);

        // TODO: check that read is compatible with the context

    }



    EGLContext current_ctx = EGL_NO_CONTEXT;



    if ((rea
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇计算机等级考试二级C语言模拟试卷.. 下一篇计算机等级考试二级C语言模拟试卷..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目