diff options
author | 2022-03-16 03:32:33 +0100 | |
---|---|---|
committer | 2022-03-15 22:32:33 -0400 | |
commit | 92ece92fedb15efa82a12901bc343b46a0f06905 (patch) | |
tree | dc16d467c041bb86470b409111d156ef803b73d3 /src/osd/mac/window.cpp | |
parent | 8d267ad2c7d3e757bf47d05ce816e060e37de401 (diff) |
Updated BGFX fixes; verified as working on Linux and Windows. (#9420)
* -bgfx: Improved stability when encountering missing files, and improved multi-window stability. [Ryan Holtz]
* -osd: Added video-init fallback functionality to other OSDs. [Ryan Holtz]
* -bgfx: Fixed issues from the previous batch of changes. [Ryan Holtz]
* -osdwindow: Remove no-longer-needed addition of post_create(). [Ryan Holtz]
Diffstat (limited to 'src/osd/mac/window.cpp')
-rw-r--r-- | src/osd/mac/window.cpp | 44 |
1 files changed, 35 insertions, 9 deletions
diff --git a/src/osd/mac/window.cpp b/src/osd/mac/window.cpp index 4a150e54a35..ea2adbb631f 100644 --- a/src/osd/mac/window.cpp +++ b/src/osd/mac/window.cpp @@ -69,17 +69,43 @@ bool mac_osd_interface::window_init() { osd_printf_verbose("Enter macwindow_init\n"); - // initialize the drawers - - switch (video_config.mode) - { - case VIDEO_MODE_BGFX: - renderer_bgfx::init(machine()); - break; - case VIDEO_MODE_OPENGL: - renderer_ogl::init(machine()); + // initialize the renderer + const int fallbacks[VIDEO_MODE_COUNT] = { + -1, // NONE -> no fallback + -1, // No GDI on macOS + VIDEO_MODE_OPENGL, // BGFX -> OpenGL + -1, // OpenGL -> no fallback + -1, // No SDL2ACCEL on macOS + -1, // No D3D on macOS + -1 // No SOFT on macOS + }; + + int current_mode = video_config.mode; + while (current_mode != VIDEO_MODE_NONE) + { + bool error = false; + switch(current_mode) + { + case VIDEO_MODE_BGFX: + error = renderer_bgfx::init(machine()); + break; + case VIDEO_MODE_OPENGL: + renderer_ogl::init(machine()); + break; + default: + fatalerror("Unknown video mode."); + break; + } + if (error) + { + current_mode = fallbacks[current_mode]; + } + else + { break; + } } + video_config.mode = current_mode; // set up the window list osd_printf_verbose("Leave macwindow_init\n"); |