From a8a06d498c40a271999effdfbab397fdad942a8b Mon Sep 17 00:00:00 2001
From: Brad Parker <cbparker@gmail.com>
Date: Sun, 17 Mar 2019 12:45:54 -0400
Subject: [PATCH] gl1: fix matrix not loading when threaded video is on

---
 gfx/drivers/gl1.c                       | 20 +++-----------------
 gfx/video_driver.c                      | 20 ++++++++++++++++++++
 menu/drivers_display/menu_display_gl1.c |  3 +--
 3 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/gfx/drivers/gl1.c b/gfx/drivers/gl1.c
index 309afab44b..2798479e7a 100644
--- a/gfx/drivers/gl1.c
+++ b/gfx/drivers/gl1.c
@@ -468,7 +468,6 @@ static void draw_tex(gl1_t *gl1, int pot_width, int pot_height, int width, int h
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
-   /*glLoadMatrixf(gl1->mvp.data);*/
 
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
@@ -1135,7 +1134,7 @@ static int video_texture_load_wrap_gl1_mipmap(void *data)
    if (!data)
       return 0;
    video_texture_load_gl1((struct texture_image*)data,
-         TEXTURE_FILTER_MIPMAP_LINEAR, &id);
+         TEXTURE_FILTER_MIPMAP_NEAREST, &id);
    return (int)id;
 }
 
@@ -1146,7 +1145,7 @@ static int video_texture_load_wrap_gl1(void *data)
    if (!data)
       return 0;
    video_texture_load_gl1((struct texture_image*)data,
-         TEXTURE_FILTER_LINEAR, &id);
+         TEXTURE_FILTER_NEAREST, &id);
    return (int)id;
 }
 #endif
@@ -1249,19 +1248,6 @@ static uint32_t gl1_get_flags(void *data)
    return flags;
 }
 
-static void gl1_set_mvp(void *data, void *shader_data, const void *mat_data)
-{
-   const math_matrix_4x4 *mat = (const math_matrix_4x4*)mat_data;
-
-   (void)data;
-   (void)shader_data;
-
-   if (!mat)
-      return;
-
-   glLoadMatrixf(mat->data);
-}
-
 static void gl1_set_coords(void *handle_data, void *shader_data,
       const struct video_coords *coords)
 {
@@ -1279,7 +1265,7 @@ static void gl1_set_coords(void *handle_data, void *shader_data,
 static const video_poke_interface_t gl1_poke_interface = {
    gl1_get_flags,
    gl1_set_coords,
-   gl1_set_mvp,
+   NULL,
    gl1_load_texture,
    gl1_unload_texture,
    gl1_set_video_mode,
diff --git a/gfx/video_driver.c b/gfx/video_driver.c
index 6150b329af..d0fed6987e 100644
--- a/gfx/video_driver.c
+++ b/gfx/video_driver.c
@@ -2703,9 +2703,17 @@ bool video_driver_texture_load(void *data,
       enum texture_filter_type  filter_type,
       uintptr_t *id)
 {
+#ifdef HAVE_THREADS
+   bool is_threaded = video_driver_is_threaded_internal();
+#endif
    if (!id || !video_driver_poke || !video_driver_poke->load_texture)
       return false;
 
+#ifdef HAVE_THREADS
+   if (is_threaded)
+      video_context_driver_make_current(false);
+#endif
+
    *id = video_driver_poke->load_texture(video_driver_data, data,
          video_driver_is_threaded_internal(),
          filter_type);
@@ -2715,9 +2723,17 @@ bool video_driver_texture_load(void *data,
 
 bool video_driver_texture_unload(uintptr_t *id)
 {
+#ifdef HAVE_THREADS
+   bool is_threaded = video_driver_is_threaded_internal();
+#endif
    if (!video_driver_poke || !video_driver_poke->unload_texture)
       return false;
 
+#ifdef HAVE_THREADS
+   if (is_threaded)
+      video_context_driver_make_current(false);
+#endif
+
    video_driver_poke->unload_texture(video_driver_data, *id);
    *id = 0;
    return true;
@@ -3363,6 +3379,10 @@ enum gfx_ctx_api video_context_driver_get_api(void)
          return GFX_CTX_GX_API;
       else if (string_is_equal(video_driver, "gl"))
          return GFX_CTX_OPENGL_API;
+      else if (string_is_equal(video_driver, "gl1"))
+         return GFX_CTX_OPENGL_API;
+      else if (string_is_equal(video_driver, "glcore"))
+         return GFX_CTX_OPENGL_API;
       else if (string_is_equal(video_driver, "vulkan"))
          return GFX_CTX_VULKAN_API;
       else if (string_is_equal(video_driver, "metal"))
diff --git a/menu/drivers_display/menu_display_gl1.c b/menu/drivers_display/menu_display_gl1.c
index 7780ebd0ee..5124931c05 100644
--- a/menu/drivers_display/menu_display_gl1.c
+++ b/menu/drivers_display/menu_display_gl1.c
@@ -131,8 +131,7 @@ static void menu_display_gl1_draw(menu_display_ctx_draw_t *draw,
 
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
-
-   video_driver_set_mvp(&mvp);
+   glLoadMatrixf(mvp.matrix);
 
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();