cmake, sdl: fix for some SBCs
sdl: don't request alpha channel for gl context sdl: start fullscreen if not desktop cmake: make openmp, host libzip optional. gles needs libEGL fix crash when falling back to gl after vk init fails
This commit is contained in:
parent
ee109d0fec
commit
9bc832c4c6
|
@ -11,6 +11,10 @@ option(ENABLE_OPROFILE "Enable OProfile" OFF)
|
|||
option(TEST_AUTOMATION "Enable test automation" OFF)
|
||||
option(ENABLE_LOG "Enable full logging" OFF)
|
||||
option(ASAN "Enable address sanitizer" OFF)
|
||||
option(USE_GLES "Use GLES[3] API" OFF)
|
||||
option(USE_GLES2 "Use GLES2 API" OFF)
|
||||
option(USE_HOST_LIBZIP "Use host libzip" ON)
|
||||
option(USE_OPENMP "Use OpenMP if available" ON)
|
||||
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/shell/cmake")
|
||||
|
||||
|
@ -86,7 +90,7 @@ target_compile_definitions(${PROJECT_NAME} PRIVATE
|
|||
target_include_directories(${PROJECT_NAME} PRIVATE core core/deps core/deps/stb core/deps/xbyak core/khronos)
|
||||
|
||||
find_package(OpenMP)
|
||||
if(OpenMP_CXX_FOUND AND NOT APPLE)
|
||||
if(OpenMP_CXX_FOUND AND NOT APPLE AND USE_OPENMP)
|
||||
if(MINGW)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE "-static -lgomp -lpthread")
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE -fopenmp)
|
||||
|
@ -192,17 +196,19 @@ if(PKG_CONFIG_FOUND AND NOT ANDROID AND NOT APPLE)
|
|||
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::FLAC)
|
||||
endif()
|
||||
|
||||
pkg_check_modules(LIBEVDEV IMPORTED_TARGET libevdev)
|
||||
if(LIBEVDEV_FOUND)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_EVDEV)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::LIBEVDEV)
|
||||
|
||||
pkg_check_modules(LIBUDEV IMPORTED_TARGET libudev)
|
||||
if(LIBUDEV_FOUND)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_UDEV)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::LIBUDEV)
|
||||
endif()
|
||||
endif()
|
||||
if(NOT SDL2_FOUND)
|
||||
pkg_check_modules(LIBEVDEV IMPORTED_TARGET libevdev)
|
||||
if(LIBEVDEV_FOUND)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_EVDEV)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::LIBEVDEV)
|
||||
|
||||
pkg_check_modules(LIBUDEV IMPORTED_TARGET libudev)
|
||||
if(LIBUDEV_FOUND)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_UDEV)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::LIBUDEV)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
pkg_check_modules(LIBPULSE IMPORTED_TARGET libpulse)
|
||||
if(LIBPULSE_FOUND)
|
||||
|
@ -210,9 +216,11 @@ if(PKG_CONFIG_FOUND AND NOT ANDROID AND NOT APPLE)
|
|||
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::LIBPULSE)
|
||||
endif()
|
||||
|
||||
pkg_check_modules(LIBZIP IMPORTED_TARGET libzip)
|
||||
if(LIBZIP_FOUND)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::LIBZIP)
|
||||
if(USE_HOST_LIBZIP)
|
||||
pkg_check_modules(LIBZIP IMPORTED_TARGET libzip)
|
||||
if(LIBZIP_FOUND)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::LIBZIP)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(ENABLE_OPROFILE)
|
||||
|
@ -228,9 +236,17 @@ if(PKG_CONFIG_FOUND AND NOT ANDROID AND NOT APPLE)
|
|||
endif()
|
||||
|
||||
if(UNIX AND NOT APPLE AND NOT ANDROID)
|
||||
set(OpenGL_GL_PREFERENCE LEGACY)
|
||||
find_package(OpenGL REQUIRED)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE OpenGL::GL)
|
||||
if(USE_GLES2)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE GLES GLES2)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE GLESv2 EGL)
|
||||
elseif(USE_GLES)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE GLES GLES3)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE EGL)
|
||||
else()
|
||||
set(OpenGL_GL_PREFERENCE LEGACY)
|
||||
find_package(OpenGL REQUIRED)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE OpenGL::GL)
|
||||
endif()
|
||||
|
||||
find_package(Threads REQUIRED)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads)
|
||||
|
@ -248,6 +264,8 @@ if(UNIX AND NOT APPLE AND NOT ANDROID)
|
|||
target_include_directories(${PROJECT_NAME} PRIVATE ${X11_INCLUDE_DIR})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${X11_LIBRARIES})
|
||||
endif()
|
||||
else()
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE EGL_NO_X11)
|
||||
endif()
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_DL_LIBS} rt)
|
||||
|
@ -776,8 +794,13 @@ target_sources(${PROJECT_NAME} PRIVATE
|
|||
core/rend/TexCache.cpp
|
||||
core/rend/TexCache.h)
|
||||
|
||||
if(NOT APPLE AND NOT ANDROID)
|
||||
target_sources(${PROJECT_NAME} PRIVATE core/rend/gl4/abuffer.cpp core/rend/gl4/gl4.h core/rend/gl4/gldraw.cpp core/rend/gl4/gles.cpp core/rend/gl4/gltex.cpp)
|
||||
if(NOT (APPLE OR ANDROID OR USE_GLES))
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/rend/gl4/abuffer.cpp
|
||||
core/rend/gl4/gl4.h
|
||||
core/rend/gl4/gldraw.cpp
|
||||
core/rend/gl4/gles.cpp
|
||||
core/rend/gl4/gltex.cpp)
|
||||
endif()
|
||||
|
||||
if(NOT APPLE)
|
||||
|
|
|
@ -474,15 +474,17 @@ bool sdl_recreate_window(u32 flags)
|
|||
get_window_state();
|
||||
SDL_DestroyWindow(window);
|
||||
}
|
||||
#ifdef TARGET_PANDORA
|
||||
flags |= SDL_FULLSCREEN;
|
||||
#else
|
||||
flags |= SDL_SWSURFACE | SDL_WINDOW_RESIZABLE;
|
||||
flags |= SDL_SWSURFACE;
|
||||
#if !defined(GLES)
|
||||
flags |= SDL_WINDOW_RESIZABLE;
|
||||
if (window_fullscreen)
|
||||
flags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
|
||||
else if (window_maximized)
|
||||
flags |= SDL_WINDOW_MAXIMIZED;
|
||||
#else
|
||||
flags |= SDL_WINDOW_FULLSCREEN;
|
||||
#endif
|
||||
|
||||
window = SDL_CreateWindow("Flycast", x, y, window_width * scaling, window_height * scaling, flags);
|
||||
if (window == nullptr)
|
||||
{
|
||||
|
@ -490,7 +492,7 @@ bool sdl_recreate_window(u32 flags)
|
|||
return false;
|
||||
}
|
||||
|
||||
#ifndef _WIN32
|
||||
#if !defined(GLES) && !defined(_WIN32)
|
||||
// Set the window icon
|
||||
u32 pixels[48 * 48];
|
||||
for (int i = 0; i < 48 * 48; i++)
|
||||
|
|
|
@ -42,7 +42,6 @@ bool SDLGLGraphicsContext::Init()
|
|||
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
|
||||
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
|
||||
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
|
||||
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
|
||||
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
|
||||
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
|
||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||
|
@ -51,23 +50,21 @@ bool SDLGLGraphicsContext::Init()
|
|||
return false;
|
||||
|
||||
glcontext = SDL_GL_CreateContext(window);
|
||||
if (!glcontext)
|
||||
{
|
||||
#ifndef GLES
|
||||
if (glcontext == SDL_GLContext())
|
||||
{
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, 0);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
|
||||
glcontext = SDL_GL_CreateContext(window);
|
||||
if (!glcontext)
|
||||
{
|
||||
#endif
|
||||
ERROR_LOG(RENDERER, "Error creating SDL GL context");
|
||||
SDL_DestroyWindow(window);
|
||||
window = nullptr;
|
||||
return false;
|
||||
#ifndef GLES
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (glcontext == SDL_GLContext())
|
||||
{
|
||||
ERROR_LOG(RENDERER, "Error creating SDL GL context");
|
||||
SDL_DestroyWindow(window);
|
||||
window = nullptr;
|
||||
return false;
|
||||
}
|
||||
SDL_GL_MakeCurrent(window, NULL);
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@ void InitRenderApi()
|
|||
// Fall back to Open GL
|
||||
WARN_LOG(RENDERER, "Vulkan init failed. Falling back to Open GL.");
|
||||
config::RendererType = RenderType::OpenGL;
|
||||
config::RendererType.commit();
|
||||
}
|
||||
#endif
|
||||
if (!theGLContext.Init())
|
||||
|
|
Loading…
Reference in New Issue