码农知识堂 - 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
  • 相关阅读:
    基于FPGA的OV7670摄像头实时检测
    集成学习(一):简述集成学习
    详解Spring面试IoC和AOP
    监控GreenPlum表的增量代码怎么写比较合适
    Word控件Spire.Doc 【图像形状】教程(1) ;如何在 Word 中插入图像(C#/VB.NET)
    Golang-channel合集——源码阅读、工作流程、实现原理、已关闭channel收发操作、优雅的关闭等面试常见问题。
    七、 循环
    Codeforces Round #831 (Div. 1 + Div. 2)——A、B、C、D、E
    网络通信基础
    Spring Data JDBC & Spring Data JPA
  • 原文地址:https://blog.csdn.net/ZhaDeNianQu/article/details/126959052
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号