fixed issue where vsync setting could be incorrect at launch

This commit is contained in:
Eric 2023-09-27 11:08:49 -07:00
parent 5b8310352f
commit de0d7097da
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
7 changed files with 63 additions and 51 deletions

56
.efrocachemap generated
View File

@ -4056,26 +4056,26 @@
"build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1", "build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1",
"build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae", "build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae",
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599", "build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "24a88ffc78cd3f59a7fa7df974d79e25", "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "6c81d1a60622f49d40044c8706d7bb05",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "ba97e6d831cfc129ebc46443b49c3055", "build/prefab/full/linux_arm64_gui/release/ballisticakit": "62fc890f8f89c61ac4f9115398d5bb39",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "f054f613e6a053a281b3d75c0bc19a8b", "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "6efb3f630d26baeb2b80c30cdddf90aa",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "c95435393ac3946b0cdd288cea6fd578", "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "7617fda847c7d266ebe51869c2da87d6",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "a0ef35af73a0d6566f57cd57c603c3cd", "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "0ccb43af7bcb2e4168f06ad9da5d75c9",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "ef54d4c6043e4fd789936d5fc60757af", "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "3eaf0b2db096db79515e92882125c0ad",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "a2dc425aa51d6fd086346e9418d21b97", "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "54abd8dbfcbeaa4a083a500346cfdc08",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "73ba9c896b534902308178627e67746b", "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "ddac92f49840d335e22ee96f18219651",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "bc6e2a93f1cb4cf0b19ceb577eb15ab9", "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "dde541c9422b550b1ee2f449893d870e",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "4e813fd82f679f2d87d420535cd0d549", "build/prefab/full/mac_arm64_gui/release/ballisticakit": "fbc55e0085fdf93d0a5245576df6b1f0",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "24497a56d078c29c8ebaca01b655dc7c", "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "1ff2fd68ad51c33de16e2e08d08d9394",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "955dd7032ecd7fb0e329a40964cdebb3", "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "4886ab5f22950161fbe87c8fade07453",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "cb0519ef32e0e5a2cdcb0405def7bd9c", "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "e1cd77c418b9ad22a31c654c76954c5a",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "df6c673f248be2612388edc56b1e5288", "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "4eba3abcc02e5375568e28af3aba8f24",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "a4913759d8f9b6013fae9c213441298d", "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "071455b304d2cc338e83410885152a1b",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "1f4534097a3b1bfa1f26aec4e7eefff3", "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "8ad0a29cc1fd06e643ff2d2b74b74813",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "c97a6cc985522514c5ba5b57cd4a6b70", "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "20c983102789107cfbf197c6798f184a",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "4cd0b0cd2f114ef58dc25cf148e3be64", "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "86c6eb5770512d5c838745282f7beb2e",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "4beca89d3ef221cf195bef82933a5e96", "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "d4584a0b3f5ba812ee7100df1f24edc6",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "6d97073ef999fe7e44fa9aa8ef1b5a42", "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "3522a8eb50e7898ecd388402cd765848",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "f3d305e647a7f77dd70a48f615cfd750", "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "f3d305e647a7f77dd70a48f615cfd750",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "931ce8eab9859d20ad86c47d196ba62c", "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "931ce8eab9859d20ad86c47d196ba62c",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "f3d305e647a7f77dd70a48f615cfd750", "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "f3d305e647a7f77dd70a48f615cfd750",
@ -4092,14 +4092,14 @@
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "097e17c460bf798edf61303789860596", "build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "097e17c460bf798edf61303789860596",
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "14df40bc07bdde8184843d16d5ba7798", "build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "14df40bc07bdde8184843d16d5ba7798",
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "097e17c460bf798edf61303789860596", "build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "097e17c460bf798edf61303789860596",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "8542bbc154faedf633dd82bc78dc50b7", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "72c03bbb9007b347430bb2b8811cc258",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "eb625ccd56cd37e26b6abb99ecc385c3", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "e1507e2630f191c970f972a39c167fb8",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "835d9280dddb9fa6554e631184a62f6d", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "b5008266d94788e17ca01722ce4a5515",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "5aca1f8dfd9ff294cf2ec2229e393d8e", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "d5df3b94bc7bf8cc50f75e587e03d308",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "f270764cfbb3791752fbd265b5787889", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "ec7073a212061ba663a50222fd0d2fba",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "64ca7172f66176fef0ef71d5b1e51663", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "210f6d639f2820241f7d86168b82ddf8",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "81b8aeeecb650f57d4f89636cbdf5916", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "8d57e179388d27c77b0b6d3276d0ced5",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "a3c06c787f387c586de3ff6b092c32dc", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "f3dc84fd4772d0107ec297852f17ef33",
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c", "src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
"src/assets/ba_data/python/babase/_mgen/enums.py": "f8cd3af311ac63147882590123b78318", "src/assets/ba_data/python/babase/_mgen/enums.py": "f8cd3af311ac63147882590123b78318",
"src/ballistica/base/mgen/pyembed/binding_base.inc": "c81b2b1f3a14b4cd20a7b93416fe893a", "src/ballistica/base/mgen/pyembed/binding_base.inc": "c81b2b1f3a14b4cd20a7b93416fe893a",

View File

@ -1,4 +1,4 @@
### 1.7.28 (build 21385, api 8, 2023-09-27) ### 1.7.28 (build 21386, api 8, 2023-09-27)
- Massively cleaned up code related to rendering and window systems (OpenGL, - Massively cleaned up code related to rendering and window systems (OpenGL,
SDL, etc). This code had been growing into a nasty tangle for 15 years SDL, etc). This code had been growing into a nasty tangle for 15 years

View File

@ -52,7 +52,7 @@ if TYPE_CHECKING:
# Build number and version of the ballistica binary we expect to be # Build number and version of the ballistica binary we expect to be
# using. # using.
TARGET_BALLISTICA_BUILD = 21385 TARGET_BALLISTICA_BUILD = 21386
TARGET_BALLISTICA_VERSION = '1.7.28' TARGET_BALLISTICA_VERSION = '1.7.28'

View File

@ -141,7 +141,7 @@ void AppAdapterSDL::RunMainThreadEventLoopToCompletion() {
// to the edges. Note that we want this tweak to be small enough that it // to the edges. Note that we want this tweak to be small enough that it
// won't be noticable in situations where vsync and max-fps *don't* // won't be noticable in situations where vsync and max-fps *don't*
// match. (for instance limiting to 60hz on a 120hz vsynced monitor). // match. (for instance limiting to 60hz on a 120hz vsynced monitor).
if (vsync_enabled_) { if (vsync_actually_enabled_) {
millisecs_per_frame = 99 * millisecs_per_frame / 100; millisecs_per_frame = 99 * millisecs_per_frame / 100;
} }
microsecs_t target_time = microsecs_t target_time =
@ -296,7 +296,6 @@ void AppAdapterSDL::HandleSDLEvent_(const SDL_Event& event) {
case SDL_WINDOWEVENT: { case SDL_WINDOWEVENT: {
switch (event.window.event) { switch (event.window.event) {
case SDL_WINDOWEVENT_MAXIMIZED: { case SDL_WINDOWEVENT_MAXIMIZED: {
printf("MAXIMIZED\n");
if (g_buildconfig.ostype_macos() && !fullscreen_) { if (g_buildconfig.ostype_macos() && !fullscreen_) {
// Special case: on Mac, we wind up here if someone fullscreens // Special case: on Mac, we wind up here if someone fullscreens
// our window via the window widget. This *basically* is the // our window via the window widget. This *basically* is the
@ -316,9 +315,8 @@ void AppAdapterSDL::HandleSDLEvent_(const SDL_Event& event) {
} }
case SDL_WINDOWEVENT_RESTORED: case SDL_WINDOWEVENT_RESTORED:
printf("RESTORED\n");
if (g_buildconfig.ostype_macos() && fullscreen_) { if (g_buildconfig.ostype_macos() && fullscreen_) {
// See note above. // See note above about Mac fullscreen.
fullscreen_ = false; fullscreen_ = false;
g_base->logic->event_loop()->PushCall([] { g_base->logic->event_loop()->PushCall([] {
g_base->python->objs() g_base->python->objs()
@ -329,18 +327,15 @@ void AppAdapterSDL::HandleSDLEvent_(const SDL_Event& event) {
break; break;
case SDL_WINDOWEVENT_MINIMIZED: case SDL_WINDOWEVENT_MINIMIZED:
printf("MINIMIZED\n");
break; break;
case SDL_WINDOWEVENT_HIDDEN: { case SDL_WINDOWEVENT_HIDDEN: {
// PauseApp(); // PauseApp();
printf("HIDDEN\n");
break; break;
} }
case SDL_WINDOWEVENT_SHOWN: { case SDL_WINDOWEVENT_SHOWN: {
// ResumeApp(); // ResumeApp();
printf("SHOWN\n");
break; break;
} }
@ -495,33 +490,49 @@ void AppAdapterSDL::SetScreen_(
} }
// VSync always gets set independent of the screen (though we set it down // VSync always gets set independent of the screen (though we set it down
// here to make sure we have one). // here to make sure we have a screen when its set).
if (vsync_requested != vsync_) { VSync vsync;
switch (vsync_requested) { switch (vsync_requested) {
case VSyncRequest::kNever: { case VSyncRequest::kNever:
vsync = VSync::kNever;
break;
case VSyncRequest::kAlways:
vsync = VSync::kAlways;
break;
case VSyncRequest::kAuto:
vsync = VSync::kAdaptive;
break;
default:
vsync = VSync::kNever;
break;
}
if (vsync != vsync_) {
switch (vsync) {
case VSync::kUnset:
case VSync::kNever: {
SDL_GL_SetSwapInterval(0); SDL_GL_SetSwapInterval(0);
vsync_enabled_ = false; vsync_actually_enabled_ = false;
break; break;
} }
case VSyncRequest::kAlways: { case VSync::kAlways: {
SDL_GL_SetSwapInterval(1); SDL_GL_SetSwapInterval(1);
vsync_enabled_ = true; vsync_actually_enabled_ = true;
break; break;
} }
case VSyncRequest::kAuto: { case VSync::kAdaptive: {
// In this case, let's try setting to 'adaptive' and turn it off if // In this case, let's try setting to 'adaptive' and turn it off if
// that is unsupported. // that is unsupported.
auto result = SDL_GL_SetSwapInterval(-1); auto result = SDL_GL_SetSwapInterval(-1);
if (result == 0) { if (result == 0) {
vsync_enabled_ = true; vsync_actually_enabled_ = true;
} else { } else {
SDL_GL_SetSwapInterval(0); SDL_GL_SetSwapInterval(0);
vsync_enabled_ = false; vsync_actually_enabled_ = false;
} }
break; break;
} }
} }
vsync_ = vsync_requested; vsync_ = vsync;
} }
// This we can set anytime. Probably could have just set it from the logic // This we can set anytime. Probably could have just set it from the logic

View File

@ -78,8 +78,8 @@ class AppAdapterSDL : public AppAdapter {
// SDL_Surface* sdl_screen_surface_{}; // SDL_Surface* sdl_screen_surface_{};
bool done_{}; bool done_{};
bool fullscreen_{}; bool fullscreen_{};
VSyncRequest vsync_{VSyncRequest::kNever}; VSync vsync_{VSync::kUnset};
bool vsync_enabled_{}; bool vsync_actually_enabled_{};
microsecs_t oversleep{}; microsecs_t oversleep{};
int max_fps_{60}; int max_fps_{60};
bool debug_log_sdl_frame_timing_{}; bool debug_log_sdl_frame_timing_{};

View File

@ -175,6 +175,7 @@ enum class GraphicsQuality {
kHigher, kHigher,
}; };
enum class VSync { kUnset, kNever, kAlways, kAdaptive };
enum class VSyncRequest { kNever, kAlways, kAuto }; enum class VSyncRequest { kNever, kAlways, kAuto };
/// Requests for exact or auto graphics quality values. /// Requests for exact or auto graphics quality values.

View File

@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
namespace ballistica { namespace ballistica {
// These are set automatically via script; don't modify them here. // These are set automatically via script; don't modify them here.
const int kEngineBuildNumber = 21385; const int kEngineBuildNumber = 21386;
const char* kEngineVersion = "1.7.28"; const char* kEngineVersion = "1.7.28";
const int kEngineApiVersion = 8; const int kEngineApiVersion = 8;