x11: Use EGL instead of GLX when drawing using GLES
When running as a X11 CM we shouldn't use the GLX winsys when the driver doesn't support it, i.e. OpenGL ES drivers. https://bugzilla.gnome.org/show_bug.cgi?id=771636
This commit is contained in:
parent
5d3e7d6ffd
commit
ac813d5285
@ -42,7 +42,7 @@
|
|||||||
#include <cogl/winsys/cogl-winsys-egl-private.h>
|
#include <cogl/winsys/cogl-winsys-egl-private.h>
|
||||||
#include <cogl/winsys/cogl-winsys-private.h>
|
#include <cogl/winsys/cogl-winsys-private.h>
|
||||||
|
|
||||||
void cogl_renderer_set_custom_winsys (CoglRenderer *renderer,
|
void cogl_renderer_set_custom_winsys (CoglRenderer *renderer,
|
||||||
CoglWinsysVtableGetter winsys_vtable_getter);
|
CoglCustomWinsysVtableGetter winsys_vtable_getter);
|
||||||
|
|
||||||
#endif /* __COGL_MUTTER_H___ */
|
#endif /* __COGL_MUTTER_H___ */
|
||||||
|
@ -39,12 +39,13 @@
|
|||||||
#include "cogl-texture-driver.h"
|
#include "cogl-texture-driver.h"
|
||||||
#include "cogl-context.h"
|
#include "cogl-context.h"
|
||||||
#include "cogl-closure-list-private.h"
|
#include "cogl-closure-list-private.h"
|
||||||
#include "cogl-mutter.h"
|
|
||||||
|
|
||||||
#ifdef COGL_HAS_XLIB_SUPPORT
|
#ifdef COGL_HAS_XLIB_SUPPORT
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef const CoglWinsysVtable *(*CoglCustomWinsysVtableGetter) (CoglRenderer *renderer);
|
||||||
|
|
||||||
struct _CoglRenderer
|
struct _CoglRenderer
|
||||||
{
|
{
|
||||||
CoglObject _parent;
|
CoglObject _parent;
|
||||||
@ -53,7 +54,7 @@ struct _CoglRenderer
|
|||||||
const CoglDriverVtable *driver_vtable;
|
const CoglDriverVtable *driver_vtable;
|
||||||
const CoglTextureDriver *texture_driver;
|
const CoglTextureDriver *texture_driver;
|
||||||
const CoglWinsysVtable *winsys_vtable;
|
const CoglWinsysVtable *winsys_vtable;
|
||||||
CoglWinsysVtableGetter custom_winsys_vtable_getter;
|
CoglCustomWinsysVtableGetter custom_winsys_vtable_getter;
|
||||||
CoglWinsysID winsys_id_override;
|
CoglWinsysID winsys_id_override;
|
||||||
GList *constraints;
|
GList *constraints;
|
||||||
|
|
||||||
|
@ -565,8 +565,8 @@ _cogl_renderer_choose_driver (CoglRenderer *renderer,
|
|||||||
/* Final connection API */
|
/* Final connection API */
|
||||||
|
|
||||||
void
|
void
|
||||||
cogl_renderer_set_custom_winsys (CoglRenderer *renderer,
|
cogl_renderer_set_custom_winsys (CoglRenderer *renderer,
|
||||||
CoglWinsysVtableGetter winsys_vtable_getter)
|
CoglCustomWinsysVtableGetter winsys_vtable_getter)
|
||||||
{
|
{
|
||||||
renderer->custom_winsys_vtable_getter = winsys_vtable_getter;
|
renderer->custom_winsys_vtable_getter = winsys_vtable_getter;
|
||||||
}
|
}
|
||||||
@ -575,10 +575,11 @@ static CoglBool
|
|||||||
connect_custom_winsys (CoglRenderer *renderer,
|
connect_custom_winsys (CoglRenderer *renderer,
|
||||||
CoglError **error)
|
CoglError **error)
|
||||||
{
|
{
|
||||||
const CoglWinsysVtable *winsys = renderer->custom_winsys_vtable_getter();
|
const CoglWinsysVtable *winsys;
|
||||||
CoglError *tmp_error = NULL;
|
CoglError *tmp_error = NULL;
|
||||||
GString *error_message;
|
GString *error_message;
|
||||||
|
|
||||||
|
winsys = renderer->custom_winsys_vtable_getter (renderer);
|
||||||
renderer->winsys_vtable = winsys;
|
renderer->winsys_vtable = winsys;
|
||||||
|
|
||||||
error_message = g_string_new ("");
|
error_message = g_string_new ("");
|
||||||
|
@ -1563,7 +1563,7 @@ meta_renderer_native_set_legacy_view_size (MetaRendererNative *renderer_native,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const CoglWinsysVtable *
|
static const CoglWinsysVtable *
|
||||||
get_native_cogl_winsys_vtable (void)
|
get_native_cogl_winsys_vtable (CoglRenderer *cogl_renderer)
|
||||||
{
|
{
|
||||||
static gboolean vtable_inited = FALSE;
|
static gboolean vtable_inited = FALSE;
|
||||||
static CoglWinsysVtable vtable;
|
static CoglWinsysVtable vtable;
|
||||||
|
@ -48,12 +48,25 @@ struct _MetaRendererX11
|
|||||||
G_DEFINE_TYPE (MetaRendererX11, meta_renderer_x11, META_TYPE_RENDERER)
|
G_DEFINE_TYPE (MetaRendererX11, meta_renderer_x11, META_TYPE_RENDERER)
|
||||||
|
|
||||||
static const CoglWinsysVtable *
|
static const CoglWinsysVtable *
|
||||||
get_x11_cogl_winsys_vtable (void)
|
get_x11_cogl_winsys_vtable (CoglRenderer *renderer)
|
||||||
{
|
{
|
||||||
if (meta_is_wayland_compositor ())
|
if (meta_is_wayland_compositor ())
|
||||||
return _cogl_winsys_egl_xlib_get_vtable ();
|
return _cogl_winsys_egl_xlib_get_vtable ();
|
||||||
else
|
|
||||||
return _cogl_winsys_glx_get_vtable ();
|
switch (renderer->driver)
|
||||||
|
{
|
||||||
|
case COGL_DRIVER_GLES1:
|
||||||
|
case COGL_DRIVER_GLES2:
|
||||||
|
return _cogl_winsys_egl_xlib_get_vtable ();
|
||||||
|
case COGL_DRIVER_GL:
|
||||||
|
case COGL_DRIVER_GL3:
|
||||||
|
return _cogl_winsys_glx_get_vtable ();
|
||||||
|
case COGL_DRIVER_ANY:
|
||||||
|
case COGL_DRIVER_NOP:
|
||||||
|
case COGL_DRIVER_WEBGL:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
g_assert_not_reached ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static CoglRenderer *
|
static CoglRenderer *
|
||||||
|
Loading…
x
Reference in New Issue
Block a user