OpenGL渲染中使用EGL创建上下文

发布时间:2024年01月24日

用于linux环境下离屏渲染。直接上代码

#include <EGL/egl.h>
#include <GLES2/gl2.h>

  EGLDisplay display;
  EGLSurface surface;
  EGLContext context;
  

  display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
  eglInitialize(display, NULL, NULL);
	    // 2. 配置EGL
	    const EGLint configAttributes[] = {
	        EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
	        EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
	        EGL_RED_SIZE, 8,
	        EGL_GREEN_SIZE, 8,
	        EGL_BLUE_SIZE, 8,
	        EGL_ALPHA_SIZE, 8,
	        EGL_NONE
	    };
		
  EGLConfig config;
  EGLint numConfigs;
  eglChooseConfig(display, configAttributes, &config, 1, &numConfigs);

  // 3. 创建上下文
  const EGLint contextAttributes[] = {
      EGL_CONTEXT_CLIENT_VERSION, 2,
      EGL_NONE
  };
  context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttributes);

  // 4. 创建离屏渲染表面
  const EGLint pbufferAttributes[] = {
      EGL_WIDTH, 500,
      EGL_HEIGHT, 500,
      EGL_NONE
  };
  surface = eglCreatePbufferSurface(display, config, pbufferAttributes);

  // 5. 激活上下文
  EGLBoolean result = eglMakeCurrent(display, surface, surface, context);

  // 6. 释放资源
  eglDestroySurface(display, surface);
  eglDestroyContext(display, context);
  eglTerminate(display);

其中在初始化代码位置会停留几秒种

eglInitialize(display, NULL, NULL);

所以可以在工程启动阶段先运行此代码,且多线程中,此代码只要执行一次。而其他上下文代码每个线程分别执行。

文章来源:https://blog.csdn.net/tigerda/article/details/135814509
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。