我的OpenGL学习进阶之旅EGL简介

Posted 欧阳鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的OpenGL学习进阶之旅EGL简介相关的知识,希望对你有一定的参考价值。

一、EGL简介

1.1 OpenGL ES 命令需要渲染上下文和绘制表面

OpenGL ES 命令需要渲染上下文绘制表面

  • 渲染上下文
    存储相关的OpenGL ES状态
  • 绘制表面
    用于绘制图元的表面,它指定渲染所需的缓冲区类型,例如颜色缓冲区、深度缓冲区和模板缓冲区。绘制表面还要指定所需的缓冲区的位深度

OpenGL ES API 没有提及如何创建渲染上下文,或者渲染上下文如何连接到原生窗口系统。

1.2 EGL是什么?

  • EGL是Khronos渲染API(如OpenGL ES)和 原生窗口系统之间的接口。
  • 在实现OpenGL ES时,没有提供EGL的硬性要求。 开发人员应该参考平台供应商的文档,以确定支持哪个接口。
  • 目前已知的,唯一支持OpenGL ES而不支持EGL的平台是iOS。



1.3 OpenGL ES应用程序渲染之前使用EGL执行的任务

任何OpenGL ES应用程序都必须在开始渲染之前使用EGL执行如下任务:

  1. 查询并初始化设备商可用的显示器。
    例如:翻盖手机可能有两个液晶面板,我们可以使用OpenGL ES渲染可在某一或者两个面板上显示的表面。
  2. 创建渲染表面。
    EGL中创建的表面可以分类为屏幕上的表面或者屏幕外的表面。
    **屏幕上的表面连接到原生窗口系统,而屏幕外的表面是不显示但是可以用作渲染表面的像素缓冲区。**这些表面可以用来渲染纹理,并可以在多个Khronos API之间共享。
  3. 创建渲染上下文。
    EGL是创建OpenGL ES渲染上下文所必需的。这个上下文必须连接到合适的表面才能开始渲染。

EGL API 实现上述功能以及像电源管理、在一个进程中支持多个渲染上下文、在一个进程中跨渲染上下文共享对象(如纹理或者顶点缓冲区)这样的附加功能,并实现获得给定实现支持EGL或者OpenGL ES扩展功能函数指针的机制。

1.4 EGL版本

EGL最新的版本是EGL v1.5

1.5 使用OpenGL ES 3.0 编程

要编写任何OpenGL ES 3.0应用程序,你都必须知道所要包含的头文件以及应用程序需要链接的库文件。

理解EGL使用的语法以及GL命令名、命令参数也很有用。

1.6 库和包含文件

OpenGL ES 3.0应用程序必须与如下库链接:

  • OpenGL ES 3.0 库
  • libGLESv2.lib
  • libEGL.lib

OpenGL ES 3.0应用程序还必须包含相对应的ES 3.0 和 EGL 头文件。
任何OpenGL ES 3.0应用程序都必须包含如下包含文件:

#include <EGL/egl.h>
#include <GLES3/gl3.h>

egl.h 是EGL头文件
gl3.h 是 OpenGL ES 3.0 头文件。

应用程序可以选择性地包含gl2ext.h,这是描述OpenGL ES 2.0/3.0 的Khronos批准的扩展列表的头文件。

#include <GLES3/gl2ext.h>

1.7 EGL 命令语法

所有EGL命令都以egl前缀开始,对组成命令名的每个单词使用首字母大写(例如eglCreateWindowSurface)

相类似,EGL数据类型也是从Egl前缀开始,对于组成类型名的每个单词才有首字母大写(EGLint和EGLenum除外)

下表简单说明了使用的EGL数据类型

数据类型C语言类型EGL类型
32位整数intEGLint
32位无符号整数unsignedintEGLBoolean,EGLenum
指针void *EGLConfig、EGLContext、EGLDisplay、EGLSurface、EGLClientBuffer

参考链接

以上是关于我的OpenGL学习进阶之旅EGL简介的主要内容,如果未能解决你的问题,请参考以下文章

我的OpenGL学习进阶之旅使用glDrawElements绘制的时候,不绘制任何图元,报错 1282 即 GL_INVALID_OPERATION

我的OpenGL学习进阶之旅使用glDrawElements绘制的时候,不绘制任何图元,报错 1282 即 GL_INVALID_OPERATION

我的OpenGL学习进阶之旅NDK开发中find_library查找的系统动态库在哪里?

我的OpenGL学习进阶之旅NDK开发中find_library查找的系统动态库在哪里?

我的OpenGL学习进阶之旅OpenGL ES 3.0实现了具有可编程着色功能的图形管线

我的OpenGL学习进阶之旅OpenGL ES 3.0实现了具有可编程着色功能的图形管线