[retro-gtk] pixel-format: Add retro_pixel_format_to_gl()



commit 85a582496f704726bd6a52900d107040f7945946
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Mon Mar 23 00:33:52 2020 +0500

    pixel-format: Add retro_pixel_format_to_gl()
    
    This helper function will allow to avoid code duplication in future.

 retro-gtk/retro-pixdata.c           | 22 +------------------
 shared/retro-pixel-format-private.h |  6 +++++
 shared/retro-pixel-format.c         | 44 +++++++++++++++++++++++++++++++++++++
 3 files changed, 51 insertions(+), 21 deletions(-)
---
diff --git a/retro-gtk/retro-pixdata.c b/retro-gtk/retro-pixdata.c
index b2208d8..c4ee872 100644
--- a/retro-gtk/retro-pixdata.c
+++ b/retro-gtk/retro-pixdata.c
@@ -374,28 +374,8 @@ retro_pixdata_load_gl_texture (RetroPixdata *self)
 
   g_return_val_if_fail (self != NULL, FALSE);
 
-  switch (self->pixel_format) {
-  case RETRO_PIXEL_FORMAT_XRGB1555:
-    format = GL_BGRA;
-    type =  GL_UNSIGNED_SHORT_5_5_5_1;
-    pixel_size = 2;
-
-    break;
-  case RETRO_PIXEL_FORMAT_XRGB8888:
-    format = GL_BGRA;
-    type = GL_UNSIGNED_BYTE;
-    pixel_size = 4;
-
-    break;
-  case RETRO_PIXEL_FORMAT_RGB565:
-    format = GL_RGB;
-    type =  GL_UNSIGNED_SHORT_5_6_5;
-    pixel_size = 2;
-
-    break;
-  default:
+  if (!retro_pixel_format_to_gl (self->pixel_format, &format, &type, &pixel_size))
     return FALSE;
-  }
 
   glPixelStorei (GL_UNPACK_ROW_LENGTH, self->rowstride / pixel_size);
   glTexImage2D (GL_TEXTURE_2D,
diff --git a/shared/retro-pixel-format-private.h b/shared/retro-pixel-format-private.h
index 465271e..8153b03 100644
--- a/shared/retro-pixel-format-private.h
+++ b/shared/retro-pixel-format-private.h
@@ -7,6 +7,7 @@
 #endif
 
 #include <glib-object.h>
+#include <epoxy/gl.h>
 
 G_BEGIN_DECLS
 
@@ -31,4 +32,9 @@ typedef enum
   RETRO_PIXEL_FORMAT_UNKNOWN = -1,
 } RetroPixelFormat;
 
+gboolean retro_pixel_format_to_gl (RetroPixelFormat  pixel_format,
+                                   GLenum           *format,
+                                   GLenum           *type,
+                                   gint             *pixel_size);
+
 G_END_DECLS
diff --git a/shared/retro-pixel-format.c b/shared/retro-pixel-format.c
index 787a80d..685d0e0 100644
--- a/shared/retro-pixel-format.c
+++ b/shared/retro-pixel-format.c
@@ -24,3 +24,47 @@ retro_pixel_format_get_type (void)
 
   return retro_pixel_format_type;
 }
+
+gboolean
+retro_pixel_format_to_gl (RetroPixelFormat  pixel_format,
+                          GLenum           *format,
+                          GLenum           *type,
+                          gint             *pixel_size)
+{
+  GLenum out_format, out_type;
+  gint out_pixel_size;
+
+  switch (pixel_format) {
+  case RETRO_PIXEL_FORMAT_XRGB1555:
+    out_format = GL_BGRA;
+    out_type =  GL_UNSIGNED_SHORT_5_5_5_1;
+    out_pixel_size = 2;
+
+    break;
+  case RETRO_PIXEL_FORMAT_XRGB8888:
+    out_format = GL_BGRA;
+    out_type = GL_UNSIGNED_BYTE;
+    out_pixel_size = 4;
+
+    break;
+  case RETRO_PIXEL_FORMAT_RGB565:
+    out_format = GL_RGB;
+    out_type =  GL_UNSIGNED_SHORT_5_6_5;
+    out_pixel_size = 2;
+
+    break;
+  default:
+    return FALSE;
+  }
+
+  if (format)
+    *format = out_format;
+
+  if (type)
+    *type = out_type;
+
+  if (pixel_size)
+    *pixel_size = out_pixel_size;
+
+  return TRUE;
+}


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