码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • OpenGL ES EGL eglGetDisplay


    目录

    • 一. EGL 前言
    • 二. EGL 绘制流程简介
    • 三. eglGetDisplay
      • 1.使用系统默认显示类型
      • 2.强制启用 OpenGL 渲染
      • 3.强制启用 DX 渲染
      • 4.检查返回值
    • 四.猜你喜欢

    零基础 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 – 渲染区域,系统窗口或 frame buffer 句柄 ,可以理解为一个后端的渲染目标窗口

    EGLConfig – 对 EGLSurface 的 EGL 配置,可以理解为绘制目标 framebuffer 的配置属性

    EGLContext – OpenGL ES 图形上下文

    二. EGL 绘制流程简介

    1. 获取 EGL Display 对象:eglGetDisplay
    2. 初始化与 EGLDisplay 之间的连接:eglInitialize
    3. 获取 EGLConfig 对象:eglChooseConfig
    4. 创建 EGLContext 实例:eglCreateContext
    5. 创建 EGLSurface 实例:eglCreateWindowSurface
    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 之间的连接

    三. eglGetDisplay

    **在不同平台上有不同的机制以关联窗口系统,在 Windows 上是 WGL ,在 Linux 上是 GLX ,在 Apple OS 上是 AGL 等。 **

    EGL 则是平台上 WGL / GLX / AGL 的等价物。eglGetDisplay 为原生窗口系统 displayId 获取一个 EGL display 连接,在 OpenGL ES 与本地窗口系统之间架起了一座沟通的桥梁,函数声明如下:

    /* 描述:获取 EGLDisplay 对象 显示设备
     * 参数:
     *   displayId:系统显示类型
     *
     * 返回值:成功返回 EGLDisplay 对象,失败返回 EGL_NO_DISPLAY
     */
     EGLDisplay eglGetDisplay(EGLNativeDisplayType displayId);
    

    1.使用系统默认显示类型

    EGLNativeDisplayType 默认为 EGL_DEFAULT_DISPLAY ,即返回与默认原生窗口的连接,在 Windows 中默认为 DX 渲染

    EGLDisplay eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);    //两种写法任选其一,效果等价
    EGLDisplay eglDisplay = eglGetDisplay(0);                      //两种写法任选其一,效果等价 
    

    2.强制启用 OpenGL 渲染

    OpenGL 选择 EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE

    //OpenGL 选择 EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE
     EGLAttrib dispattrs[] = { EGL_PLATFORM_ANGLE_TYPE_ANGLE,
                 EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE,EGL_NONE };
    
     EGLDisplay eglDisplay = eglGetPlatformDisplay(EGL_PLATFORM_ANGLE_ANGLE,
                 EGL_DEFAULT_DISPLAY, dispattrs);
    

    3.强制启用 DX 渲染

    DX 选择 EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 或者 EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE

     //DX 选择 EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 或者 EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE
     EGLAttrib dispattrs[] = { EGL_PLATFORM_ANGLE_TYPE_ANGLE,
                 EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE,EGL_NONE };
    
     EGLDisplay eglDisplay = eglGetPlatformDisplay(EGL_PLATFORM_ANGLE_ANGLE,
                 EGL_DEFAULT_DISPLAY, dispattrs);
    

    4.检查返回值

    EGLDisplay eglDisplay = eglGetDisplay(EGLNativeDisplayType displayId);
     if (eglDisplay == EGL_NO_DISPLAY || eglGetError() != EGL_SUCCESS))
        return error;
     else
        return success;
    

    四.猜你喜欢

    1. OpenGL ES 简介
    2. OpenGL ES 版本介绍
    3. OpenGL ES 2.0 和 3.0 区别
    4. OpenGL ES 名词解释(一)
    5. OpenGL ES 名词解释(二)
    6. OpenGL ES GLSL 着色器使用过程
    7. OpenGL ES EGL 简介
    8. OpenGL ES EGL 名词解释
    9. OpenGL ES EGL eglGetDisplay
    10. OpenGL ES EGL eglInitialize
  • 相关阅读:
    图像处理中几何畸变校正,图像纠正的方法有哪些
    Ubuntu 内核降级到指定版本
    51单片机学习/直流电机驱动
    c# HttpClient 获取cookie
    不见他过: 职场经验
    Ubuntu系统之管理文件权限一
    Linux C/C++实现时间戳转换工具
    项目实战——配置MySQL与Spring Security模块
    Spring Boot中Jack相关问题(精度丢失/日期格式化/忽略null值)
    【无标题】
  • 原文地址:https://blog.csdn.net/ZhaDeNianQu/article/details/126959052
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号