xref: /openbmc/qemu/ui/egl-context.c (revision b8eada54b2ad8a7d98d93d5ab4d3e888c5880097)
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