參考資訊:
https://www.khronos.org/assets/uploads/books/openglr_es_20_programming_guide_sample.pdf
main.c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <dlfcn.h>
#include <unistd.h>
#include <EGL/egl.h>
#include <GLES2/gl2.h>
int main(int argc, char** argv)
{
EGLint egl_major = 0;
EGLint egl_minor = 0;
EGLint num_configs = 0;
EGLConfig configs = {0};
EGLDisplay display = EGL_NO_DISPLAY;
EGLSurface surface = EGL_NO_SURFACE;
EGLContext context = EGL_NO_CONTEXT;
EGLint config_attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
EGL_ALPHA_SIZE, 8,
EGL_NONE
};
EGLint window_attributes[] = {
EGL_RENDER_BUFFER, EGL_BACK_BUFFER,
EGL_NONE
};
EGLint const context_attributes[] = {
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_NONE,
};
display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(display, &egl_major, &egl_minor);
eglChooseConfig(display, config_attribs, &configs, 1, &num_configs);
surface = eglCreateWindowSurface(display, configs, 0, window_attributes);
context = eglCreateContext(display, configs, EGL_NO_CONTEXT, context_attributes);
eglMakeCurrent(display, surface, surface, context);
printf("%s\n", glGetString(GL_VERSION));
eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglDestroyContext(display, context);
eglDestroySurface(display, surface);
eglTerminate(display);
return 0;
}
編譯
$ /opt/a30/bin/arm-linux-gcc main.c -o test -lGLESv2 -lEGL -ldl
執行
# /tmp/test
OpenGL ES 3.2 v1.r20p0-01rel0.4a57f57d7ffe96381524b52ac66837db