diff --git a/gdk/gdkdmabufdownloader.c b/gdk/gdkdmabufdownloader.c index 9326a96691..8ce5e2949e 100644 --- a/gdk/gdkdmabufdownloader.c +++ b/gdk/gdkdmabufdownloader.c @@ -31,7 +31,7 @@ gdk_dmabuf_downloader_supports (GdkDmabufDownloader *self, return iface->supports (self, texture, error); } -void +gboolean gdk_dmabuf_downloader_download (GdkDmabufDownloader *self, GdkDmabufTexture *texture, GdkMemoryFormat format, @@ -41,9 +41,8 @@ gdk_dmabuf_downloader_download (GdkDmabufDownloader *self, { GdkDmabufDownloaderInterface *iface; - g_return_if_fail (GDK_IS_DMABUF_DOWNLOADER (self)); + g_return_val_if_fail (GDK_IS_DMABUF_DOWNLOADER (self), FALSE); iface = GDK_DMABUF_DOWNLOADER_GET_IFACE (self); - iface->download (self, texture, format, color_state, data, stride); + return iface->download (self, texture, format, color_state, data, stride); } - diff --git a/gdk/gdkdmabufdownloaderprivate.h b/gdk/gdkdmabufdownloaderprivate.h index 4d4d11c374..011022839d 100644 --- a/gdk/gdkdmabufdownloaderprivate.h +++ b/gdk/gdkdmabufdownloaderprivate.h @@ -17,7 +17,7 @@ struct _GdkDmabufDownloaderInterface gboolean (* supports) (GdkDmabufDownloader *downloader, GdkDmabufTexture *texture, GError **error); - void (* download) (GdkDmabufDownloader *downloader, + gboolean (* download) (GdkDmabufDownloader *downloader, GdkDmabufTexture *texture, GdkMemoryFormat format, GdkColorState *color_state, @@ -29,7 +29,7 @@ void gdk_dmabuf_downloader_close (GdkDmabufDownlo gboolean gdk_dmabuf_downloader_supports (GdkDmabufDownloader *self, GdkDmabufTexture *texture, GError **error); -void gdk_dmabuf_downloader_download (GdkDmabufDownloader *self, +gboolean gdk_dmabuf_downloader_download (GdkDmabufDownloader *downloader, GdkDmabufTexture *texture, GdkMemoryFormat format, GdkColorState *color_state, diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c index ea325beb1e..f172f20647 100644 --- a/gsk/gl/gskglrenderer.c +++ b/gsk/gl/gskglrenderer.c @@ -100,7 +100,7 @@ gsk_gl_renderer_dmabuf_downloader_supports (GdkDmabufDownloader *downloader, return TRUE; } -static void +static gboolean gsk_gl_renderer_dmabuf_downloader_download (GdkDmabufDownloader *downloader_, GdkDmabufTexture *texture, GdkMemoryFormat format, @@ -115,6 +115,9 @@ gsk_gl_renderer_dmabuf_downloader_download (GdkDmabufDownloader *downloader_, int width, height; GskRenderNode *node; + if (!gsk_gl_renderer_dmabuf_downloader_supports (downloader_, texture, NULL)) + return FALSE; + previous = gdk_gl_context_get_current (); if (previous) g_object_ref (previous); @@ -141,6 +144,8 @@ gsk_gl_renderer_dmabuf_downloader_download (GdkDmabufDownloader *downloader_, } else gdk_gl_context_clear_current (); + + return TRUE; } static void diff --git a/gsk/gpu/gskgpurenderer.c b/gsk/gpu/gskgpurenderer.c index 4d555f7861..ebd31a3700 100644 --- a/gsk/gpu/gskgpurenderer.c +++ b/gsk/gpu/gskgpurenderer.c @@ -152,7 +152,7 @@ gsk_gpu_renderer_dmabuf_downloader_supports (GdkDmabufDownloader *downloader, return TRUE; } -static void +static gboolean gsk_gpu_renderer_dmabuf_downloader_download (GdkDmabufDownloader *downloader, GdkDmabufTexture *texture, GdkMemoryFormat format, @@ -165,6 +165,7 @@ gsk_gpu_renderer_dmabuf_downloader_download (GdkDmabufDownloader *downloader, gpointer previous; previous = gsk_gpu_renderer_save_current (self); + gsk_gpu_renderer_make_current (self); frame = gsk_gpu_renderer_get_frame (self); @@ -188,6 +189,8 @@ gsk_gpu_renderer_dmabuf_downloader_download (GdkDmabufDownloader *downloader, gsk_gpu_frame_wait (frame); gsk_gpu_renderer_restore_current (self, previous); + + return TRUE; } static void