[gtk+/wip/gl-texture] Recreate the GdkTexture every time
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/gl-texture] Recreate the GdkTexture every time
- Date: Wed, 17 Jan 2018 15:19:33 +0000 (UTC)
commit d74bc7a2b17281840de798c7b8e88f4f2a415cab
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Jan 17 09:41:16 2018 -0500
Recreate the GdkTexture every time
GdkTexture objects are immutable - the bits they refer to
must not change. So we need to create a new one every time
we change the content of the GL texture.
gtk/gtkglarea.c | 17 ++++++++++-------
1 files changed, 10 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtkglarea.c b/gtk/gtkglarea.c
index 57782a4..d086afb 100644
--- a/gtk/gtkglarea.c
+++ b/gtk/gtkglarea.c
@@ -145,7 +145,6 @@
typedef struct {
GdkGLContext *context;
GError *error;
- GdkTexture *gdk_texture;
gboolean have_buffers;
@@ -371,10 +370,6 @@ gtk_gl_area_ensure_buffers (GtkGLArea *area)
if (priv->texture == 0)
{
glGenTextures (1, &priv->texture);
- priv->gdk_texture = gdk_texture_new_for_gl (priv->context,
- priv->texture,
- gtk_widget_get_width (widget),
- gtk_widget_get_height (widget));
}
if ((priv->has_depth_buffer || priv->has_stencil_buffer))
@@ -495,7 +490,6 @@ gtk_gl_area_delete_buffers (GtkGLArea *area)
if (priv->texture != 0)
{
- g_clear_object (&priv->gdk_texture);
glDeleteTextures(1, &priv->texture);
priv->texture = 0;
}
@@ -616,6 +610,8 @@ gtk_gl_area_snapshot (GtkWidget *widget,
status = glCheckFramebufferStatusEXT (GL_FRAMEBUFFER_EXT);
if (status == GL_FRAMEBUFFER_COMPLETE_EXT)
{
+ GdkTexture *texture;
+
if (priv->needs_render || priv->auto_render)
{
if (priv->needs_resize)
@@ -629,12 +625,19 @@ gtk_gl_area_snapshot (GtkWidget *widget,
priv->needs_render = FALSE;
+ texture = gdk_texture_new_for_gl (priv->context,
+ priv->texture,
+ gtk_widget_get_width (widget),
+ gtk_widget_get_height (widget));
+
gtk_snapshot_append_texture (snapshot,
- priv->gdk_texture,
+ texture,
&GRAPHENE_RECT_INIT (0, 0,
gtk_widget_get_width (widget),
gtk_widget_get_height (widget)),
"GL Area");
+
+ g_object_unref (texture);
}
else
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]