mirror of
https://github.com/spice2x/spice2x.github.io.git
synced 2026-08-02 06:40:42 -07:00
gitadora: prevent window resize (#529)
## Link to GitHub Issue, if one exists n/a ## Description of change Gitadora (pre-Delta) tends to soft lock, have graphical issues (menu bg render as black), or take a long time (minutes) between scene transitions when window is resized.
This commit is contained in:
@@ -102,4 +102,5 @@ void graphics_update_window_style(HWND hWnd);
|
|||||||
void graphics_update_z_order(HWND hWnd, bool always_on_top);
|
void graphics_update_z_order(HWND hWnd, bool always_on_top);
|
||||||
void graphics_move_resize_window(HWND hWnd);
|
void graphics_move_resize_window(HWND hWnd);
|
||||||
bool graphics_window_change_crashes_game();
|
bool graphics_window_change_crashes_game();
|
||||||
|
bool graphics_window_resize_breaks_game();
|
||||||
void graphics_load_windowed_subscreen_parameters();
|
void graphics_load_windowed_subscreen_parameters();
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
|
|
||||||
#include "avs/game.h"
|
#include "avs/game.h"
|
||||||
|
#include "games/gitadora/gitadora.h"
|
||||||
#include "cfg/screen_resize.h"
|
#include "cfg/screen_resize.h"
|
||||||
#include "overlay/overlay.h"
|
#include "overlay/overlay.h"
|
||||||
#include "util/logging.h"
|
#include "util/logging.h"
|
||||||
@@ -85,6 +86,12 @@ void graphics_capture_initial_window(HWND hWnd) {
|
|||||||
// ensure frame size is captured
|
// ensure frame size is captured
|
||||||
graphics_wm_style_changed(hWnd, false);
|
graphics_wm_style_changed(hWnd, false);
|
||||||
|
|
||||||
|
// if the game is not compatible, ignore user-supplied values and keep the current size
|
||||||
|
if (graphics_window_resize_breaks_game()) {
|
||||||
|
cfg::SCREENRESIZE->client_width = client_w;
|
||||||
|
cfg::SCREENRESIZE->client_height = client_h;
|
||||||
|
}
|
||||||
|
|
||||||
// if there was no user-supplied dimension, seed it with the current size
|
// if there was no user-supplied dimension, seed it with the current size
|
||||||
// so that the next resize operation will work
|
// so that the next resize operation will work
|
||||||
if (cfg::SCREENRESIZE->client_width == 0) {
|
if (cfg::SCREENRESIZE->client_width == 0) {
|
||||||
@@ -392,6 +399,9 @@ void graphics_update_window_style(HWND hWnd) {
|
|||||||
break;
|
break;
|
||||||
case cfg::WindowDecorationMode::ResizableFrame:
|
case cfg::WindowDecorationMode::ResizableFrame:
|
||||||
style |= WS_OVERLAPPEDWINDOW;
|
style |= WS_OVERLAPPEDWINDOW;
|
||||||
|
if (graphics_window_resize_breaks_game()) {
|
||||||
|
style &= ~WS_SIZEBOX;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case cfg::WindowDecorationMode::Default:
|
case cfg::WindowDecorationMode::Default:
|
||||||
default:
|
default:
|
||||||
@@ -493,3 +503,24 @@ bool graphics_window_change_crashes_game() {
|
|||||||
});
|
});
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool graphics_window_resize_breaks_game() {
|
||||||
|
bool is_gitadora = avs::game::is_model({ "J32", "J33", "K32", "K33", "L32", "L33", "M32" });
|
||||||
|
bool is_arena = games::gitadora::is_arena_model();
|
||||||
|
// for whatever reason, gitadora games on dx/sd/sd2 cabs behave poorly when window is resized
|
||||||
|
// (eihter at launch or while it's running)
|
||||||
|
// usually results in: soft lock during scene transtions or really long transitions,
|
||||||
|
// backgrounds of menus not rendering, etc.
|
||||||
|
bool result = is_gitadora && !is_arena;
|
||||||
|
|
||||||
|
static std::once_flag flag;
|
||||||
|
std::call_once(flag, [&result]() {
|
||||||
|
if (result) {
|
||||||
|
log_warning(
|
||||||
|
"graphics-windowed",
|
||||||
|
"ignoring changes to window size due to incompatibility with this game");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|||||||
@@ -233,6 +233,14 @@ namespace overlay::windows {
|
|||||||
bool changed = false;
|
bool changed = false;
|
||||||
const uint32_t step = 1;
|
const uint32_t step = 1;
|
||||||
const uint32_t step_fast = 10;
|
const uint32_t step_fast = 10;
|
||||||
|
|
||||||
|
if (graphics_window_resize_breaks_game()) {
|
||||||
|
ImGui::TextColored(ImVec4(1, 0.5f, 0.5f, 1.f),
|
||||||
|
"GITADORA tends to hang or have graphical\n"
|
||||||
|
"glitches when window is resized; resize\n"
|
||||||
|
"controls are disabled.");
|
||||||
|
}
|
||||||
|
ImGui::BeginDisabled(graphics_window_resize_breaks_game());
|
||||||
ImGui::BeginDisabled(cfg::SCREENRESIZE->client_keep_aspect_ratio);
|
ImGui::BeginDisabled(cfg::SCREENRESIZE->client_keep_aspect_ratio);
|
||||||
ImGui::InputScalar(
|
ImGui::InputScalar(
|
||||||
"Width",
|
"Width",
|
||||||
@@ -248,6 +256,7 @@ namespace overlay::windows {
|
|||||||
&cfg::SCREENRESIZE->client_height,
|
&cfg::SCREENRESIZE->client_height,
|
||||||
&step, &step_fast, nullptr);
|
&step, &step_fast, nullptr);
|
||||||
changed |= ImGui::IsItemDeactivatedAfterEdit();
|
changed |= ImGui::IsItemDeactivatedAfterEdit();
|
||||||
|
ImGui::EndDisabled();
|
||||||
|
|
||||||
ImGui::InputScalar(
|
ImGui::InputScalar(
|
||||||
"X Offset",
|
"X Offset",
|
||||||
|
|||||||
Reference in New Issue
Block a user