diff --git a/CMakeLists.txt b/CMakeLists.txt index ec6d92f07..9a08784fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,11 +127,15 @@ if(WIN32) execute_process(COMMAND git apply -p1 ${CMAKE_CURRENT_SOURCE_DIR}/core/deps/patches/SDL.patch WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/core/deps/SDL) file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/core/deps/SDL") + if(MSVC) + set(SDL_CMAKE_ARCH_ARG -A ${CMAKE_GENERATOR_PLATFORM}) + endif() execute_process(COMMAND ${CMAKE_COMMAND} "-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/core/deps/SDL" + -DLIBC=ON -DBUILD_SHARED_LIBS=OFF -G "${CMAKE_GENERATOR}" - $<$:-A ${CMAKE_GENERATOR_PLATFORM}> + ${SDL_CMAKE_ARCH_ARG} "${CMAKE_CURRENT_SOURCE_DIR}/core/deps/SDL" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/core/deps/SDL") execute_process(COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/core/deps/SDL" --config Release --target install) @@ -142,7 +146,7 @@ if(MINGW) endif() if(NOT ANDROID) - find_package(SDL2 QUIET HINTS "${CMAKE_CURRENT_BINARY_DIR}/core/deps/SDL") + find_package(SDL2 HINTS "${CMAKE_CURRENT_BINARY_DIR}/core/deps/SDL") endif() if(SDL2_FOUND) target_compile_definitions(${PROJECT_NAME} PRIVATE USE_SDL USE_SDL_AUDIO) diff --git a/core/nullDC.cpp b/core/nullDC.cpp index 6a6ad5daa..b1f583e5b 100644 --- a/core/nullDC.cpp +++ b/core/nullDC.cpp @@ -405,6 +405,9 @@ int reicast_init(int argc, char* argv[]) LogManager::Init(); config::Settings::instance().load(false); } + // Force the renderer type now since we're not switching + if (renderer_changed != -1) + config::RendererType = (RenderType)renderer_changed; os_CreateWindow(); os_SetupInput(); diff --git a/core/rend/vulkan/vulkan_context.cpp b/core/rend/vulkan/vulkan_context.cpp index fcb387e62..b1eacd33c 100644 --- a/core/rend/vulkan/vulkan_context.cpp +++ b/core/rend/vulkan/vulkan_context.cpp @@ -716,7 +716,7 @@ bool VulkanContext::Init() VkSurfaceKHR surface; if (SDL_Vulkan_CreateSurface((SDL_Window *)window, (VkInstance)*instance, &surface) == 0) return false; - this->surface.reset(surface); + this->surface.reset(vk::SurfaceKHR(surface)); #elif defined(_WIN32) vk::Win32SurfaceCreateInfoKHR createInfo(vk::Win32SurfaceCreateFlagsKHR(), GetModuleHandle(NULL), (HWND)window); surface = instance->createWin32SurfaceKHRUnique(createInfo); @@ -935,7 +935,7 @@ void VulkanContext::Term() #ifndef USE_SDL surface.reset(); #else - ::vkDestroySurfaceKHR(*instance, surface.release(), nullptr); + ::vkDestroySurfaceKHR((VkInstance)*instance, (VkSurfaceKHR)surface.release(), nullptr); #endif pipelineCache.reset(); device.reset(); diff --git a/core/windows/winmain.cpp b/core/windows/winmain.cpp index c94b5a104..016cc68e2 100644 --- a/core/windows/winmain.cpp +++ b/core/windows/winmain.cpp @@ -735,27 +735,17 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi #else SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)&ExeptionHandler); #endif -#ifndef __GNUC__ - __try + if (reicast_init(argc, argv) != 0) + die("Flycast initialization failed"); + +#ifdef _WIN64 + setup_seh(); #endif - { - if (reicast_init(argc, argv) != 0) - die("Flycast initialization failed"); - #ifdef _WIN64 - setup_seh(); - #endif + mainui_loop(); - mainui_loop(); + dc_term(); - dc_term(); - } -#ifndef __GNUC__ - __except( ExeptionHandler(GetExceptionInformation()) ) - { - ERROR_LOG(COMMON, "Unhandled exception - UI thread halted..."); - } -#endif SetUnhandledExceptionFilter(0); #ifdef USE_SDL sdl_window_destroy();