[retro-gtk] pixel-format: Add retro_pixel_format_to_gl()
- From: Adrien Plazas <aplazas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [retro-gtk] pixel-format: Add retro_pixel_format_to_gl()
- Date: Mon, 23 Mar 2020 13:54:27 +0000 (UTC)
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]