[retro-gtk/gtk-cleanup: 3/10] gl-display: Add retro_gl_clear_texture() and use autocleanups



commit d04636b4bdb75a1652a96f00cd03398a520493f3
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Sun May 24 14:36:43 2020 +0200

    gl-display: Add retro_gl_clear_texture() and use autocleanups
    
    This makes the code safer and more concise.

 retro-gtk/retro-gl-display.c | 21 +++++++--------------
 retro-gtk/retro-gl-private.h |  8 ++++++++
 2 files changed, 15 insertions(+), 14 deletions(-)
---
diff --git a/retro-gtk/retro-gl-display.c b/retro-gtk/retro-gl-display.c
index ad99370..da0c5d7 100644
--- a/retro-gtk/retro-gl-display.c
+++ b/retro-gtk/retro-gl-display.c
@@ -11,6 +11,7 @@
 #include "retro-gl-display-private.h"
 
 #include <epoxy/gl.h>
+#include "retro-gl-private.h"
 #include "retro-glsl-filter-private.h"
 #include "retro-pixbuf.h"
 #include "retro-pixdata.h"
@@ -64,10 +65,7 @@ static void
 clear_video (RetroGLDisplay *self)
 {
   g_clear_object (&self->pixbuf);
-  if (self->pixdata != NULL) {
-    retro_pixdata_free (self->pixdata);
-    self->pixdata = NULL;
-  }
+  g_clear_pointer (&self->pixdata, retro_pixdata_free);
 }
 
 static void
@@ -256,8 +254,7 @@ realize (RetroGLDisplay *self)
                                              (const GLvoid *) offsetof (RetroVertex, texture_coordinates));
   }
 
-  glDeleteTextures (1, &self->texture);
-  self->texture = 0;
+  retro_gl_clear_texture (&self->texture);
   glGenTextures (1, &self->texture);
   glBindTexture (GL_TEXTURE_2D, self->texture);
 
@@ -280,8 +277,7 @@ unrealize (RetroGLDisplay *self)
 
   gtk_gl_area_make_current (GTK_GL_AREA (self));
 
-  glDeleteTextures (1, &self->texture);
-  self->texture = 0;
+  retro_gl_clear_texture (&self->texture);
   for (filter = 0; filter < RETRO_VIDEO_FILTER_COUNT; filter++)
     g_clear_object (&self->glsl_filter[filter]);
 }
@@ -315,14 +311,11 @@ retro_gl_display_finalize (GObject *object)
   RetroGLDisplay *self = (RetroGLDisplay *) object;
   RetroVideoFilter filter;
 
-  glDeleteTextures (1, &self->texture);
-  self->texture = 0;
+  retro_gl_clear_texture (&self->texture);
   for (filter = 0; filter < RETRO_VIDEO_FILTER_COUNT; filter++)
     g_clear_object (&self->glsl_filter[filter]);
-  if (self->core != NULL)
-    g_object_unref (self->core);
-  if (self->pixbuf != NULL)
-    g_object_unref (self->pixbuf);
+  g_clear_object (&self->core);
+  g_clear_object (&self->pixbuf);
 
   G_OBJECT_CLASS (retro_gl_display_parent_class)->finalize (object);
 }
diff --git a/retro-gtk/retro-gl-private.h b/retro-gtk/retro-gl-private.h
index 7d43999..9693b07 100644
--- a/retro-gtk/retro-gl-private.h
+++ b/retro-gtk/retro-gl-private.h
@@ -21,6 +21,14 @@ retro_gl_steal_object (GLuint *ptr)
   return ref;
 }
 
+static inline void
+retro_gl_clear_texture (GLuint *ptr)
+{
+  glDeleteTextures (1, ptr);
+
+  *ptr = 0;
+}
+
 static inline void
 retro_gl_autocleanup_delete_shader (GLuint *ptr)
 {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]