mirror of
https://github.com/ARMSX2/ARMSX1.git
synced 2026-08-24 16:53:35 -07:00
Enhance imgui overlay rendering with additional metrics and audio device management
This commit is contained in:
@@ -72,7 +72,7 @@ extern "C" PSXE_API void imgui_layer_new_frame(void) {
|
||||
ImGui::NewFrame();
|
||||
}
|
||||
|
||||
extern "C" PSXE_API void imgui_layer_render_overlay(const char* os_name, float fps) {
|
||||
extern "C" PSXE_API void imgui_layer_render_overlay(const char* os_name, float fps, float frame_ms, int dropped_frames, int paused, int tex_w, int tex_h, int out_w, int out_h) {
|
||||
if (!g_imgui_initialized)
|
||||
return;
|
||||
|
||||
@@ -86,10 +86,14 @@ extern "C" PSXE_API void imgui_layer_render_overlay(const char* os_name, float f
|
||||
ImGuiWindowFlags_NoBackground;
|
||||
|
||||
ImGui::SetNextWindowPos(ImVec2(10.0f, 10.0f), ImGuiCond_Always);
|
||||
ImGui::SetNextWindowSize(ImVec2(240.0f, 60.0f), ImGuiCond_Always);
|
||||
ImGui::SetNextWindowSize(ImVec2(240.0f, 115.0f), ImGuiCond_Always);
|
||||
|
||||
ImGui::Begin("Overlay", nullptr, flags);
|
||||
ImGui::Text("FPS: %.1f", fps);
|
||||
ImGui::Text("Frame: %.2f ms", frame_ms);
|
||||
ImGui::Text("Dropped: %d", dropped_frames);
|
||||
ImGui::Text("Paused: %s", paused ? "yes" : "no");
|
||||
ImGui::Text("Tex: %dx%d Out: %dx%d", tex_w, tex_h, out_w, out_h);
|
||||
ImGui::Text("OS : %s", os_name ? os_name : "unknown");
|
||||
ImGui::End();
|
||||
}
|
||||
@@ -836,7 +840,7 @@ extern "C" PSXE_API void imgui_ingame_menu_render(int paused, const char* curren
|
||||
ImGui::EndMenuBar();
|
||||
}
|
||||
|
||||
ImGui::TextWrapped("CDROM: %s", current_cd && current_cd[0] ? current_cd : "(none)");
|
||||
//ImGui::TextWrapped("CDROM: %s", current_cd && current_cd[0] ? current_cd : "(none)");
|
||||
}
|
||||
ImGui::End();
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ PSXE_API void imgui_layer_init(SDL_Window* window, SDL_Renderer* renderer);
|
||||
PSXE_API void imgui_layer_shutdown(void);
|
||||
PSXE_API void imgui_layer_handle_event(const SDL_Event* event);
|
||||
PSXE_API void imgui_layer_new_frame(void);
|
||||
PSXE_API void imgui_layer_render_overlay(const char* os_name, float fps);
|
||||
PSXE_API void imgui_layer_render_overlay(const char* os_name, float fps, float frame_ms, int dropped_frames, int paused, int tex_w, int tex_h, int out_w, int out_h);
|
||||
PSXE_API void imgui_layer_flush(void);
|
||||
|
||||
#if defined(IMGUI_FRONTEND) && !defined(__DLL_BUILD) && !defined(IOS_TARGET) && !defined(__ANDROID__)
|
||||
|
||||
+3
-1
@@ -114,8 +114,10 @@ int psxe_run_configured(psxe_config_t* cfg, void* external_window, void* externa
|
||||
|
||||
dev = SDL_OpenAudioDevice(NULL, 0, &desired, &obtained, 0);
|
||||
|
||||
if (dev)
|
||||
if (dev) {
|
||||
SDL_PauseAudioDevice(dev, 0);
|
||||
screen->audio_dev = dev;
|
||||
}
|
||||
|
||||
psx_gpu_t* gpu = psx_get_gpu(psx);
|
||||
psx_gpu_set_event_callback(gpu, GPU_EVENT_DMODE, psxe_gpu_dmode_event_cb);
|
||||
|
||||
+23
-8
@@ -114,6 +114,7 @@ void psxe_screen_init(psxe_screen_t* screen, psx_t* psx, const psxe_config_t* cf
|
||||
screen->paused = 0;
|
||||
screen->menu_visible = 1;
|
||||
memset(screen->current_cd, 0, sizeof(screen->current_cd));
|
||||
screen->audio_dev = 0;
|
||||
if (cfg && cfg->cd_path)
|
||||
strncpy(screen->current_cd, cfg->cd_path, sizeof(screen->current_cd) - 1);
|
||||
|
||||
@@ -296,9 +297,10 @@ void psxe_screen_toggle_debug_mode(psxe_screen_t* screen) {
|
||||
|
||||
// int frame = 0;
|
||||
|
||||
void psxe_screen_update(psxe_screen_t* screen) {
|
||||
void* display_buf = screen->debug_mode ?
|
||||
psx_get_vram(screen->psx) : psx_get_display_buffer(screen->psx);
|
||||
void psxe_screen_update(psxe_screen_t* screen) {
|
||||
void* display_buf = screen->debug_mode ?
|
||||
psx_get_vram(screen->psx) : psx_get_display_buffer(screen->psx);
|
||||
int out_width = 0, out_height = 0;
|
||||
|
||||
// printf("res=(%u,%u) off=(%u,%u) disp=(%u,%u-%u,%u) draw=(%u,%u-%u,%u) vres=%u\n",
|
||||
// screen->texture_width,
|
||||
@@ -352,6 +354,8 @@ void psxe_screen_update(psxe_screen_t* screen) {
|
||||
memset(&actions, 0, sizeof(actions));
|
||||
#endif
|
||||
|
||||
SDL_GetRendererOutputSize(screen->renderer, &out_width, &out_height);
|
||||
|
||||
if (screen->debug_panel
|
||||
#if defined(IMGUI_FRONTEND) && !defined(__DLL_BUILD) && !defined(IOS_TARGET) && !defined(__ANDROID__)
|
||||
|| screen->menu_visible
|
||||
@@ -361,16 +365,22 @@ void psxe_screen_update(psxe_screen_t* screen) {
|
||||
if (screen->debug_panel) {
|
||||
static uint64_t last_tick = 0;
|
||||
static float fps = 0.0f;
|
||||
static float frame_ms = 0.0f;
|
||||
static int dropped_frames = 0;
|
||||
uint64_t now = SDL_GetTicks();
|
||||
|
||||
if (last_tick) {
|
||||
uint64_t delta = now - last_tick;
|
||||
if (delta)
|
||||
if (delta) {
|
||||
fps = 1000.0f / (float)delta;
|
||||
frame_ms = (float)delta;
|
||||
if (delta > 25)
|
||||
dropped_frames++;
|
||||
}
|
||||
}
|
||||
last_tick = now;
|
||||
|
||||
imgui_layer_render_overlay(STR(OS_INFO), fps);
|
||||
imgui_layer_render_overlay(STR(OS_INFO), fps, frame_ms, dropped_frames, screen->paused, screen->texture_width, screen->texture_height, out_width, out_height);
|
||||
}
|
||||
|
||||
#if defined(IMGUI_FRONTEND) && !defined(__DLL_BUILD) && !defined(IOS_TARGET) && !defined(__ANDROID__)
|
||||
@@ -387,6 +397,9 @@ void psxe_screen_update(psxe_screen_t* screen) {
|
||||
#if defined(IMGUI_FRONTEND) && !defined(__DLL_BUILD) && !defined(IOS_TARGET) && !defined(__ANDROID__)
|
||||
if (actions.toggle_pause)
|
||||
screen->paused = !screen->paused;
|
||||
if (screen->audio_dev) {
|
||||
SDL_PauseAudioDevice(screen->audio_dev, screen->paused ? 1 : 0);
|
||||
}
|
||||
|
||||
if (actions.reset)
|
||||
psx_soft_reset(screen->psx);
|
||||
@@ -397,9 +410,11 @@ void psxe_screen_update(psxe_screen_t* screen) {
|
||||
if (actions.swap_cd && actions.new_cd_path[0]) {
|
||||
strncpy(screen->current_cd, actions.new_cd_path, sizeof(screen->current_cd) - 1);
|
||||
screen->current_cd[sizeof(screen->current_cd) - 1] = '\0';
|
||||
if (psx_swap_disc(screen->psx, screen->current_cd) == 0) {
|
||||
psx_soft_reset(screen->psx);
|
||||
screen->paused = 0;
|
||||
psx_swap_disc(screen->psx, screen->current_cd);
|
||||
psx_soft_reset(screen->psx);
|
||||
screen->paused = 0;
|
||||
if (screen->audio_dev) {
|
||||
SDL_PauseAudioDevice(screen->audio_dev, 0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -43,6 +43,7 @@ typedef struct {
|
||||
int paused;
|
||||
int menu_visible;
|
||||
char current_cd[512];
|
||||
SDL_AudioDeviceID audio_dev;
|
||||
|
||||
SDL_GameController* controller;
|
||||
} psxe_screen_t;
|
||||
|
||||
Reference in New Issue
Block a user