diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3a506ce2..a8c184bb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -132,7 +132,7 @@ jobs: run: cmake --build build --verbose --config Release - name: Package (CPack) - if: ${{ !matrix.n3ds && !matrix.vita }} + if: ${{ !matrix.n3ds }} run: | cd build success=0 @@ -180,13 +180,6 @@ jobs: mkdir dist mv *.3dsx dist/ mv *.cia dist/ - - - name: Package (Vita) - if: ${{ matrix.vita }} - run: | - cd build - mkdir dist - mv *.vpk dist/ - name: Upload Build Artifacts uses: actions/upload-artifact@v4 diff --git a/CMakeLists.txt b/CMakeLists.txt index 7db91a41..abf04506 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,6 +69,7 @@ if (DOWNLOAD_DEPENDENCIES) SDL3 GIT_REPOSITORY "https://github.com/Helloyunho/SDL3-uwp.git" GIT_TAG "main" + UPDATE_DISCONNECTED TRUE EXCLUDE_FROM_ALL ) else() @@ -86,6 +87,7 @@ if (DOWNLOAD_DEPENDENCIES) iniparser GIT_REPOSITORY "https://gitlab.com/iniparser/iniparser.git" GIT_TAG "main" + UPDATE_DISCONNECTED TRUE EXCLUDE_FROM_ALL ) block() @@ -711,7 +713,7 @@ endif() if(BUILD_SHARED_LIBS) list(APPEND install_extra_targets lego1) endif() -if (NOT (NINTENDO_3DS OR WINDOWS_STORE)) +if (NOT (NINTENDO_3DS OR WINDOWS_STORE OR VITA)) install(TARGETS isle ${install_extra_targets} RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" @@ -822,63 +824,31 @@ if(VITA) vita_create_self(isle.self isle UNSAFE) - list(APPEND VPK_FILE_ARGS FILE ${ISLE_CONFIG_SELF} isle-config.self) - list(APPEND VPK_FILE_ARGS FILE ${ISLE_CONFIG_RCO} config_plugin.rco) - - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/icon0.png sce_sys/icon0.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/pic0.png sce_sys/pic0.png) - - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/livearea/contents/bg.png sce_sys/livearea/contents/bg.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/livearea/contents/configure.png sce_sys/livearea/contents/configure.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/livearea/contents/gate.png sce_sys/livearea/contents/gate.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/livearea/contents/logo.png sce_sys/livearea/contents/logo.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/livearea/contents/template.xml sce_sys/livearea/contents/template.xml) - - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/001.png sce_sys/manual/001.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/002.png sce_sys/manual/002.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/003.png sce_sys/manual/003.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/004.png sce_sys/manual/004.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/005.png sce_sys/manual/005.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/006.png sce_sys/manual/006.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/007.png sce_sys/manual/007.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/008.png sce_sys/manual/008.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/009.png sce_sys/manual/009.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/010.png sce_sys/manual/010.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/011.png sce_sys/manual/011.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/012.png sce_sys/manual/012.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/013.png sce_sys/manual/013.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/014.png sce_sys/manual/014.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/015.png sce_sys/manual/015.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/016.png sce_sys/manual/016.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/017.png sce_sys/manual/017.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/018.png sce_sys/manual/018.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/019.png sce_sys/manual/019.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/020.png sce_sys/manual/020.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/021.png sce_sys/manual/021.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/022.png sce_sys/manual/022.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/023.png sce_sys/manual/023.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/024.png sce_sys/manual/024.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/025.png sce_sys/manual/025.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/026.png sce_sys/manual/026.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/027.png sce_sys/manual/027.png) - list(APPEND VPK_FILE_ARGS FILE packaging/vita/sce_sys/manual/028.png sce_sys/manual/028.png) - - vita_create_vpk(isle.vpk ${VITA_TITLEID} isle.self - VERSION ${VITA_VERSION} - NAME ${VITA_APP_NAME} - ${VPK_FILE_ARGS} - ) - add_dependencies(isle.vpk-vpk - isle-config.self-self - config_plugin.rco_target + add_custom_command( + OUTPUT param.sfo + COMMAND ${VITA_MKSFOEX} -s APP_VER=${VITA_VERSION} -s TITLE_ID=${VITA_TITLEID} \"${VITA_APP_NAME}\" param.sfo ) + add_custom_target(param_sfo ALL DEPENDS param.sfo) + add_dependencies(isle param_sfo) + add_dependencies(isle config_plugin.rco_target) - install(FILES "$/isle.vpk" DESTINATION "${CMAKE_INSTALL_BINDIR}") + set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF) + set(CPACK_ARCHIVE_FILE_EXTENSION "vpk") + set(CPACK_PACKAGE_FILE_NAME "lego-island-${PROJECT_VERSION}") + + install(FILES "$/isle.self" DESTINATION . RENAME "eboot.bin") + install(FILES "$/isle-config.self" DESTINATION .) + install(FILES "$/config_plugin.rco" DESTINATION .) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/param.sfo" DESTINATION .) + install(DIRECTORY packaging/vita/sce_sys DESTINATION .) endif() + if(MSVC) set(CPACK_GENERATOR ZIP) elseif(APPLE AND NOT IOS) set(CPACK_GENERATOR DragNDrop) +elseif(VITA) + set(CPACK_GENERATOR ZIP) else() set(CPACK_GENERATOR TGZ) endif() diff --git a/CONFIG/vita/CMakeLists.txt b/CONFIG/vita/CMakeLists.txt index 8a9a339d..be554524 100644 --- a/CONFIG/vita/CMakeLists.txt +++ b/CONFIG/vita/CMakeLists.txt @@ -8,6 +8,7 @@ include(FetchContent) FetchContent_Declare( ScePaf_External URL https://github.com/olebeck/ScePaf/releases/download/continuous/ScePaf-1.0.0.zip + UPDATE_DISCONNECTED TRUE ) FetchContent_MakeAvailable(ScePaf_External) @@ -52,6 +53,3 @@ endblock() include(${scepaf_external_SOURCE_DIR}/rco.cmake) make_rco(cxml/config_plugin.xml config_plugin.rco) - -set(ISLE_CONFIG_SELF ${CMAKE_CURRENT_BINARY_DIR}/isle-config.self PARENT_SCOPE) -set(ISLE_CONFIG_RCO ${CMAKE_CURRENT_BINARY_DIR}/config_plugin.rco PARENT_SCOPE) diff --git a/ISLE/isleapp.cpp b/ISLE/isleapp.cpp index d2d02ebe..cd665923 100644 --- a/ISLE/isleapp.cpp +++ b/ISLE/isleapp.cpp @@ -840,7 +840,7 @@ MxResult IsleApp::SetupWindow() SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_HEIGHT_NUMBER, g_targetHeight); SDL_SetBooleanProperty(props, SDL_PROP_WINDOW_CREATE_FULLSCREEN_BOOLEAN, m_fullScreen); SDL_SetStringProperty(props, SDL_PROP_WINDOW_CREATE_TITLE_STRING, WINDOW_TITLE); -#if defined(MINIWIN) && !defined(__3DS__) && !defined(WINDOWS_STORE) && !defined(__vita__) +#if defined(MINIWIN) && (defined(USE_OPENGLES2) || defined(USE_OPENGL1)) SDL_SetBooleanProperty(props, SDL_PROP_WINDOW_CREATE_OPENGL_BOOLEAN, true); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); diff --git a/miniwin/CMakeLists.txt b/miniwin/CMakeLists.txt index 611f2eba..88128cca 100644 --- a/miniwin/CMakeLists.txt +++ b/miniwin/CMakeLists.txt @@ -20,11 +20,6 @@ add_library(miniwin STATIC EXCLUDE_FROM_ALL src/d3drm/d3drmtexture.cpp src/d3drm/d3drmviewport.cpp src/internal/meshutils.cpp - - # D3DRM backends - src/d3drm/backends/sdl3gpu/renderer.cpp - src/d3drm/backends/sdl3gpu/shaders/generated/ShaderIndex.cpp - src/d3drm/backends/software/renderer.cpp ) target_compile_definitions(miniwin PRIVATE @@ -91,6 +86,7 @@ if(NINTENDO_3DS) ctr_add_shader_library(vshader src/d3drm/backends/citro3d/vshader.v.pica) dkp_add_embedded_binary_library(3ds_shaders vshader) target_link_libraries(miniwin PRIVATE ${CITRO3D_LIBRARY} 3ds_shaders) + list(APPEND GRAPHICS_BACKENDS USE_CITRO3D) else() message(STATUS "🧩 Citro3D support not enabled") endif() @@ -102,12 +98,26 @@ if(WIN32 AND NOT WINDOWS_STORE) src/d3drm/backends/directx9/renderer.cpp ) target_link_libraries(miniwin PRIVATE d3d9) + list(APPEND GRAPHICS_BACKENDS USE_DIRECTX9) endif() if(WINDOWS_STORE) add_compile_definitions(WINDOWS_STORE) endif() +if(USE_SDL_GPU IN_LIST GRAPHICS_BACKENDS) + target_sources(miniwin PRIVATE + src/d3drm/backends/sdl3gpu/renderer.cpp + src/d3drm/backends/sdl3gpu/shaders/generated/ShaderIndex.cpp + ) +endif() + +if(USE_SOFTWARE_RENDER IN_LIST GRAPHICS_BACKENDS) + target_sources(miniwin PRIVATE + src/d3drm/backends/software/renderer.cpp + ) +endif() + target_compile_definitions(miniwin PUBLIC MINIWIN) target_include_directories(miniwin @@ -119,7 +129,7 @@ target_link_libraries(miniwin PUBLIC miniwin-headers) target_link_libraries(miniwin PRIVATE SDL3::SDL3) -target_compile_definitions(miniwin PRIVATE ${GRAPHICS_BACKENDS}) +target_compile_definitions(miniwin PUBLIC ${GRAPHICS_BACKENDS}) # Shader stuff diff --git a/miniwin/src/d3drm/d3drm.cpp b/miniwin/src/d3drm/d3drm.cpp index bf9c403d..61fa4bb6 100644 --- a/miniwin/src/d3drm/d3drm.cpp +++ b/miniwin/src/d3drm/d3drm.cpp @@ -13,13 +13,13 @@ #ifdef USE_OPENGLES2 #include "d3drmrenderer_opengles2.h" #endif -#ifdef __3DS__ +#ifdef USE_CITRO3D #include "d3drmrenderer_citro3d.h" #endif -#ifdef _WIN32 +#ifdef USE_DIRECTX9 #include "d3drmrenderer_directx9.h" #endif -#ifdef __vita__ +#ifdef USE_GXM #include "d3drmrenderer_gxm.h" #endif #ifdef USE_SDL_GPU @@ -175,17 +175,17 @@ HRESULT Direct3DRMImpl::CreateDeviceFromSurface( DDRenderer = OpenGL1Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); } #endif -#ifdef __3DS__ +#ifdef USE_CITRO3D else if (SDL_memcmp(&guid, &Citro3D_GUID, sizeof(GUID)) == 0) { DDRenderer = new Citro3DRenderer(DDSDesc.dwWidth, DDSDesc.dwHeight); } #endif -#if defined(_WIN32) && !defined(WINDOWS_STORE) +#ifdef USE_DIRECTX9 else if (SDL_memcmp(&guid, &DirectX9_GUID, sizeof(GUID)) == 0) { DDRenderer = DirectX9Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); } #endif -#ifdef __vita__ +#ifdef USE_GXM else if (SDL_memcmp(&guid, &GXM_GUID, sizeof(GUID)) == 0) { DDRenderer = GXMRenderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); } diff --git a/miniwin/src/ddraw/ddraw.cpp b/miniwin/src/ddraw/ddraw.cpp index 9c5c928d..fd2e26e6 100644 --- a/miniwin/src/ddraw/ddraw.cpp +++ b/miniwin/src/ddraw/ddraw.cpp @@ -4,13 +4,13 @@ #ifdef USE_OPENGLES2 #include "d3drmrenderer_opengles2.h" #endif -#ifdef __3DS__ +#ifdef USE_CITRO3D #include "d3drmrenderer_citro3d.h" #endif -#if defined(_WIN32) && !defined(WINDOWS_STORE) +#if USE_DIRECTX9 #include "d3drmrenderer_directx9.h" #endif -#ifdef __vita__ +#ifdef USE_GXM #include "d3drmrenderer_gxm.h" #endif #ifdef USE_SDL_GPU @@ -248,13 +248,13 @@ HRESULT DirectDrawImpl::EnumDevices(LPD3DENUMDEVICESCALLBACK cb, void* ctx) #ifdef USE_OPENGL1 OpenGL1Renderer_EnumDevice(cb, ctx); #endif -#ifdef __3DS__ +#ifdef USE_CITRO3D Citro3DRenderer_EnumDevice(cb, ctx); #endif -#if defined(_WIN32) && !defined(WINDOWS_STORE) +#ifdef USE_DIRECTX9 DirectX9Renderer_EnumDevice(cb, ctx); #endif -#ifdef __vita__ +#ifdef USE_GXM GXMRenderer_EnumDevice(cb, ctx); #endif #ifdef USE_SOFTWARE_RENDER @@ -378,12 +378,12 @@ HRESULT DirectDrawImpl::CreateDevice( DDRenderer = new Citro3DRenderer(DDSDesc.dwWidth, DDSDesc.dwHeight); } #endif -#if defined(_WIN32) && !defined(WINDOWS_STORE) +#ifdef USE_DIRECTX9 else if (SDL_memcmp(&guid, &DirectX9_GUID, sizeof(GUID)) == 0) { DDRenderer = DirectX9Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); } #endif -#ifdef __vita__ +#ifdef USE_GXM else if (SDL_memcmp(&guid, &GXM_GUID, sizeof(GUID)) == 0) { DDRenderer = GXMRenderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); }