diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b8f338ec..3810204f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,7 +49,7 @@ jobs: - { name: 'Emscripten', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, emsdk: true, werror: true, clang-tidy: false, cmake-wrapper: 'emcmake' } - { name: 'Nintendo 3DS', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, n3ds: true, werror: true, clang-tidy: false, container: 'devkitpro/devkitarm:latest', cmake-args: '-DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/3DS.cmake' } - { name: 'Nintendo Switch', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, nx: true, werror: true, clang-tidy: false, container: 'devkitpro/devkita64:latest', cmake-args: '-DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/Switch.cmake' } - - { name: 'Xbox One', os: 'windows-latest', generator: 'Visual Studio 17 2022', dx5: false, config: false, msvc: true, werror: false, clang-tidy: false, vc-arch: 'amd64', cmake-args: '-DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0.26100.0', xbox-one: true} + - { name: 'Xbox One', os: 'windows-latest', generator: 'Visual Studio 18 2026', dx5: false, config: false, msvc: true, werror: false, clang-tidy: false, vc-arch: 'amd64', cmake-args: '-DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0.26100.0', xbox-one: true} - { name: 'Android', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, android: true, werror: true, clang-tidy: false,} - { name: 'Vita', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, vita: true, werror: true, clang-tidy: false, cmake-args: '--toolchain /usr/local/vitasdk/share/vita.toolchain.cmake'} - { name: 'DOS', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, dos: true, werror: true, clang-tidy: false, cmake-args: '--toolchain $GITHUB_WORKSPACE/CMake/i586-pc-msdosdjgpp.cmake'} diff --git a/LEGO1/lego/legoomni/src/common/legoutils.cpp b/LEGO1/lego/legoomni/src/common/legoutils.cpp index ca2042d6..bd403600 100644 --- a/LEGO1/lego/legoomni/src/common/legoutils.cpp +++ b/LEGO1/lego/legoomni/src/common/legoutils.cpp @@ -803,6 +803,17 @@ void LoadFromNamedTexture(LegoNamedTexture* p_namedTexture) LegoTextureInfo* textureInfo = TextureContainer()->Get(p_namedTexture->GetName()->GetData()); if (textureInfo != NULL) { + DDSURFACEDESC desc; + memset(&desc, 0, sizeof(desc)); + desc.dwSize = sizeof(desc); + + if (textureInfo->m_surface->GetSurfaceDesc(&desc) == DD_OK) { + LegoImage* image = p_namedTexture->GetTexture()->GetImage(); + if (image->GetWidth() != desc.dwWidth || image->GetHeight() != desc.dwHeight) { + image->Resize(desc.dwWidth, desc.dwHeight); + } + } + textureInfo->LoadBits(p_namedTexture->GetTexture()->GetImage()->GetBits()); } } diff --git a/LEGO1/lego/sources/misc/legoimage.cpp b/LEGO1/lego/sources/misc/legoimage.cpp index b086b284..7ff28b6c 100644 --- a/LEGO1/lego/sources/misc/legoimage.cpp +++ b/LEGO1/lego/sources/misc/legoimage.cpp @@ -179,3 +179,37 @@ LegoResult LegoImage::Write(LegoStorage* p_storage) } return SUCCESS; } + +LegoResult LegoImage::Resize(LegoU32 p_width, LegoU32 p_height) +{ + if (m_surface == NULL) { + return FAILURE; + } + if (m_surface->w == (int) p_width && m_surface->h == (int) p_height) { + return SUCCESS; + } + + SDL_Surface* newSurface = SDL_CreateSurface(p_width, p_height, SDL_PIXELFORMAT_INDEX8); + if (newSurface == NULL) { + return FAILURE; + } + + LegoU32 srcW = m_surface->w; + LegoU32 srcH = m_surface->h; + const LegoU8* src = (const LegoU8*) m_surface->pixels; + LegoU8* dst = (LegoU8*) newSurface->pixels; + + for (LegoU32 dy = 0; dy < p_height; dy++) { + LegoU32 sy = dy * srcH / p_height; + const LegoU8* srcRow = src + sy * srcW; + LegoU8* dstRow = dst + dy * p_width; + for (LegoU32 dx = 0; dx < p_width; dx++) { + LegoU32 sx = dx * srcW / p_width; + dstRow[dx] = srcRow[sx]; + } + } + + SDL_DestroySurface(m_surface); + m_surface = newSurface; + return SUCCESS; +} diff --git a/LEGO1/lego/sources/misc/legoimage.h b/LEGO1/lego/sources/misc/legoimage.h index d0269b82..d788e76c 100644 --- a/LEGO1/lego/sources/misc/legoimage.h +++ b/LEGO1/lego/sources/misc/legoimage.h @@ -49,6 +49,7 @@ class LegoImage { LegoU8* GetBits() const { return (LegoU8*) m_surface->pixels; } LegoResult Read(LegoStorage* p_storage, LegoU32 p_square); LegoResult Write(LegoStorage* p_storage); + LegoResult Resize(LegoU32 p_width, LegoU32 p_height); protected: SDL_Surface* m_surface; diff --git a/android-project/app/build.gradle b/android-project/app/build.gradle index 1a73e4b9..78793187 100644 --- a/android-project/app/build.gradle +++ b/android-project/app/build.gradle @@ -77,7 +77,7 @@ tasks.register('compileSDL3AndroidArchive', Exec) { def sdl3Dir = "build/_deps/sdl3-src" commandLine 'python', "${sdl3Dir}/build-scripts/build-release.py", - '--actions', 'android', + '--actions', 'download', 'android', '--fast', '--force', "--root=${sdl3Dir}", "--android-api=${android.defaultConfig.minSdk}"