OpenGL for C++ 01. OpenGL 导入库后创建EGL环境

opengl 相关的库

egl 的环境
在cmakeList 中添加这三个库

  1. EGL
  2. GLESv2
  3. android

引入库

在c++ 文件中引入三个库的头文件


#include "EGL/egl.h"
#include "GLES2/gl2.h"
#include "android/native_window.h"

不报错那么库就导入成功了.

EGL创建流程

1、得到默认的显示设备(就是窗口) – eglGetDisplay
2、初始化默认显示设备 – eglInitialize
3、设置显示设备的属性
4、从系统中获取对应属性的配置 – eglChooseConfig
5、创建EglContext – eglCreateContext
6、创建渲染的Surface – eglCreateWindowSurface
7、绑定EglContext和Surface到显示设备中 – eglMakeCurrent
8、刷新数据,显示渲染场景 – eglSwapBuffers

1、得到默认的显示设备(就是窗口) – eglGetDisplay

 eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
    if (eglDisplay == EGL_NO_DISPLAY) {

        return -1;

    }

2、初始化默认显示设备 – eglInitialize

    EGLint *version = new EGLint[2];
    if(!eglInitialize(eglDisplay,&version[0],&version[1])) {
        return -1;
    }

3、设置显示设备的属性

//3、设置显示设备的属性
    const EGLint attribs[] = {
        EGL_RED_SIZE,8,
        EGL_GREEN_SIZE,8,
        EGL_BLUE_SIZE,8,
        EGL_ALPHA_SIZE,8,
        EGL_DEPTH_SIZE,8,
        EGL_STENCIL_SIZE,8,
        EGL_RENDERABLE_TYPE,EGL_OPENGL_ES2_BIT,
        EGL_NONE
            
    };

EGL_RED_SIZE RED 红色 8字节
同理 下面是 绿色 蓝色 透明度信息 以及占的字节数

EGL_DEPTH_SIZE,8, 深度测试
EGL_STENCIL_SIZE,8, 模板测试
EGL_RENDERABLE_TYPE,EGL_OPENGL_ES2_BIT, EGL api的等级
EGL_NONE 结束标识符号 EGL_NONE是一组一组的匹配 并结束

4、从系统中获取对应属性的配置 – eglChooseConfig num_config

 EGLint num_config;
  if(!eglChooseConfig(eglDisplay, attribs, NULL, 1, &num_config)){//这一步是为了获得num_config 的值
      LOGE("eglChooseConfig error 1");
      return -1;
  }


  if(!eglChooseConfig(eglDisplay, attribs, &eglConfig, num_config, &num_config)){
      LOGE("eglChooseConfig error 2");
      return -1;
  }

5、创建EglContext – eglCreateContext

 //版本号
 int attrib_list[]={
         EGL_CONTEXT_CLIENT_VERSION ,2,
         EGL_NONE
 };
 
 eglContext = eglCreateContext(eglDisplay, eglConfig, EGL_NO_CONTEXT, attrib_list);
 if (eglContext == EGL_NO_CONTEXT) {
     LOGE("eglCreateContext create error ");
     return -1;
 }
 

6、创建渲染的Surface – eglCreateWindowSurface

    eglSurface = eglCreateWindowSurface(eglDisplay, eglConfig, window, NULL);
    if (eglSurface == EGL_NO_SURFACE) {
        LOGE("eglCreateWindowSurface create error ");
        return -1;
    }   

window 是初始化调用initEgl函数 初始化EGL 传递进来的

typedef struct ANativeWindow*           EGLNativeWindowType;     

EGLNativeWindowType win  

7、绑定EglContext和Surface到显示设备中 – eglMakeCurrent

 if(!eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext)){
        LOGE("eglMakeCurrent create error ");
        return -1;
    }
    

8、刷新数据,显示渲染场景 – eglSwapBuffers

//8、刷新数据,显示渲染场景 – eglSwapBuffers 单独写个方法

int WlEglHelper::swapBuffers() {
    if (eglDisplay != EGL_NO_DISPLAY && eglSurface != EGL_NO_SURFACE) {

        if (!eglSwapBuffers(eglDisplay, eglSurface)) {
            return 0;
        }
    }

    return -1;
}

//销毁

void WlEglHelper::destroyEgl() {

    if (eglDisplay != EGL_NO_DISPLAY) {
        eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);

    }
    if (eglDisplay != EGL_NO_DISPLAY && eglSurface != EGL_NO_SURFACE) {
        eglDestroyContext(eglDisplay, eglSurface);
        eglSurface = EGL_NO_SURFACE;
    }
    if (eglDisplay != EGL_NO_DISPLAY && eglContext != EGL_NO_CONTEXT) {

        eglDestroySurface(eglDisplay, eglContext);
        eglContext = EGL_NO_CONTEXT;
    }
    if (eglDisplay != EGL_NO_DISPLAY) {
        eglTerminate(eglDisplay);
        eglContext = EGL_NO_DISPLAY;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值