Starting to see the menu in the screen
authorFrancisco Javier Trujillo Mata <fjtrujy@gmail.com>
Mon, 1 Jan 2024 12:08:17 +0000 (13:08 +0100)
committerkub <derkub@gmail.com>
Sun, 18 Feb 2024 22:30:36 +0000 (23:30 +0100)
platform/ps2/emu.c
platform/ps2/plat.c

index c25fc2b..15a0e30 100644 (file)
@@ -13,6 +13,7 @@
 #include "in_ps2.h"
 #include "../libpicofe/input.h"
 #include "../libpicofe/plat.h"
+#include "../libpicofe/menu.h"
 #include "../common/input_pico.h"
 #include "../common/emu.h"
 
@@ -56,6 +57,8 @@ typedef struct ps2_video {
        GSGLOBAL *gsGlobal;
 
        GSTEXTURE *g_menuscreen;
+    uint32_t g_menuscreen_vertices_count;
+    GSPRIMUVPOINT *g_menuscreen_vertices;
     uint8_t *g_menubg_ptr;
        uint32_t offset;
        uint8_t vsync; /* 0 (Disabled), 1 (Enabled), 2 (Dynamic) */
@@ -88,6 +91,20 @@ static void set_g_menuscreen_values(ps2_video_t *ps2_video)
     g_menubg_src_h  = g_menuscreen->Height;
     g_menubg_src_pp = g_menuscreen->Width;
     g_menubg_ptr = ps2_video->g_menubg_ptr;
+
+    uint32_t g_menuscreen_vertices_count = 2;
+    GSPRIMUVPOINT *g_menuscreen_vertices = (GSPRIMUVPOINT *)calloc(g_menuscreen_vertices_count, sizeof(GSPRIMUVPOINT));
+    
+    g_menuscreen_vertices[0].xyz2 = vertex_to_XYZ2(ps2_video->gsGlobal, 0, 0, 0);
+       g_menuscreen_vertices[0].uv = vertex_to_UV(g_menuscreen, 0, 0);
+       g_menuscreen_vertices[0].rgbaq = color_to_RGBAQ(0x80, 0x80, 0x80, 0x80, 0);
+
+    g_menuscreen_vertices[1].xyz2 = vertex_to_XYZ2(ps2_video->gsGlobal, g_menuscreen->Width, g_menuscreen->Height, 0);
+    g_menuscreen_vertices[1].uv = vertex_to_UV(g_menuscreen, g_menuscreen->Width, g_menuscreen->Height);
+    g_menuscreen_vertices[1].rgbaq = color_to_RGBAQ(0x80, 0x80, 0x80, 0x80, 0);
+
+    ps2_video->g_menuscreen_vertices_count = g_menuscreen_vertices_count;
+    ps2_video->g_menuscreen_vertices = g_menuscreen_vertices;
 }
 
 static void video_init(void)
@@ -231,6 +248,60 @@ static void draw_pico_ptr(void)
 
 static void vidResetMode(void) {}
 
+static void flipScreen(void *data, bool vsync)
+{
+       ps2_video_t *ps2 = (ps2_video_t*)data;
+
+       gsKit_queue_exec(ps2->gsGlobal);
+       gsKit_finish();
+
+       if (vsync) gsKit_sync_flip(ps2->gsGlobal);
+
+       gsKit_TexManager_nextFrame(ps2->gsGlobal);
+    gsKit_clear(ps2->gsGlobal, GS_BLACK);
+}
+
+
+/* display a completed frame buffer and prepare a new render buffer */
+void plat_video_flip(void)
+{
+    blitscreen_clut();
+}
+
+/* wait for start of vertical blanking */
+void plat_video_wait_vsync(void)
+{
+}
+
+/* switch from emulation display to menu display */
+void plat_video_menu_enter(int is_rom_loaded)
+{
+}
+
+/* start rendering a menu screen */
+void plat_video_menu_begin(void)
+{
+    gsKit_TexManager_invalidate(ps2_video->gsGlobal, ps2_video->g_menuscreen);
+}
+
+/* display a completed menu screen */
+void plat_video_menu_end(void)
+{
+    gsKit_TexManager_bind(ps2_video->gsGlobal, ps2_video->g_menuscreen);
+    gskit_prim_list_sprite_texture_uv_3d(
+        ps2_video->gsGlobal, 
+        ps2_video->g_menuscreen, 
+        ps2_video->g_menuscreen_vertices_count, 
+        ps2_video->g_menuscreen_vertices
+    );
+    flipScreen(ps2_video, 1);
+}
+
+/* terminate menu display */
+void plat_video_menu_leave(void)
+{
+}
+
 void pemu_sound_start(void) {}
 void pemu_sound_stop(void) {}
 
index 418e531..7b6d226 100644 (file)
@@ -53,41 +53,6 @@ void plat_target_finish(void)
     deinit_drivers();
 }
 
-/* display a completed frame buffer and prepare a new render buffer */
-void plat_video_flip(void)
-{
-    blitscreen_clut();
-}
-
-/* wait for start of vertical blanking */
-void plat_video_wait_vsync(void)
-{
-}
-
-/* switch from emulation display to menu display */
-void plat_video_menu_enter(int is_rom_loaded)
-{
-
-}
-
-/* start rendering a menu screen */
-void plat_video_menu_begin(void)
-{
-
-}
-
-/* display a completed menu screen */
-void plat_video_menu_end(void)
-{
-
-}
-
-/* terminate menu display */
-void plat_video_menu_leave(void)
-{
-
-}
-
 int plat_parse_arg(int argc, char *argv[], int *x)
 { 
     return 1;