Refresh all background instances after suspend if needed
NVIDIA drivers don't preserve FBO contents across suspend / resume cycles which results in broken backgrounds. We can work around that by forcing a refresh when coming out of suspend. https://bugzilla.gnome.org/show_bug.cgi?id=739178
This commit is contained in:
@ -5,6 +5,9 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
#include <GL/gl.h>
|
||||
#include <cogl/cogl.h>
|
||||
|
||||
#include "shell-util.h"
|
||||
#include <glib/gi18n-lib.h>
|
||||
#include <gtk/gtk.h>
|
||||
@ -358,3 +361,33 @@ shell_util_cursor_tracker_to_clutter (MetaCursorTracker *tracker,
|
||||
clutter_actor_hide (CLUTTER_ACTOR (texture));
|
||||
}
|
||||
}
|
||||
|
||||
typedef const gchar *(*ShellGLGetString) (GLenum);
|
||||
|
||||
static const gchar *
|
||||
get_gl_vendor (void)
|
||||
{
|
||||
static const gchar *vendor = NULL;
|
||||
|
||||
if (!vendor)
|
||||
{
|
||||
ShellGLGetString gl_get_string;
|
||||
gl_get_string = (ShellGLGetString) cogl_get_proc_address ("glGetString");
|
||||
if (gl_get_string)
|
||||
vendor = gl_get_string (GL_VENDOR);
|
||||
}
|
||||
|
||||
return vendor;
|
||||
}
|
||||
|
||||
gboolean
|
||||
shell_util_need_background_refresh (void)
|
||||
{
|
||||
if (!clutter_check_windowing_backend (CLUTTER_WINDOWING_X11))
|
||||
return FALSE;
|
||||
|
||||
if (g_strcmp0 (get_gl_vendor (), "NVIDIA Corporation") == 0)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
Reference in New Issue
Block a user