package com.example.datalibrary.gl.utils; import android.opengl.EGL14; import android.opengl.EGLConfig; import android.opengl.EGLContext; import android.opengl.EGLDisplay; import android.opengl.EGLSurface; import android.view.Surface; public class EGLUtils { private static final int EGL_RECORDABLE_ANDROID = 0x3142; private EGLSurface eglSurface = EGL14.EGL_NO_SURFACE; private EGLContext eglCtx = EGL14.EGL_NO_CONTEXT; private EGLDisplay eglDis = EGL14.EGL_NO_DISPLAY; public void initEGL(Surface surface) { eglDis = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY); int[] version = new int[2]; EGL14.eglInitialize(eglDis, version, 0, version, 1); int[] confAttr = new int[]{ EGL14.EGL_SURFACE_TYPE,EGL14.EGL_WINDOW_BIT, EGL14.EGL_RED_SIZE, 8, EGL14.EGL_GREEN_SIZE, 8, EGL14.EGL_BLUE_SIZE, 8, EGL14.EGL_ALPHA_SIZE, 8, EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT, EGL_RECORDABLE_ANDROID, 1, EGL14.EGL_SAMPLE_BUFFERS, 1, EGL14.EGL_SAMPLES, 4, EGL14.EGL_NONE }; EGLConfig[] configs = new EGLConfig[1]; int[] numConfigs = new int[1]; EGL14.eglChooseConfig(eglDis, confAttr, 0, configs, 0, 1, numConfigs, 0); int[] ctxAttr = new int[]{ EGL14.EGL_CONTEXT_CLIENT_VERSION, 2, // 0x3098 EGL14.EGL_NONE }; eglCtx = EGL14.eglCreateContext(eglDis, configs[0], EGL14.EGL_NO_CONTEXT, ctxAttr, 0); int[] surfaceAttr = { EGL14.EGL_NONE }; eglSurface = EGL14.eglCreateWindowSurface(eglDis, configs[0], surface, surfaceAttr, 0); EGL14.eglMakeCurrent(eglDis, eglSurface, eglSurface, eglCtx); } public EGLContext getContext() { return eglCtx; } public void swap() { EGL14.eglSwapBuffers(eglDis, eglSurface); } public void release() { if (eglSurface != EGL14.EGL_NO_SURFACE) { EGL14.eglMakeCurrent(eglDis, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_CONTEXT); EGL14.eglDestroySurface(eglDis, eglSurface); eglSurface = EGL14.EGL_NO_SURFACE; } if (eglCtx != EGL14.EGL_NO_CONTEXT) { EGL14.eglDestroyContext(eglDis, eglCtx); eglCtx = EGL14.EGL_NO_CONTEXT; } if (eglDis != EGL14.EGL_NO_DISPLAY) { EGL14.eglTerminate(eglDis); eglDis = EGL14.EGL_NO_DISPLAY; } } }