1e16f4c87SPeter Maydell #include "qemu/osdep.h"
21d48c9fdSMarc-André Lureau #include "qemu/error-report.h"
36c18744dSGerd Hoffmann #include "ui/egl-context.h"
46c18744dSGerd Hoffmann
qemu_egl_create_context(DisplayGLCtx * dgc,QEMUGLParams * params)55e79d516SMarc-André Lureau QEMUGLContext qemu_egl_create_context(DisplayGLCtx *dgc,
66c18744dSGerd Hoffmann QEMUGLParams *params)
76c18744dSGerd Hoffmann {
86c18744dSGerd Hoffmann EGLContext ctx;
954d208ffSGerd Hoffmann EGLint ctx_att_core[] = {
10bc8c946fSGerd Hoffmann EGL_CONTEXT_OPENGL_PROFILE_MASK, EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT,
116c18744dSGerd Hoffmann EGL_CONTEXT_CLIENT_VERSION, params->major_ver,
126c18744dSGerd Hoffmann EGL_CONTEXT_MINOR_VERSION_KHR, params->minor_ver,
136c18744dSGerd Hoffmann EGL_NONE
146c18744dSGerd Hoffmann };
1554d208ffSGerd Hoffmann EGLint ctx_att_gles[] = {
1654d208ffSGerd Hoffmann EGL_CONTEXT_CLIENT_VERSION, params->major_ver,
1754d208ffSGerd Hoffmann EGL_CONTEXT_MINOR_VERSION_KHR, params->minor_ver,
1854d208ffSGerd Hoffmann EGL_NONE
1954d208ffSGerd Hoffmann };
20*154fd4d1SMarkus Armbruster bool gles = (qemu_egl_mode == DISPLAY_GL_MODE_ES);
216c18744dSGerd Hoffmann
226c18744dSGerd Hoffmann ctx = eglCreateContext(qemu_egl_display, qemu_egl_config,
2354d208ffSGerd Hoffmann eglGetCurrentContext(),
2454d208ffSGerd Hoffmann gles ? ctx_att_gles : ctx_att_core);
256c18744dSGerd Hoffmann return ctx;
266c18744dSGerd Hoffmann }
276c18744dSGerd Hoffmann
qemu_egl_destroy_context(DisplayGLCtx * dgc,QEMUGLContext ctx)285e79d516SMarc-André Lureau void qemu_egl_destroy_context(DisplayGLCtx *dgc, QEMUGLContext ctx)
296c18744dSGerd Hoffmann {
306c18744dSGerd Hoffmann eglDestroyContext(qemu_egl_display, ctx);
316c18744dSGerd Hoffmann }
326c18744dSGerd Hoffmann
qemu_egl_make_context_current(DisplayGLCtx * dgc,QEMUGLContext ctx)335e79d516SMarc-André Lureau int qemu_egl_make_context_current(DisplayGLCtx *dgc,
346c18744dSGerd Hoffmann QEMUGLContext ctx)
356c18744dSGerd Hoffmann {
361d48c9fdSMarc-André Lureau if (!eglMakeCurrent(qemu_egl_display,
371d48c9fdSMarc-André Lureau EGL_NO_SURFACE, EGL_NO_SURFACE, ctx)) {
381d48c9fdSMarc-André Lureau error_report("egl: eglMakeCurrent failed: %s", qemu_egl_get_error_string());
391d48c9fdSMarc-André Lureau return -1;
401d48c9fdSMarc-André Lureau }
411d48c9fdSMarc-André Lureau
421d48c9fdSMarc-André Lureau return 0;
436c18744dSGerd Hoffmann }
44