Fix optional OpenGL enablement

Software renderer requires OpenGL, so AlberCore requries OpenGL.

The QT frontend currently requires OpenGL due to `ScreenWidget`
This commit is contained in:
Wunkolo 2024-03-10 13:49:50 -07:00
parent 772573527c
commit b147df6094

View file

@ -72,6 +72,9 @@ endif()
if(ENABLE_QT_GUI) if(ENABLE_QT_GUI)
find_package(Qt6 REQUIRED COMPONENTS Widgets) find_package(Qt6 REQUIRED COMPONENTS Widgets)
if(NOT ENABLE_OPENGL)
message(FATAL_ERROR "Qt frontend requires OpenGL")
endif()
endif() endif()
set(SDL_STATIC ON CACHE BOOL "" FORCE) set(SDL_STATIC ON CACHE BOOL "" FORCE)
@ -148,9 +151,9 @@ endif()
add_subdirectory(third_party/teakra EXCLUDE_FROM_ALL) add_subdirectory(third_party/teakra EXCLUDE_FROM_ALL)
set(SOURCE_FILES src/emulator.cpp src/io_file.cpp src/config.cpp set(SOURCE_FILES src/emulator.cpp src/io_file.cpp src/config.cpp
src/core/CPU/cpu_dynarmic.cpp src/core/CPU/dynarmic_cycles.cpp src/core/CPU/cpu_dynarmic.cpp src/core/CPU/dynarmic_cycles.cpp
src/core/memory.cpp src/renderer.cpp src/core/renderer_null/renderer_null.cpp src/core/memory.cpp src/renderer.cpp src/core/renderer_null/renderer_null.cpp
src/http_server.cpp src/stb_image_write.c src/core/cheats.cpp src/core/action_replay.cpp src/http_server.cpp src/stb_image_write.c src/core/cheats.cpp src/core/action_replay.cpp
src/discord_rpc.cpp src/lua.cpp src/memory_mapped_file.cpp src/miniaudio.cpp src/discord_rpc.cpp src/lua.cpp src/memory_mapped_file.cpp src/miniaudio.cpp
) )
set(CRYPTO_SOURCE_FILES src/core/crypto/aes_engine.cpp) set(CRYPTO_SOURCE_FILES src/core/crypto/aes_engine.cpp)
@ -252,10 +255,10 @@ set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/termcolor.hpp
) )
cmrc_add_resource_library( cmrc_add_resource_library(
resources_console_fonts resources_console_fonts
NAMESPACE ConsoleFonts NAMESPACE ConsoleFonts
WHENCE "src/core/services/fonts/" WHENCE "src/core/services/fonts/"
"src/core/services/fonts/CitraSharedFontUSRelocated.bin" "src/core/services/fonts/CitraSharedFontUSRelocated.bin"
) )
set(THIRD_PARTY_SOURCE_FILES third_party/imgui/imgui.cpp set(THIRD_PARTY_SOURCE_FILES third_party/imgui/imgui.cpp
@ -309,65 +312,64 @@ set(RENDERER_GL_SOURCE_FILES "") # Empty by default unless we are compiling with
set(RENDERER_VK_SOURCE_FILES "") # Empty by default unless we are compiling with the VK renderer set(RENDERER_VK_SOURCE_FILES "") # Empty by default unless we are compiling with the VK renderer
if(ENABLE_OPENGL) if(ENABLE_OPENGL)
find_package(OpenGL REQUIRED COMPONENTS OpenGL EGL GLX)
# This may look weird but opengl.hpp is our header even if it's in the third_party folder # This may look weird but opengl.hpp is our header even if it's in the third_party folder
set(RENDERER_GL_INCLUDE_FILES third_party/opengl/opengl.hpp set(RENDERER_GL_INCLUDE_FILES third_party/opengl/opengl.hpp
include/renderer_gl/renderer_gl.hpp include/renderer_gl/textures.hpp include/renderer_gl/renderer_gl.hpp include/renderer_gl/textures.hpp
include/renderer_gl/surfaces.hpp include/renderer_gl/surface_cache.hpp include/renderer_gl/surfaces.hpp include/renderer_gl/surface_cache.hpp
include/renderer_gl/gl_state.hpp include/renderer_gl/gl_state.hpp
) )
set(RENDERER_GL_SOURCE_FILES src/core/renderer_gl/renderer_gl.cpp set(RENDERER_GL_SOURCE_FILES src/core/renderer_gl/renderer_gl.cpp
src/core/renderer_gl/textures.cpp src/core/renderer_gl/etc1.cpp src/core/renderer_gl/textures.cpp src/core/renderer_gl/etc1.cpp
src/core/renderer_gl/gl_state.cpp src/host_shaders/opengl_display.frag src/core/renderer_gl/gl_state.cpp src/host_shaders/opengl_display.frag
src/host_shaders/opengl_display.vert src/host_shaders/opengl_vertex_shader.vert src/host_shaders/opengl_display.vert src/host_shaders/opengl_vertex_shader.vert
src/host_shaders/opengl_fragment_shader.frag src/host_shaders/opengl_fragment_shader.frag
) )
set(HEADER_FILES ${HEADER_FILES} ${RENDERER_GL_INCLUDE_FILES}) set(HEADER_FILES ${HEADER_FILES} ${RENDERER_GL_INCLUDE_FILES})
source_group("Source Files\\Core\\OpenGL Renderer" FILES ${RENDERER_GL_SOURCE_FILES}) source_group("Source Files\\Core\\OpenGL Renderer" FILES ${RENDERER_GL_SOURCE_FILES})
cmrc_add_resource_library( cmrc_add_resource_library(
resources_renderer_gl resources_renderer_gl
NAMESPACE RendererGL NAMESPACE RendererGL
WHENCE "src/host_shaders/" WHENCE "src/host_shaders/"
"src/host_shaders/opengl_display.frag" "src/host_shaders/opengl_display.frag"
"src/host_shaders/opengl_display.vert" "src/host_shaders/opengl_display.vert"
"src/host_shaders/opengl_vertex_shader.vert" "src/host_shaders/opengl_vertex_shader.vert"
"src/host_shaders/opengl_fragment_shader.frag" "src/host_shaders/opengl_fragment_shader.frag"
) )
endif() endif()
if(ENABLE_VULKAN) if(ENABLE_VULKAN)
find_package( find_package(
Vulkan 1.3.206 REQUIRED Vulkan 1.3.206 REQUIRED
COMPONENTS glslangValidator COMPONENTS glslangValidator
) )
set(RENDERER_VK_INCLUDE_FILES include/renderer_vk/renderer_vk.hpp set(RENDERER_VK_INCLUDE_FILES include/renderer_vk/renderer_vk.hpp
include/renderer_vk/vk_api.hpp include/renderer_vk/vk_debug.hpp include/renderer_vk/vk_api.hpp include/renderer_vk/vk_debug.hpp
include/renderer_vk/vk_descriptor_heap.hpp include/renderer_vk/vk_descriptor_heap.hpp
include/renderer_vk/vk_descriptor_update_batch.hpp include/renderer_vk/vk_descriptor_update_batch.hpp
include/renderer_vk/vk_sampler_cache.hpp include/renderer_vk/vk_sampler_cache.hpp
include/renderer_vk/vk_memory.hpp include/renderer_vk/vk_pica.hpp include/renderer_vk/vk_memory.hpp include/renderer_vk/vk_pica.hpp
) )
set(RENDERER_VK_SOURCE_FILES src/core/renderer_vk/renderer_vk.cpp set(RENDERER_VK_SOURCE_FILES src/core/renderer_vk/renderer_vk.cpp
src/core/renderer_vk/vk_api.cpp src/core/renderer_vk/vk_debug.cpp src/core/renderer_vk/vk_api.cpp src/core/renderer_vk/vk_debug.cpp
src/core/renderer_vk/vk_descriptor_heap.cpp src/core/renderer_vk/vk_descriptor_heap.cpp
src/core/renderer_vk/vk_descriptor_update_batch.cpp src/core/renderer_vk/vk_descriptor_update_batch.cpp
src/core/renderer_vk/vk_sampler_cache.cpp src/core/renderer_vk/vk_sampler_cache.cpp
src/core/renderer_vk/vk_memory.cpp src/core/renderer_vk/vk_pica.cpp src/core/renderer_vk/vk_memory.cpp src/core/renderer_vk/vk_pica.cpp
) )
set(HEADER_FILES ${HEADER_FILES} ${RENDERER_VK_INCLUDE_FILES}) set(HEADER_FILES ${HEADER_FILES} ${RENDERER_VK_INCLUDE_FILES})
source_group("Source Files\\Core\\Vulkan Renderer" FILES ${RENDERER_VK_SOURCE_FILES}) source_group("Source Files\\Core\\Vulkan Renderer" FILES ${RENDERER_VK_SOURCE_FILES})
set(RENDERER_VK_HOST_SHADERS_SOURCE set(RENDERER_VK_HOST_SHADERS_SOURCE
"src/host_shaders/vulkan_display.frag" "src/host_shaders/vulkan_display.frag"
"src/host_shaders/vulkan_display.vert" "src/host_shaders/vulkan_display.vert"
) )
set(RENDERER_VK_HOST_SHADERS_FLAGS -e main --target-env vulkan1.1) set(RENDERER_VK_HOST_SHADERS_FLAGS -e main --target-env vulkan1.1)
@ -380,23 +382,23 @@ if(ENABLE_VULKAN)
# Compile each vulkan shader into an .spv file # Compile each vulkan shader into an .spv file
foreach( HOST_SHADER_SOURCE ${RENDERER_VK_HOST_SHADERS_SOURCE} ) foreach( HOST_SHADER_SOURCE ${RENDERER_VK_HOST_SHADERS_SOURCE} )
get_filename_component( FILE_NAME ${HOST_SHADER_SOURCE} NAME ) get_filename_component( FILE_NAME ${HOST_SHADER_SOURCE} NAME )
set( HOST_SHADER_SPIRV "${PROJECT_BINARY_DIR}/host_shaders/${FILE_NAME}.spv" ) set( HOST_SHADER_SPIRV "${PROJECT_BINARY_DIR}/host_shaders/${FILE_NAME}.spv" )
add_custom_command( add_custom_command(
OUTPUT ${HOST_SHADER_SPIRV} OUTPUT ${HOST_SHADER_SPIRV}
COMMAND ${CMAKE_COMMAND} -E make_directory "${PROJECT_BINARY_DIR}/host_shaders/" COMMAND ${CMAKE_COMMAND} -E make_directory "${PROJECT_BINARY_DIR}/host_shaders/"
COMMAND Vulkan::glslangValidator ${RENDERER_VK_HOST_SHADERS_FLAGS} -V "${PROJECT_SOURCE_DIR}/${HOST_SHADER_SOURCE}" -o ${HOST_SHADER_SPIRV} COMMAND Vulkan::glslangValidator ${RENDERER_VK_HOST_SHADERS_FLAGS} -V "${PROJECT_SOURCE_DIR}/${HOST_SHADER_SOURCE}" -o ${HOST_SHADER_SPIRV}
DEPENDS ${HOST_SHADER_SOURCE} DEPENDS ${HOST_SHADER_SOURCE}
) )
list( APPEND RENDERER_VK_HOST_SHADERS_SPIRV ${HOST_SHADER_SPIRV} ) list( APPEND RENDERER_VK_HOST_SHADERS_SPIRV ${HOST_SHADER_SPIRV} )
endforeach() endforeach()
cmrc_add_resource_library( cmrc_add_resource_library(
resources_renderer_vk resources_renderer_vk
NAMESPACE RendererVK NAMESPACE RendererVK
WHENCE "${PROJECT_BINARY_DIR}/host_shaders/" WHENCE "${PROJECT_BINARY_DIR}/host_shaders/"
${RENDERER_VK_HOST_SHADERS_SPIRV} ${RENDERER_VK_HOST_SHADERS_SPIRV}
) )
endif() endif()
source_group("Header Files\\Core" FILES ${HEADER_FILES}) source_group("Header Files\\Core" FILES ${HEADER_FILES})
@ -419,9 +421,9 @@ if(ANDROID)
endif() endif()
if(BUILD_HYDRA_CORE) if(BUILD_HYDRA_CORE)
target_compile_definitions(AlberCore PRIVATE PANDA3DS_HYDRA_CORE=1)
include_directories(third_party/hydra_core/include)
add_library(AlberCore SHARED ${ALL_SOURCES} src/hydra_core.cpp) add_library(AlberCore SHARED ${ALL_SOURCES} src/hydra_core.cpp)
target_compile_definitions(AlberCore PRIVATE PANDA3DS_HYDRA_CORE=1)
include_directories(third_party/hydra_core/include)
else() else()
add_library(AlberCore STATIC ${ALL_SOURCES}) add_library(AlberCore STATIC ${ALL_SOURCES})
endif() endif()
@ -458,7 +460,7 @@ endif()
if(ENABLE_OPENGL) if(ENABLE_OPENGL)
target_compile_definitions(AlberCore PUBLIC "PANDA3DS_ENABLE_OPENGL=1") target_compile_definitions(AlberCore PUBLIC "PANDA3DS_ENABLE_OPENGL=1")
target_link_libraries(AlberCore PRIVATE OpenGL::OpenGL OpenGL::EGL OpenGL::GLX resources_renderer_gl) target_link_libraries(AlberCore PRIVATE resources_renderer_gl)
endif() endif()
if(ENABLE_VULKAN) if(ENABLE_VULKAN)
@ -494,14 +496,19 @@ if(ENABLE_QT_GUI)
target_link_libraries(Alber PRIVATE Qt6::Widgets) target_link_libraries(Alber PRIVATE Qt6::Widgets)
# We can't use qt_standard_project_setup since it's Qt 6.3+ and we don't need to set the minimum that high # We can't use qt_standard_project_setup since it's Qt 6.3+ and we don't need to set the minimum that high
set_target_properties(Alber PROPERTIES AUTOMOC ON) set_target_properties(Alber PROPERTIES AUTOMOC ON)
set_target_properties(Alber PROPERTIES AUTORCC ON) set_target_properties(Alber PROPERTIES AUTORCC ON)
set_target_properties(Alber PROPERTIES AUTOUIC ON) set_target_properties(Alber PROPERTIES AUTOUIC ON)
if(LINUX OR FREEBSD) if(LINUX OR FREEBSD)
find_package(X11 REQUIRED) find_package(X11 REQUIRED)
target_link_libraries(Alber PRIVATE ${X11_LIBRARIES}) target_link_libraries(Alber PRIVATE ${X11_LIBRARIES})
if(ENABLE_OPENGL)
find_package(OpenGL REQUIRED COMPONENTS OpenGL EGL GLX)
target_link_libraries(Alber PRIVATE OpenGL::OpenGL OpenGL::EGL OpenGL::GLX)
endif()
endif() endif()
qt_add_resources(AlberCore "app_images" qt_add_resources(AlberCore "app_images"