summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/mac/window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/mac/window.cpp')
-rw-r--r--src/osd/mac/window.cpp44
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");