我的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执行如下任务:
- 查询并初始化设备商可用的显示器。
例如:翻盖手机可能有两个液晶面板,我们可以使用OpenGL ES渲染可在某一或者两个面板上显示的表面。 - 创建渲染表面。
EGL中创建的表面可以分类为屏幕上的表面或者屏幕外的表面。
**屏幕上的表面连接到原生窗口系统,而屏幕外的表面是不显示但是可以用作渲染表面的像素缓冲区。**这些表面可以用来渲染纹理,并可以在多个Khronos API之间共享。 - 创建渲染上下文。
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位整数 | int | EGLint |
32位无符号整数 | unsignedint | EGLBoolean,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查找的系统动态库在哪里?