simple-egl: Add support for using a 16 bpp EGLConfig

This commit is contained in:
Kristian Høgsberg 2013-10-15 22:03:31 -07:00
parent 1641d14b82
commit 78fe75368a
1 changed files with 33 additions and 8 deletions

View File

@ -92,7 +92,7 @@ struct window {
struct wl_shell_surface *shell_surface;
EGLSurface egl_surface;
struct wl_callback *callback;
int fullscreen, configured, opaque;
int fullscreen, configured, opaque, buffer_size;
};
static const char *vert_shader_text =
@ -115,7 +115,7 @@ static const char *frag_shader_text =
static int running = 1;
static void
init_egl(struct display *display, int opaque)
init_egl(struct display *display, struct window *window)
{
static const EGLint context_attribs[] = {
EGL_CONTEXT_CLIENT_VERSION, 2,
@ -128,15 +128,15 @@ init_egl(struct display *display, int opaque)
EGL_RED_SIZE, 1,
EGL_GREEN_SIZE, 1,
EGL_BLUE_SIZE, 1,
EGL_ALPHA_SIZE, 1,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_NONE
};
EGLint major, minor, n;
EGLint major, minor, n, count, i, size;
EGLConfig *configs;
EGLBoolean ret;
if (opaque)
if (window->opaque || window->buffer_size == 16)
config_attribs[9] = 0;
display->egl.dpy = eglGetDisplay(display->display);
@ -147,9 +147,30 @@ init_egl(struct display *display, int opaque)
ret = eglBindAPI(EGL_OPENGL_ES_API);
assert(ret == EGL_TRUE);
if (!eglGetConfigs(display->egl.dpy, NULL, 0, &count) || count < 1)
assert(0);
configs = calloc(count, sizeof *configs);
assert(configs);
ret = eglChooseConfig(display->egl.dpy, config_attribs,
&display->egl.conf, 1, &n);
assert(ret && n == 1);
configs, count, &n);
assert(ret && n >= 1);
for (i = 0; i < n; i++) {
eglGetConfigAttrib(display->egl.dpy,
configs[i], EGL_BUFFER_SIZE, &size);
if (window->buffer_size == size) {
display->egl.conf = configs[i];
break;
}
}
free(configs);
if (display->egl.conf == NULL) {
fprintf(stderr, "did not find config with buffer size %d\n",
window->buffer_size);
exit(EXIT_FAILURE);
}
display->egl.ctx = eglCreateContext(display->egl.dpy,
display->egl.conf,
@ -705,6 +726,7 @@ usage(int error_code)
fprintf(stderr, "Usage: simple-egl [OPTIONS]\n\n"
" -f\tRun in fullscreen mode\n"
" -o\tCreate an opaque surface\n"
" -s\tUse a 16 bpp EGL config\n"
" -h\tThis help text\n\n");
exit(error_code);
@ -722,12 +744,15 @@ main(int argc, char **argv)
display.window = &window;
window.window_size.width = 250;
window.window_size.height = 250;
window.buffer_size = 32;
for (i = 1; i < argc; i++) {
if (strcmp("-f", argv[i]) == 0)
window.fullscreen = 1;
else if (strcmp("-o", argv[i]) == 0)
window.opaque = 1;
else if (strcmp("-s", argv[i]) == 0)
window.buffer_size = 16;
else if (strcmp("-h", argv[i]) == 0)
usage(EXIT_SUCCESS);
else
@ -743,7 +768,7 @@ main(int argc, char **argv)
wl_display_dispatch(display.display);
init_egl(&display, window.opaque);
init_egl(&display, &window);
create_surface(&window);
init_gl(&window);