用于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);
所以可以在工程启动阶段先运行此代码,且多线程中,此代码只要执行一次。而其他上下文代码每个线程分别执行。