diff mbox

[7/9] opengl: add egl-context.[ch] helpers

Message ID 1441797654-15350-8-git-send-email-kraxel@redhat.com
State New
Headers show

Commit Message

Gerd Hoffmann Sept. 9, 2015, 11:20 a.m. UTC
Add helper functions to manage opengl contexts using egl.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/egl-context.h | 14 ++++++++++++++
 ui/Makefile.objs         |  1 +
 ui/egl-context.c         | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 49 insertions(+)
 create mode 100644 include/ui/egl-context.h
 create mode 100644 ui/egl-context.c

Comments

Marc-André Lureau Sept. 11, 2015, 2:13 p.m. UTC | #1
On Wed, Sep 9, 2015 at 1:20 PM, Gerd Hoffmann <kraxel@redhat.com> wrote:
> Add helper functions to manage opengl contexts using egl.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  include/ui/egl-context.h | 14 ++++++++++++++
>  ui/Makefile.objs         |  1 +
>  ui/egl-context.c         | 34 ++++++++++++++++++++++++++++++++++
>  3 files changed, 49 insertions(+)
>  create mode 100644 include/ui/egl-context.h
>  create mode 100644 ui/egl-context.c
>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

> diff --git a/include/ui/egl-context.h b/include/ui/egl-context.h
> new file mode 100644
> index 0000000..a1c8007
> --- /dev/null
> +++ b/include/ui/egl-context.h
> @@ -0,0 +1,14 @@
> +#ifndef EGL_CONTEXT_H
> +#define EGL_CONTEXT_H
> +
> +#include "ui/console.h"
> +#include "ui/egl-helpers.h"
> +
> +qemu_gl_context qemu_egl_create_context(DisplayChangeListener *dcl,
> +                                        struct qemu_gl_params *params);
> +void qemu_egl_destroy_context(DisplayChangeListener *dcl, qemu_gl_context ctx);
> +int qemu_egl_make_context_current(DisplayChangeListener *dcl,
> +                                  qemu_gl_context ctx);
> +qemu_gl_context qemu_egl_get_current_context(DisplayChangeListener *dcl);
> +
> +#endif /* EGL_CONTEXT_H */
> diff --git a/ui/Makefile.objs b/ui/Makefile.objs
> index c62d4d9..9bc64a0 100644
> --- a/ui/Makefile.objs
> +++ b/ui/Makefile.objs
> @@ -31,6 +31,7 @@ ifeq ($(CONFIG_OPENGL),y)
>  common-obj-y += shader.o
>  common-obj-y += console-gl.o
>  common-obj-y += egl-helpers.o
> +common-obj-y += egl-context.o
>  common-obj-$(CONFIG_GTK) += gtk-egl.o
>  endif
>
> diff --git a/ui/egl-context.c b/ui/egl-context.c
> new file mode 100644
> index 0000000..233ed37
> --- /dev/null
> +++ b/ui/egl-context.c
> @@ -0,0 +1,34 @@
> +#include "qemu-common.h"
> +#include "ui/egl-context.h"
> +
> +qemu_gl_context qemu_egl_create_context(DisplayChangeListener *dcl,
> +                                        struct qemu_gl_params *params)
> +{
> +   EGLContext ctx;
> +   EGLint ctx_att[] = {
> +      EGL_CONTEXT_CLIENT_VERSION, params->major_ver,
> +      EGL_CONTEXT_MINOR_VERSION_KHR, params->minor_ver,
> +      EGL_NONE
> +   };
> +
> +   ctx = eglCreateContext(qemu_egl_display, qemu_egl_config,
> +                          eglGetCurrentContext(), ctx_att);
> +   return ctx;
> +}
> +
> +void qemu_egl_destroy_context(DisplayChangeListener *dcl, qemu_gl_context ctx)
> +{
> +    eglDestroyContext(qemu_egl_display, ctx);
> +}
> +
> +int qemu_egl_make_context_current(DisplayChangeListener *dcl,
> +                                  qemu_gl_context ctx)
> +{
> +   return eglMakeCurrent(qemu_egl_display,
> +                         EGL_NO_SURFACE, EGL_NO_SURFACE, ctx);
> +}
> +
> +qemu_gl_context qemu_egl_get_current_context(DisplayChangeListener *dcl)
> +{
> +    return eglGetCurrentContext();
> +}
> --
> 1.8.3.1
>
>
diff mbox

Patch

diff --git a/include/ui/egl-context.h b/include/ui/egl-context.h
new file mode 100644
index 0000000..a1c8007
--- /dev/null
+++ b/include/ui/egl-context.h
@@ -0,0 +1,14 @@ 
+#ifndef EGL_CONTEXT_H
+#define EGL_CONTEXT_H
+
+#include "ui/console.h"
+#include "ui/egl-helpers.h"
+
+qemu_gl_context qemu_egl_create_context(DisplayChangeListener *dcl,
+                                        struct qemu_gl_params *params);
+void qemu_egl_destroy_context(DisplayChangeListener *dcl, qemu_gl_context ctx);
+int qemu_egl_make_context_current(DisplayChangeListener *dcl,
+                                  qemu_gl_context ctx);
+qemu_gl_context qemu_egl_get_current_context(DisplayChangeListener *dcl);
+
+#endif /* EGL_CONTEXT_H */
diff --git a/ui/Makefile.objs b/ui/Makefile.objs
index c62d4d9..9bc64a0 100644
--- a/ui/Makefile.objs
+++ b/ui/Makefile.objs
@@ -31,6 +31,7 @@  ifeq ($(CONFIG_OPENGL),y)
 common-obj-y += shader.o
 common-obj-y += console-gl.o
 common-obj-y += egl-helpers.o
+common-obj-y += egl-context.o
 common-obj-$(CONFIG_GTK) += gtk-egl.o
 endif
 
diff --git a/ui/egl-context.c b/ui/egl-context.c
new file mode 100644
index 0000000..233ed37
--- /dev/null
+++ b/ui/egl-context.c
@@ -0,0 +1,34 @@ 
+#include "qemu-common.h"
+#include "ui/egl-context.h"
+
+qemu_gl_context qemu_egl_create_context(DisplayChangeListener *dcl,
+                                        struct qemu_gl_params *params)
+{
+   EGLContext ctx;
+   EGLint ctx_att[] = {
+      EGL_CONTEXT_CLIENT_VERSION, params->major_ver,
+      EGL_CONTEXT_MINOR_VERSION_KHR, params->minor_ver,
+      EGL_NONE
+   };
+
+   ctx = eglCreateContext(qemu_egl_display, qemu_egl_config,
+                          eglGetCurrentContext(), ctx_att);
+   return ctx;
+}
+
+void qemu_egl_destroy_context(DisplayChangeListener *dcl, qemu_gl_context ctx)
+{
+    eglDestroyContext(qemu_egl_display, ctx);
+}
+
+int qemu_egl_make_context_current(DisplayChangeListener *dcl,
+                                  qemu_gl_context ctx)
+{
+   return eglMakeCurrent(qemu_egl_display,
+                         EGL_NO_SURFACE, EGL_NO_SURFACE, ctx);
+}
+
+qemu_gl_context qemu_egl_get_current_context(DisplayChangeListener *dcl)
+{
+    return eglGetCurrentContext();
+}