[no sq] Move shaders & remove dead Irrlicht tests (#15006)
* Move irrlicht shaders to correct place * Remove unused Irrlicht tests
@ -1 +0,0 @@
|
|||||||
../../irr/media/Shaders
|
|
0
irr/media/Shaders/TransparentAlphaChannel.fsh → client/shaders/Irrlicht/TransparentAlphaChannel.fsh
310
irr/.github/workflows/build.yml
vendored
@ -1,310 +0,0 @@
|
|||||||
name: build
|
|
||||||
|
|
||||||
# build on c/cpp changes or workflow changes
|
|
||||||
on:
|
|
||||||
- push
|
|
||||||
- pull_request
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
linux-gl:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Install deps
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install g++ cmake libxi-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cmake . -DUSE_SDL2=OFF
|
|
||||||
make VERBOSE=1 -j2
|
|
||||||
|
|
||||||
- name: Test
|
|
||||||
run: |
|
|
||||||
ctest --output-on-failure
|
|
||||||
|
|
||||||
- name: Package
|
|
||||||
run: |
|
|
||||||
make DESTDIR=$PWD/_install install
|
|
||||||
tar -c -I "gzip -9" -f irrlicht-linux.tar.gz -C ./_install/usr/local .
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: irrlicht-linux
|
|
||||||
path: ./irrlicht-linux.tar.gz
|
|
||||||
|
|
||||||
linux-gles:
|
|
||||||
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Install deps
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install g++ cmake libxi-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=OFF -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
|
|
||||||
make -j2
|
|
||||||
|
|
||||||
- name: Test (headless)
|
|
||||||
run: |
|
|
||||||
cd bin/Linux
|
|
||||||
./AutomatedTest null
|
|
||||||
|
|
||||||
- name: Test (Xvfb)
|
|
||||||
run: |
|
|
||||||
cd bin/Linux
|
|
||||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
|
|
||||||
|
|
||||||
linux-sdl:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Install deps
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DCMAKE_BUILD_TYPE=Debug
|
|
||||||
make -j2
|
|
||||||
|
|
||||||
- name: Test (headless)
|
|
||||||
run: |
|
|
||||||
cd bin/Linux
|
|
||||||
./AutomatedTest null
|
|
||||||
|
|
||||||
linux-sdl-gl3:
|
|
||||||
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Install deps
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DENABLE_OPENGL=OFF -DENABLE_OPENGL3=ON
|
|
||||||
make -j2
|
|
||||||
|
|
||||||
- name: Test (headless)
|
|
||||||
run: |
|
|
||||||
cd bin/Linux
|
|
||||||
./AutomatedTest null
|
|
||||||
|
|
||||||
- name: Test (Xvfb)
|
|
||||||
run: |
|
|
||||||
cd bin/Linux
|
|
||||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest opengl3
|
|
||||||
|
|
||||||
linux-sdl-gles2:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Install deps
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
|
|
||||||
make -j2
|
|
||||||
|
|
||||||
- name: Test (headless)
|
|
||||||
run: |
|
|
||||||
cd bin/Linux
|
|
||||||
./AutomatedTest null
|
|
||||||
|
|
||||||
- name: Test (Xvfb)
|
|
||||||
run: |
|
|
||||||
cd bin/Linux
|
|
||||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
|
|
||||||
|
|
||||||
mingw:
|
|
||||||
name: "MinGW ${{matrix.config.variant}}${{matrix.config.extras}}"
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
config:
|
|
||||||
- {variant: win32, arch: i686}
|
|
||||||
- {variant: win64, arch: x86_64}
|
|
||||||
- {variant: win32, arch: i686, extras: "-sdl"}
|
|
||||||
- {variant: win64, arch: x86_64, extras: "-sdl"}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Install compiler
|
|
||||||
run: |
|
|
||||||
sudo apt-get update && sudo apt-get install cmake -qyy
|
|
||||||
./scripts/ci-get-mingw.sh
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
./scripts/ci-build-mingw.sh package
|
|
||||||
env:
|
|
||||||
CC: ${{matrix.config.arch}}-w64-mingw32-clang
|
|
||||||
CXX: ${{matrix.config.arch}}-w64-mingw32-clang++
|
|
||||||
extras: ${{matrix.config.extras}}
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}
|
|
||||||
path: ./irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}.zip
|
|
||||||
|
|
||||||
macos:
|
|
||||||
runs-on: macos-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Install deps
|
|
||||||
run: |
|
|
||||||
brew update --auto-update
|
|
||||||
brew install cmake libpng jpeg
|
|
||||||
env:
|
|
||||||
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
|
|
||||||
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cmake . -DCMAKE_FIND_FRAMEWORK=LAST -DBUILD_EXAMPLES=1
|
|
||||||
make -j3
|
|
||||||
|
|
||||||
- name: Test (headless)
|
|
||||||
run: |
|
|
||||||
./bin/OSX/AutomatedTest null
|
|
||||||
|
|
||||||
macos-sdl:
|
|
||||||
runs-on: macos-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Install deps
|
|
||||||
run: |
|
|
||||||
brew update --auto-update
|
|
||||||
brew install cmake libpng jpeg sdl2
|
|
||||||
env:
|
|
||||||
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
|
|
||||||
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cmake . -DCMAKE_FIND_FRAMEWORK=LAST -DBUILD_EXAMPLES=1 -DUSE_SDL2=1
|
|
||||||
make -j3
|
|
||||||
|
|
||||||
msvc:
|
|
||||||
name: VS 2019 ${{ matrix.config.arch }} ${{ matrix.sdl.label }}
|
|
||||||
runs-on: windows-2019
|
|
||||||
env:
|
|
||||||
VCPKG_VERSION: 8eb57355a4ffb410a2e94c07b4dca2dffbee8e50
|
|
||||||
# 2023.10.19
|
|
||||||
vcpkg_packages: zlib libpng libjpeg-turbo
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
config:
|
|
||||||
-
|
|
||||||
arch: x86
|
|
||||||
generator: "-G'Visual Studio 16 2019' -A Win32"
|
|
||||||
vcpkg_triplet: x86-windows
|
|
||||||
-
|
|
||||||
arch: x64
|
|
||||||
generator: "-G'Visual Studio 16 2019' -A x64"
|
|
||||||
vcpkg_triplet: x64-windows
|
|
||||||
sdl:
|
|
||||||
-
|
|
||||||
use: FALSE
|
|
||||||
label: '(no SDL)'
|
|
||||||
vcpkg_packages: opengl-registry
|
|
||||||
-
|
|
||||||
use: TRUE
|
|
||||||
label: '(with SDL)'
|
|
||||||
vcpkg_packages: sdl2
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Restore from cache and run vcpkg
|
|
||||||
uses: lukka/run-vcpkg@v7
|
|
||||||
with:
|
|
||||||
vcpkgArguments: ${{env.vcpkg_packages}} ${{matrix.sdl.vcpkg_packages}}
|
|
||||||
vcpkgDirectory: '${{ github.workspace }}\vcpkg'
|
|
||||||
appendedCacheKey: ${{ matrix.config.vcpkg_triplet }}
|
|
||||||
vcpkgGitCommitId: ${{ env.VCPKG_VERSION }}
|
|
||||||
vcpkgTriplet: ${{ matrix.config.vcpkg_triplet }}
|
|
||||||
|
|
||||||
- name: CMake
|
|
||||||
run: |
|
|
||||||
cmake ${{matrix.config.generator}} `
|
|
||||||
-DUSE_SDL2=${{matrix.sdl.use}} `
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" `
|
|
||||||
-DCMAKE_BUILD_TYPE=Release .
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: cmake --build . --config Release
|
|
||||||
|
|
||||||
- name: Create artifact folder
|
|
||||||
run: |
|
|
||||||
mkdir artifact/
|
|
||||||
mkdir artifact/lib/
|
|
||||||
|
|
||||||
- name: Move dlls into artifact folder
|
|
||||||
run: move bin\Win32-VisualStudio\Release\* artifact\lib\
|
|
||||||
|
|
||||||
- name: Move includes into artifact folder
|
|
||||||
run: move include artifact/
|
|
||||||
|
|
||||||
- name: Upload Artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: msvc-${{ matrix.config.arch }}-${{matrix.sdl.use}}
|
|
||||||
path: artifact/
|
|
||||||
|
|
||||||
android:
|
|
||||||
name: Android ${{ matrix.arch }}
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
env:
|
|
||||||
ndk_version: "r25c"
|
|
||||||
ANDROID_NDK: ${{ github.workspace }}/android-ndk
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
arch: [armeabi-v7a, arm64-v8a, x86, x86_64]
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install deps
|
|
||||||
run: |
|
|
||||||
sudo rm /var/lib/man-db/auto-update
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -qyy wget unzip zip gcc-multilib make cmake
|
|
||||||
|
|
||||||
- name: Cache NDK
|
|
||||||
id: cache-ndk
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
key: android-ndk-${{ env.ndk_version }}-linux
|
|
||||||
path: ${{ env.ANDROID_NDK }}
|
|
||||||
|
|
||||||
- name: Install NDK
|
|
||||||
run: |
|
|
||||||
wget --progress=bar:force "http://dl.google.com/android/repository/android-ndk-${ndk_version}-linux.zip"
|
|
||||||
unzip -q "android-ndk-${ndk_version}-linux.zip"
|
|
||||||
rm "android-ndk-${ndk_version}-linux.zip"
|
|
||||||
mv "android-ndk-${ndk_version}" "${ANDROID_NDK}"
|
|
||||||
if: ${{ steps.cache-ndk.outputs.cache-hit != 'true' }}
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: ./scripts/ci-build-android.sh ${{ matrix.arch }}
|
|
||||||
|
|
||||||
#- name: Upload Artifact
|
|
||||||
# uses: actions/upload-artifact@v4
|
|
||||||
# with:
|
|
||||||
# name: irrlicht-android-${{ matrix.arch }}
|
|
||||||
# path: ${{ runner.temp }}/pkg/${{ matrix.arch }}
|
|
@ -11,14 +11,5 @@ if(NOT CMAKE_BUILD_TYPE)
|
|||||||
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type: Debug or Release" FORCE)
|
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type: Debug or Release" FORCE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# FIXME: tests need to be moved to MT if we want to keep them
|
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
#enable_testing()
|
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
#add_subdirectory(test)
|
|
||||||
|
|
||||||
#option(BUILD_EXAMPLES "Build example applications" FALSE)
|
|
||||||
#if(BUILD_EXAMPLES)
|
|
||||||
# add_subdirectory(examples)
|
|
||||||
#endif()
|
|
||||||
|
@ -1,154 +0,0 @@
|
|||||||
#include <iostream>
|
|
||||||
#include <irrlicht.h>
|
|
||||||
#include "exampleHelper.h"
|
|
||||||
|
|
||||||
using namespace irr;
|
|
||||||
|
|
||||||
static IrrlichtDevice *device = nullptr;
|
|
||||||
static int test_fail = 0;
|
|
||||||
|
|
||||||
void test_irr_array();
|
|
||||||
void test_irr_string();
|
|
||||||
|
|
||||||
static video::E_DRIVER_TYPE chooseDriver(core::stringc arg_)
|
|
||||||
{
|
|
||||||
if (arg_ == "null")
|
|
||||||
return video::EDT_NULL;
|
|
||||||
if (arg_ == "ogles1")
|
|
||||||
return video::EDT_OGLES1;
|
|
||||||
if (arg_ == "ogles2")
|
|
||||||
return video::EDT_OGLES2;
|
|
||||||
if (arg_ == "opengl")
|
|
||||||
return video::EDT_OPENGL;
|
|
||||||
if (arg_ == "opengl3")
|
|
||||||
return video::EDT_OPENGL3;
|
|
||||||
std::cerr << "Unknown driver type: " << arg_.c_str() << ". Trying OpenGL." << std::endl;
|
|
||||||
return video::EDT_OPENGL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void check(bool ok, const char *msg)
|
|
||||||
{
|
|
||||||
if (!ok) {
|
|
||||||
test_fail++;
|
|
||||||
device->getLogger()->log((core::stringc("FAILED TEST: ") + msg).c_str(), ELL_ERROR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void run_unit_tests()
|
|
||||||
{
|
|
||||||
std::cout << "Running unit tests:" << std::endl;
|
|
||||||
try {
|
|
||||||
test_irr_array();
|
|
||||||
test_irr_string();
|
|
||||||
} catch (const std::exception &e) {
|
|
||||||
std::cerr << e.what() << std::endl;
|
|
||||||
test_fail++;
|
|
||||||
}
|
|
||||||
std::cout << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
run_unit_tests();
|
|
||||||
|
|
||||||
SIrrlichtCreationParameters p;
|
|
||||||
p.DriverType = chooseDriver(argc > 1 ? argv[1] : "");
|
|
||||||
p.WindowSize = core::dimension2du(640, 480);
|
|
||||||
p.Vsync = true;
|
|
||||||
p.LoggingLevel = ELL_DEBUG;
|
|
||||||
|
|
||||||
device = createDeviceEx(p);
|
|
||||||
if (!device)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
{
|
|
||||||
u32 total = 0;
|
|
||||||
device->getOSOperator()->getSystemMemory(&total, nullptr);
|
|
||||||
core::stringc message = core::stringc("Total RAM in MiB: ") + core::stringc(total >> 10);
|
|
||||||
device->getLogger()->log(message.c_str(), ELL_INFORMATION);
|
|
||||||
check(total > 130 * 1024, "RAM amount");
|
|
||||||
}
|
|
||||||
|
|
||||||
device->setWindowCaption(L"Hello World!");
|
|
||||||
device->setResizable(true);
|
|
||||||
|
|
||||||
video::IVideoDriver *driver = device->getVideoDriver();
|
|
||||||
scene::ISceneManager *smgr = device->getSceneManager();
|
|
||||||
gui::IGUIEnvironment *guienv = device->getGUIEnvironment();
|
|
||||||
|
|
||||||
guienv->addStaticText(L"sample text", core::rect<s32>(10, 10, 110, 22), false);
|
|
||||||
|
|
||||||
gui::IGUIButton *button = guienv->addButton(
|
|
||||||
core::rect<s32>(10, 30, 110, 30 + 32), 0, -1, L"sample button",
|
|
||||||
L"sample tooltip");
|
|
||||||
|
|
||||||
gui::IGUIEditBox *editbox = guienv->addEditBox(L"",
|
|
||||||
core::rect<s32>(10, 70, 60, 70 + 16));
|
|
||||||
|
|
||||||
const io::path mediaPath = getExampleMediaPath();
|
|
||||||
|
|
||||||
auto mesh_file = device->getFileSystem()->createAndOpenFile(mediaPath + "coolguy_opt.x");
|
|
||||||
check(mesh_file, "mesh file loading");
|
|
||||||
scene::IAnimatedMesh *mesh = smgr->getMesh(mesh_file);
|
|
||||||
check(mesh, "mesh loading");
|
|
||||||
if (mesh_file)
|
|
||||||
mesh_file->drop();
|
|
||||||
if (mesh) {
|
|
||||||
video::ITexture *tex = driver->getTexture(mediaPath + "cooltexture.png");
|
|
||||||
check(tex, "texture loading");
|
|
||||||
scene::IAnimatedMeshSceneNode *node = smgr->addAnimatedMeshSceneNode(mesh);
|
|
||||||
if (node) {
|
|
||||||
node->forEachMaterial([tex](video::SMaterial &mat) {
|
|
||||||
mat.Lighting = false;
|
|
||||||
mat.setTexture(0, tex);
|
|
||||||
});
|
|
||||||
node->setFrameLoop(0, 29);
|
|
||||||
node->setAnimationSpeed(30);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
smgr->addCameraSceneNode(0, core::vector3df(0, 4, 5), core::vector3df(0, 2, 0));
|
|
||||||
|
|
||||||
s32 n = 0;
|
|
||||||
SEvent event;
|
|
||||||
device->getTimer()->start();
|
|
||||||
|
|
||||||
while (device->run()) {
|
|
||||||
if (device->getTimer()->getTime() >= 1000) {
|
|
||||||
device->getTimer()->setTime(0);
|
|
||||||
++n;
|
|
||||||
if (n == 1) { // Tooltip display
|
|
||||||
bzero(&event, sizeof(SEvent));
|
|
||||||
event.EventType = irr::EET_MOUSE_INPUT_EVENT;
|
|
||||||
event.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
|
|
||||||
event.MouseInput.X = button->getAbsolutePosition().getCenter().X;
|
|
||||||
event.MouseInput.Y = button->getAbsolutePosition().getCenter().Y;
|
|
||||||
device->postEventFromUser(event);
|
|
||||||
} else if (n == 2) // Text input focus
|
|
||||||
guienv->setFocus(editbox);
|
|
||||||
else if (n == 3) { // Keypress for Text input
|
|
||||||
bzero(&event, sizeof(SEvent));
|
|
||||||
event.EventType = irr::EET_KEY_INPUT_EVENT;
|
|
||||||
event.KeyInput.Char = L'a';
|
|
||||||
event.KeyInput.Key = KEY_KEY_A;
|
|
||||||
event.KeyInput.PressedDown = true;
|
|
||||||
device->postEventFromUser(event);
|
|
||||||
event.KeyInput.PressedDown = false;
|
|
||||||
device->postEventFromUser(event);
|
|
||||||
} else
|
|
||||||
device->closeDevice();
|
|
||||||
}
|
|
||||||
|
|
||||||
driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH,
|
|
||||||
video::SColor(255, 100, 100, 150));
|
|
||||||
smgr->drawAll();
|
|
||||||
guienv->drawAll();
|
|
||||||
driver->endScene();
|
|
||||||
}
|
|
||||||
|
|
||||||
check(core::stringw(L"a") == editbox->getText(), "EditBox text");
|
|
||||||
|
|
||||||
device->getLogger()->log("Done.", ELL_INFORMATION);
|
|
||||||
device->drop();
|
|
||||||
return test_fail > 0 ? 1 : 0;
|
|
||||||
}
|
|
@ -1,138 +0,0 @@
|
|||||||
#include <irrArray.h>
|
|
||||||
#include "test_helper.h"
|
|
||||||
|
|
||||||
using namespace irr;
|
|
||||||
using core::array;
|
|
||||||
|
|
||||||
static void test_basics()
|
|
||||||
{
|
|
||||||
array<int> v;
|
|
||||||
v.push_back(1); // 1
|
|
||||||
v.push_front(2); // 2, 1
|
|
||||||
v.insert(4, 0); // 4, 2, 1
|
|
||||||
v.insert(3, 1); // 4, 3, 2, 1
|
|
||||||
v.insert(0, 4); // 4, 3, 2, 1, 0
|
|
||||||
UASSERTEQ(v.size(), 5);
|
|
||||||
UASSERTEQ(v[0], 4);
|
|
||||||
UASSERTEQ(v[1], 3);
|
|
||||||
UASSERTEQ(v[2], 2);
|
|
||||||
UASSERTEQ(v[3], 1);
|
|
||||||
UASSERTEQ(v[4], 0);
|
|
||||||
array<int> w = v;
|
|
||||||
UASSERTEQ(w.size(), 5);
|
|
||||||
UASSERT(w == v);
|
|
||||||
w.clear();
|
|
||||||
UASSERTEQ(w.size(), 0);
|
|
||||||
UASSERTEQ(w.allocated_size(), 0);
|
|
||||||
UASSERT(w.empty());
|
|
||||||
w = v;
|
|
||||||
UASSERTEQ(w.size(), 5);
|
|
||||||
w.set_used(3);
|
|
||||||
UASSERTEQ(w.size(), 3);
|
|
||||||
UASSERTEQ(w[0], 4);
|
|
||||||
UASSERTEQ(w[1], 3);
|
|
||||||
UASSERTEQ(w[2], 2);
|
|
||||||
UASSERTEQ(w.getLast(), 2);
|
|
||||||
w.set_used(20);
|
|
||||||
UASSERTEQ(w.size(), 20);
|
|
||||||
w = v;
|
|
||||||
w.sort();
|
|
||||||
UASSERTEQ(w.size(), 5);
|
|
||||||
UASSERTEQ(w[0], 0);
|
|
||||||
UASSERTEQ(w[1], 1);
|
|
||||||
UASSERTEQ(w[2], 2);
|
|
||||||
UASSERTEQ(w[3], 3);
|
|
||||||
UASSERTEQ(w[4], 4);
|
|
||||||
w.erase(0);
|
|
||||||
UASSERTEQ(w.size(), 4);
|
|
||||||
UASSERTEQ(w[0], 1);
|
|
||||||
UASSERTEQ(w[1], 2);
|
|
||||||
UASSERTEQ(w[2], 3);
|
|
||||||
UASSERTEQ(w[3], 4);
|
|
||||||
w.erase(1, 2);
|
|
||||||
UASSERTEQ(w.size(), 2);
|
|
||||||
UASSERTEQ(w[0], 1);
|
|
||||||
UASSERTEQ(w[1], 4);
|
|
||||||
w.swap(v);
|
|
||||||
UASSERTEQ(w.size(), 5);
|
|
||||||
UASSERTEQ(v.size(), 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test_linear_searches()
|
|
||||||
{
|
|
||||||
// Populate the array with 0, 1, 2, ..., 100, 100, 99, 98, 97, ..., 0
|
|
||||||
array<int> arr;
|
|
||||||
for (int i = 0; i <= 100; i++)
|
|
||||||
arr.push_back(i);
|
|
||||||
for (int i = 100; i >= 0; i--)
|
|
||||||
arr.push_back(i);
|
|
||||||
s32 end = arr.size() - 1;
|
|
||||||
for (int i = 0; i <= 100; i++) {
|
|
||||||
s32 index = arr.linear_reverse_search(i);
|
|
||||||
UASSERTEQ(index, end - i);
|
|
||||||
}
|
|
||||||
for (int i = 0; i <= 100; i++) {
|
|
||||||
s32 index = arr.linear_search(i);
|
|
||||||
UASSERTEQ(index, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test_binary_searches()
|
|
||||||
{
|
|
||||||
const auto &values = {3, 5, 1, 2, 5, 10, 19, 9, 7, 1, 2, 5, 8, 15};
|
|
||||||
array<int> arr;
|
|
||||||
for (int value : values) {
|
|
||||||
arr.push_back(value);
|
|
||||||
}
|
|
||||||
// Test the const form first, it uses a linear search without sorting
|
|
||||||
const array<int> &carr = arr;
|
|
||||||
UASSERTEQ(carr.binary_search(20), -1);
|
|
||||||
UASSERTEQ(carr.binary_search(0), -1);
|
|
||||||
UASSERTEQ(carr.binary_search(1), 2);
|
|
||||||
|
|
||||||
// Sorted: 1, 1, 2, 2, 3, 5, 5, 5, 7, 8, 9, 10, 15, 19
|
|
||||||
UASSERTEQ(arr.binary_search(20), -1);
|
|
||||||
UASSERTEQ(arr.binary_search(0), -1);
|
|
||||||
|
|
||||||
for (int value : values) {
|
|
||||||
s32 i = arr.binary_search(value);
|
|
||||||
UASSERTNE(i, -1);
|
|
||||||
UASSERTEQ(arr[i], value);
|
|
||||||
}
|
|
||||||
|
|
||||||
s32 first, last;
|
|
||||||
first = arr.binary_search_multi(1, last);
|
|
||||||
UASSERTEQ(first, 0);
|
|
||||||
UASSERTEQ(last, 1);
|
|
||||||
|
|
||||||
first = arr.binary_search_multi(2, last);
|
|
||||||
UASSERTEQ(first, 2);
|
|
||||||
UASSERTEQ(last, 3);
|
|
||||||
|
|
||||||
first = arr.binary_search_multi(3, last);
|
|
||||||
UASSERTEQ(first, 4);
|
|
||||||
UASSERTEQ(last, 4);
|
|
||||||
|
|
||||||
first = arr.binary_search_multi(4, last);
|
|
||||||
UASSERTEQ(first, -1);
|
|
||||||
|
|
||||||
first = arr.binary_search_multi(5, last);
|
|
||||||
UASSERTEQ(first, 5);
|
|
||||||
UASSERTEQ(last, 7);
|
|
||||||
|
|
||||||
first = arr.binary_search_multi(7, last);
|
|
||||||
UASSERTEQ(first, 8);
|
|
||||||
UASSERTEQ(last, 8);
|
|
||||||
|
|
||||||
first = arr.binary_search_multi(19, last);
|
|
||||||
UASSERTEQ(first, 13);
|
|
||||||
UASSERTEQ(last, 13);
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_irr_array()
|
|
||||||
{
|
|
||||||
test_basics();
|
|
||||||
test_linear_searches();
|
|
||||||
test_binary_searches();
|
|
||||||
std::cout << " test_irr_array PASSED" << std::endl;
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <exception>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
class TestFailedException : public std::exception
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
// Asserts the comparison specified by CMP is true, or fails the current unit test
|
|
||||||
#define UASSERTCMP(CMP, actual, expected) \
|
|
||||||
do { \
|
|
||||||
const auto &a = (actual); \
|
|
||||||
const auto &e = (expected); \
|
|
||||||
if (!CMP(a, e)) { \
|
|
||||||
std::cout \
|
|
||||||
<< "Test assertion failed: " << #actual << " " << #CMP << " " \
|
|
||||||
<< #expected << std::endl \
|
|
||||||
<< " at " << __FILE__ << ":" << __LINE__ << std::endl \
|
|
||||||
<< " actual: " << a << std::endl \
|
|
||||||
<< " expected: " \
|
|
||||||
<< e << std::endl; \
|
|
||||||
throw TestFailedException(); \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define CMPEQ(a, e) (a == e)
|
|
||||||
#define CMPTRUE(a, e) (a)
|
|
||||||
#define CMPNE(a, e) (a != e)
|
|
||||||
|
|
||||||
#define UASSERTEQ(actual, expected) UASSERTCMP(CMPEQ, actual, expected)
|
|
||||||
#define UASSERTNE(actual, nexpected) UASSERTCMP(CMPNE, actual, nexpected)
|
|
||||||
#define UASSERT(actual) UASSERTCMP(CMPTRUE, actual, true)
|
|
@ -1,205 +0,0 @@
|
|||||||
#include <irrString.h>
|
|
||||||
#include <cstring>
|
|
||||||
#include <clocale>
|
|
||||||
#include <vector>
|
|
||||||
#include "test_helper.h"
|
|
||||||
|
|
||||||
using namespace irr;
|
|
||||||
using namespace irr::core;
|
|
||||||
|
|
||||||
#define CMPSTR(a, b) (!strcmp(a, b))
|
|
||||||
#define UASSERTSTR(actual, expected) UASSERTCMP(CMPSTR, actual.c_str(), expected)
|
|
||||||
|
|
||||||
static void test_basics()
|
|
||||||
{
|
|
||||||
// ctor
|
|
||||||
stringc s;
|
|
||||||
UASSERTEQ(s.c_str()[0], '\0');
|
|
||||||
s = stringc(0.1234567);
|
|
||||||
UASSERTSTR(s, "0.123457");
|
|
||||||
s = stringc(0x1p+53);
|
|
||||||
UASSERTSTR(s, "9007199254740992.000000");
|
|
||||||
s = stringc(static_cast<int>(-102400));
|
|
||||||
UASSERTSTR(s, "-102400");
|
|
||||||
s = stringc(static_cast<unsigned int>(102400));
|
|
||||||
UASSERTSTR(s, "102400");
|
|
||||||
s = stringc(static_cast<long>(-1024000));
|
|
||||||
UASSERTSTR(s, "-1024000");
|
|
||||||
s = stringc(static_cast<unsigned long>(1024000));
|
|
||||||
UASSERTSTR(s, "1024000");
|
|
||||||
s = stringc("YESno", 3);
|
|
||||||
UASSERTSTR(s, "YES");
|
|
||||||
s = stringc(L"test", 4);
|
|
||||||
UASSERTSTR(s, "test");
|
|
||||||
s = stringc("Hello World!");
|
|
||||||
UASSERTSTR(s, "Hello World!");
|
|
||||||
// operator=
|
|
||||||
s = stringw(L"abcdef");
|
|
||||||
UASSERTSTR(s, "abcdef");
|
|
||||||
s = L"abcdef";
|
|
||||||
UASSERTSTR(s, "abcdef");
|
|
||||||
s = static_cast<const char *>(nullptr);
|
|
||||||
UASSERTSTR(s, "");
|
|
||||||
// operator+
|
|
||||||
s = s + stringc("foo");
|
|
||||||
UASSERTSTR(s, "foo");
|
|
||||||
s = s + L"bar";
|
|
||||||
UASSERTSTR(s, "foobar");
|
|
||||||
// the rest
|
|
||||||
s = "f";
|
|
||||||
UASSERTEQ(s[0], 'f');
|
|
||||||
const auto &sref = s;
|
|
||||||
UASSERTEQ(sref[0], 'f');
|
|
||||||
UASSERT(sref == "f");
|
|
||||||
UASSERT(sref == stringc("f"));
|
|
||||||
s = "a";
|
|
||||||
UASSERT(sref < stringc("aa"));
|
|
||||||
UASSERT(sref < stringc("b"));
|
|
||||||
UASSERT(stringc("Z") < sref);
|
|
||||||
UASSERT(!(sref < stringc("a")));
|
|
||||||
UASSERT(sref.lower_ignore_case("AA"));
|
|
||||||
UASSERT(sref.lower_ignore_case("B"));
|
|
||||||
UASSERT(!sref.lower_ignore_case("A"));
|
|
||||||
s = "dog";
|
|
||||||
UASSERT(sref != "cat");
|
|
||||||
UASSERT(sref != stringc("cat"));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test_methods()
|
|
||||||
{
|
|
||||||
stringc s;
|
|
||||||
const auto &sref = s;
|
|
||||||
s = "irrlicht";
|
|
||||||
UASSERTEQ(sref.size(), 8);
|
|
||||||
UASSERT(!sref.empty());
|
|
||||||
s.clear();
|
|
||||||
UASSERTEQ(sref.size(), 0);
|
|
||||||
UASSERT(sref.empty());
|
|
||||||
UASSERT(sref[0] == 0);
|
|
||||||
s = "\tAz#`";
|
|
||||||
s.make_lower();
|
|
||||||
UASSERTSTR(s, "\taz#`");
|
|
||||||
s.make_upper();
|
|
||||||
UASSERTSTR(s, "\tAZ#`");
|
|
||||||
UASSERT(sref.equals_ignore_case("\taz#`"));
|
|
||||||
UASSERT(sref.equals_substring_ignore_case("Z#`", 2));
|
|
||||||
s = "irrlicht";
|
|
||||||
UASSERT(sref.equalsn(stringc("irr"), 3));
|
|
||||||
UASSERT(sref.equalsn("irr", 3));
|
|
||||||
s = "fo";
|
|
||||||
s.append('o');
|
|
||||||
UASSERTSTR(s, "foo");
|
|
||||||
s.append("bar", 1);
|
|
||||||
UASSERTSTR(s, "foob");
|
|
||||||
s.append("ar", 999999);
|
|
||||||
UASSERTSTR(s, "foobar");
|
|
||||||
s = "nyan";
|
|
||||||
s.append(stringc("cat"));
|
|
||||||
UASSERTSTR(s, "nyancat");
|
|
||||||
s.append(stringc("sam"), 1);
|
|
||||||
UASSERTSTR(s, "nyancats");
|
|
||||||
s = "fbar";
|
|
||||||
s.insert(1, "ooXX", 2);
|
|
||||||
UASSERTSTR(s, "foobar");
|
|
||||||
UASSERTEQ(sref.findFirst('o'), 1);
|
|
||||||
UASSERTEQ(sref.findFirst('X'), -1);
|
|
||||||
UASSERTEQ(sref.findFirstChar("abff", 2), 3);
|
|
||||||
UASSERTEQ(sref.findFirstCharNotInList("fobb", 2), 3);
|
|
||||||
UASSERTEQ(sref.findLast('o'), 2);
|
|
||||||
UASSERTEQ(sref.findLast('X'), -1);
|
|
||||||
UASSERTEQ(sref.findLastChar("abrr", 2), 4);
|
|
||||||
UASSERTEQ(sref.findLastCharNotInList("rabb", 2), 3);
|
|
||||||
UASSERTEQ(sref.findNext('o', 2), 2);
|
|
||||||
UASSERTEQ(sref.findLast('o', 1), 1);
|
|
||||||
s = "ob-oob";
|
|
||||||
UASSERTEQ(sref.find("ob", 1), 4);
|
|
||||||
UASSERTEQ(sref.find("ob"), 0);
|
|
||||||
UASSERTEQ(sref.find("?"), -1);
|
|
||||||
s = "HOMEOWNER";
|
|
||||||
stringc s2 = sref.subString(2, 4);
|
|
||||||
UASSERTSTR(s2, "MEOW");
|
|
||||||
s2 = sref.subString(2, 4, true);
|
|
||||||
UASSERTSTR(s2, "meow");
|
|
||||||
s = "land";
|
|
||||||
s.replace('l', 's');
|
|
||||||
UASSERTSTR(s, "sand");
|
|
||||||
s = ">dog<";
|
|
||||||
s.replace("dog", "cat");
|
|
||||||
UASSERTSTR(s, ">cat<");
|
|
||||||
s.replace("cat", "horse");
|
|
||||||
UASSERTSTR(s, ">horse<");
|
|
||||||
s.replace("horse", "gnu");
|
|
||||||
UASSERTSTR(s, ">gnu<");
|
|
||||||
s = " h e l p ";
|
|
||||||
s.remove(' ');
|
|
||||||
UASSERTSTR(s, "help");
|
|
||||||
s.remove("el");
|
|
||||||
UASSERTSTR(s, "hp");
|
|
||||||
s = "irrlicht";
|
|
||||||
s.removeChars("it");
|
|
||||||
UASSERTSTR(s, "rrlch");
|
|
||||||
s = "\r\nfoo bar ";
|
|
||||||
s.trim();
|
|
||||||
UASSERTSTR(s, "foo bar");
|
|
||||||
s = "foxo";
|
|
||||||
s.erase(2);
|
|
||||||
UASSERTSTR(s, "foo");
|
|
||||||
s = "a";
|
|
||||||
s.append('\0');
|
|
||||||
s.append('b');
|
|
||||||
UASSERTEQ(s.size(), 3);
|
|
||||||
s.validate();
|
|
||||||
UASSERTEQ(s.size(), 1);
|
|
||||||
UASSERTEQ(s.lastChar(), 'a');
|
|
||||||
std::vector<stringc> res;
|
|
||||||
s = "a,,b,c";
|
|
||||||
s.split(res, ",aa", 1, true, false);
|
|
||||||
UASSERTEQ(res.size(), 3);
|
|
||||||
UASSERTSTR(res[0], "a");
|
|
||||||
UASSERTSTR(res[2], "c");
|
|
||||||
res.clear();
|
|
||||||
s.split(res, ",", 1, false, true);
|
|
||||||
UASSERTEQ(res.size(), 7);
|
|
||||||
UASSERTSTR(res[0], "a");
|
|
||||||
UASSERTSTR(res[2], "");
|
|
||||||
for (int i = 0; i < 3; i++)
|
|
||||||
UASSERTSTR(res[2 * i + 1], ",");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test_conv()
|
|
||||||
{
|
|
||||||
// locale-independent
|
|
||||||
|
|
||||||
stringw out;
|
|
||||||
utf8ToWString(out, "†††");
|
|
||||||
UASSERTEQ(out.size(), 3);
|
|
||||||
for (int i = 0; i < 3; i++)
|
|
||||||
UASSERTEQ(static_cast<u16>(out[i]), 0x2020);
|
|
||||||
|
|
||||||
stringc out2;
|
|
||||||
wStringToUTF8(out2, L"†††");
|
|
||||||
UASSERTEQ(out2.size(), 9);
|
|
||||||
for (int i = 0; i < 3; i++) {
|
|
||||||
UASSERTEQ(static_cast<u8>(out2[3 * i]), 0xe2);
|
|
||||||
UASSERTEQ(static_cast<u8>(out2[3 * i + 1]), 0x80);
|
|
||||||
UASSERTEQ(static_cast<u8>(out2[3 * i + 2]), 0xa0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// locale-dependent
|
|
||||||
if (!setlocale(LC_CTYPE, "C.UTF-8"))
|
|
||||||
setlocale(LC_CTYPE, "UTF-8"); // macOS
|
|
||||||
|
|
||||||
stringw out3;
|
|
||||||
multibyteToWString(out3, "†††");
|
|
||||||
UASSERTEQ(out3.size(), 3);
|
|
||||||
for (int i = 0; i < 3; i++)
|
|
||||||
UASSERTEQ(static_cast<u16>(out3[i]), 0x2020);
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_irr_string()
|
|
||||||
{
|
|
||||||
test_basics();
|
|
||||||
test_methods();
|
|
||||||
test_conv();
|
|
||||||
std::cout << " test_irr_string PASSED" << std::endl;
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
set(IRREXAMPLES
|
|
||||||
# removed
|
|
||||||
)
|
|
||||||
if(UNIX)
|
|
||||||
list(APPEND IRREXAMPLES AutomatedTest)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
foreach(exname IN ITEMS ${IRREXAMPLES})
|
|
||||||
file(GLOB sources "${CMAKE_CURRENT_SOURCE_DIR}/${exname}/*.cpp")
|
|
||||||
add_executable(${exname} ${sources})
|
|
||||||
|
|
||||||
target_include_directories(${exname} PRIVATE
|
|
||||||
${CMAKE_SOURCE_DIR}/include
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/${exname}
|
|
||||||
)
|
|
||||||
target_link_libraries(${exname} IrrlichtMt)
|
|
||||||
endforeach()
|
|
Before Width: | Height: | Size: 4.7 KiB |
@ -1,123 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
# NOTE: this code is mostly copied from minetest_android_deps
|
|
||||||
# <https://github.com/minetest/minetest_android_deps>
|
|
||||||
|
|
||||||
png_ver=1.6.40
|
|
||||||
jpeg_ver=3.0.1
|
|
||||||
|
|
||||||
download () {
|
|
||||||
get_tar_archive libpng "https://download.sourceforge.net/libpng/libpng-${png_ver}.tar.gz"
|
|
||||||
get_tar_archive libjpeg "https://download.sourceforge.net/libjpeg-turbo/libjpeg-turbo-${jpeg_ver}.tar.gz"
|
|
||||||
}
|
|
||||||
|
|
||||||
build () {
|
|
||||||
# Build libjpg and libpng first because Irrlicht needs them
|
|
||||||
mkdir -p libpng
|
|
||||||
pushd libpng
|
|
||||||
$srcdir/libpng/configure --host=$CROSS_PREFIX
|
|
||||||
make && make DESTDIR=$PWD install
|
|
||||||
popd
|
|
||||||
|
|
||||||
mkdir -p libjpeg
|
|
||||||
pushd libjpeg
|
|
||||||
cmake $srcdir/libjpeg "${CMAKE_FLAGS[@]}" -DENABLE_SHARED=OFF
|
|
||||||
make && make DESTDIR=$PWD install
|
|
||||||
popd
|
|
||||||
|
|
||||||
local libpng=$PWD/libpng/usr/local/lib/libpng.a
|
|
||||||
local libjpeg=$(echo $PWD/libjpeg/opt/libjpeg-turbo/lib*/libjpeg.a)
|
|
||||||
cmake $srcdir/irrlicht "${CMAKE_FLAGS[@]}" \
|
|
||||||
-DBUILD_SHARED_LIBS=OFF \
|
|
||||||
-DPNG_LIBRARY=$libpng \
|
|
||||||
-DPNG_PNG_INCLUDE_DIR=$(dirname "$libpng")/../include \
|
|
||||||
-DJPEG_LIBRARY=$libjpeg \
|
|
||||||
-DJPEG_INCLUDE_DIR=$(dirname "$libjpeg")/../include
|
|
||||||
make
|
|
||||||
|
|
||||||
cp -p lib/Android/libIrrlichtMt.a $libpng $libjpeg $pkgdir/
|
|
||||||
cp -a $srcdir/irrlicht/include $pkgdir/include
|
|
||||||
cp -a $srcdir/irrlicht/media/Shaders $pkgdir/Shaders
|
|
||||||
}
|
|
||||||
|
|
||||||
get_tar_archive () {
|
|
||||||
# $1: folder to extract to, $2: URL
|
|
||||||
local filename="${2##*/}"
|
|
||||||
[ -d "$1" ] && return 0
|
|
||||||
wget -c "$2" -O "$filename"
|
|
||||||
mkdir -p "$1"
|
|
||||||
tar -xaf "$filename" -C "$1" --strip-components=1
|
|
||||||
rm "$filename"
|
|
||||||
}
|
|
||||||
|
|
||||||
_setup_toolchain () {
|
|
||||||
local toolchain=$(echo "$ANDROID_NDK"/toolchains/llvm/prebuilt/*)
|
|
||||||
if [ ! -d "$toolchain" ]; then
|
|
||||||
echo "Android NDK path not specified or incorrect"; return 1
|
|
||||||
fi
|
|
||||||
export PATH="$toolchain/bin:$ANDROID_NDK:$PATH"
|
|
||||||
|
|
||||||
unset CFLAGS CPPFLAGS CXXFLAGS
|
|
||||||
|
|
||||||
TARGET_ABI="$1"
|
|
||||||
API=21
|
|
||||||
if [ "$TARGET_ABI" == armeabi-v7a ]; then
|
|
||||||
CROSS_PREFIX=armv7a-linux-androideabi
|
|
||||||
CFLAGS="-mthumb"
|
|
||||||
CXXFLAGS="-mthumb"
|
|
||||||
elif [ "$TARGET_ABI" == arm64-v8a ]; then
|
|
||||||
CROSS_PREFIX=aarch64-linux-android
|
|
||||||
elif [ "$TARGET_ABI" == x86 ]; then
|
|
||||||
CROSS_PREFIX=i686-linux-android
|
|
||||||
CFLAGS="-mssse3 -mfpmath=sse"
|
|
||||||
CXXFLAGS="-mssse3 -mfpmath=sse"
|
|
||||||
elif [ "$TARGET_ABI" == x86_64 ]; then
|
|
||||||
CROSS_PREFIX=x86_64-linux-android
|
|
||||||
else
|
|
||||||
echo "Invalid ABI given"; return 1
|
|
||||||
fi
|
|
||||||
export CC=$CROSS_PREFIX$API-clang
|
|
||||||
export CXX=$CROSS_PREFIX$API-clang++
|
|
||||||
export AR=llvm-ar
|
|
||||||
export RANLIB=llvm-ranlib
|
|
||||||
export CFLAGS="-fPIC ${CFLAGS}"
|
|
||||||
export CXXFLAGS="-fPIC ${CXXFLAGS}"
|
|
||||||
|
|
||||||
CMAKE_FLAGS=(
|
|
||||||
"-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake"
|
|
||||||
"-DANDROID_ABI=$TARGET_ABI" "-DANDROID_NATIVE_API_LEVEL=$API"
|
|
||||||
"-DCMAKE_BUILD_TYPE=Release"
|
|
||||||
)
|
|
||||||
|
|
||||||
# make sure pkg-config doesn't interfere
|
|
||||||
export PKG_CONFIG=/bin/false
|
|
||||||
|
|
||||||
export MAKEFLAGS="-j$(nproc)"
|
|
||||||
}
|
|
||||||
|
|
||||||
_run_build () {
|
|
||||||
local abi=$1
|
|
||||||
irrdir=$PWD
|
|
||||||
|
|
||||||
mkdir -p $RUNNER_TEMP/src
|
|
||||||
cd $RUNNER_TEMP/src
|
|
||||||
srcdir=$PWD
|
|
||||||
[ -d irrlicht ] || ln -s $irrdir irrlicht
|
|
||||||
download
|
|
||||||
|
|
||||||
builddir=$RUNNER_TEMP/build/irrlicht-$abi
|
|
||||||
pkgdir=$RUNNER_TEMP/pkg/$abi/Irrlicht
|
|
||||||
rm -rf "$pkgdir"
|
|
||||||
mkdir -p "$builddir" "$pkgdir"
|
|
||||||
|
|
||||||
cd "$builddir"
|
|
||||||
build
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ $# -lt 1 ]; then
|
|
||||||
echo "Usage: ci-build-android.sh <ABI>"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
_setup_toolchain $1
|
|
||||||
_run_build $1
|
|
@ -1,70 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
topdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
||||||
|
|
||||||
[[ -z "$CC" || -z "$CXX" ]] && exit 255
|
|
||||||
variant=win32
|
|
||||||
[[ "$(basename "$CXX")" == "x86_64-"* ]] && variant=win64
|
|
||||||
with_sdl=0
|
|
||||||
[[ "$extras" == *"-sdl"* ]] && with_sdl=1
|
|
||||||
#with_gl3=0
|
|
||||||
#[[ "$extras" == *"-gl3"* ]] && with_gl3=1
|
|
||||||
|
|
||||||
libjpeg_version=3.0.1
|
|
||||||
libpng_version=1.6.40
|
|
||||||
sdl2_version=2.28.5
|
|
||||||
zlib_version=1.3.1
|
|
||||||
|
|
||||||
download () {
|
|
||||||
local url=$1
|
|
||||||
local filename=${url##*/}
|
|
||||||
local foldername=${filename%%[.-]*}
|
|
||||||
|
|
||||||
[ -d "./$foldername" ] && return 0
|
|
||||||
[ -e "$filename" ] || wget "$url" -O "$filename"
|
|
||||||
sha256sum -w -c <(grep -F "$filename" "$topdir/sha256sums.txt")
|
|
||||||
unzip -o "$filename" -d "$foldername"
|
|
||||||
}
|
|
||||||
|
|
||||||
libs=$PWD/libs
|
|
||||||
mkdir -p libs
|
|
||||||
pushd libs
|
|
||||||
libhost="http://minetest.kitsunemimi.pw"
|
|
||||||
download "$libhost/llvm/libjpeg-$libjpeg_version-$variant.zip"
|
|
||||||
download "$libhost/llvm/libpng-$libpng_version-$variant.zip"
|
|
||||||
[ $with_sdl -eq 1 ] && download "$libhost/llvm/sdl2-$sdl2_version-$variant.zip"
|
|
||||||
download "$libhost/llvm/zlib-$zlib_version-$variant.zip"
|
|
||||||
popd
|
|
||||||
|
|
||||||
tmp=(
|
|
||||||
-DCMAKE_SYSTEM_NAME=Windows \
|
|
||||||
-DPNG_LIBRARY=$libs/libpng/lib/libpng.dll.a \
|
|
||||||
-DPNG_PNG_INCLUDE_DIR=$libs/libpng/include \
|
|
||||||
-DJPEG_LIBRARY=$libs/libjpeg/lib/libjpeg.dll.a \
|
|
||||||
-DJPEG_INCLUDE_DIR=$libs/libjpeg/include \
|
|
||||||
-DZLIB_LIBRARY=$libs/zlib/lib/libz.dll.a \
|
|
||||||
-DZLIB_INCLUDE_DIR=$libs/zlib/include
|
|
||||||
)
|
|
||||||
if [ $with_sdl -eq 1 ]; then
|
|
||||||
tmp+=(
|
|
||||||
-DUSE_SDL2=ON
|
|
||||||
-DCMAKE_PREFIX_PATH=$libs/sdl2/lib/cmake
|
|
||||||
)
|
|
||||||
else
|
|
||||||
tmp+=(-DUSE_SDL2=OFF)
|
|
||||||
fi
|
|
||||||
#[ $with_gl3 -eq 1 ] && tmp+=(-DENABLE_OPENGL=OFF -DENABLE_OPENGL3=ON)
|
|
||||||
|
|
||||||
cmake . "${tmp[@]}"
|
|
||||||
make -j$(nproc)
|
|
||||||
|
|
||||||
if [ "$1" = "package" ]; then
|
|
||||||
make DESTDIR=$PWD/_install install
|
|
||||||
# strip library
|
|
||||||
"${CXX%-*}-strip" --strip-unneeded _install/usr/local/lib/*.dll
|
|
||||||
# bundle the DLLs that are specific to Irrlicht (kind of a hack)
|
|
||||||
shopt -s nullglob
|
|
||||||
cp -p $libs/*/bin/{libjpeg,libpng,SDL}*.dll _install/usr/local/lib/
|
|
||||||
# create a ZIP
|
|
||||||
(cd _install/usr/local; zip -9r "$OLDPWD/irrlicht-$variant$extras.zip" -- *)
|
|
||||||
fi
|
|
||||||
exit 0
|
|
@ -1,9 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
topdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
||||||
|
|
||||||
name=llvm-mingw-20231128-ucrt-ubuntu-20.04-x86_64.tar.xz
|
|
||||||
wget "https://github.com/mstorsjo/llvm-mingw/releases/download/20231128/$name" -O "$name"
|
|
||||||
sha256sum -w -c <(grep -F "$name" "$topdir/sha256sums.txt")
|
|
||||||
sudo tar -xaf "$name" -C /usr --strip-components=1
|
|
||||||
rm -f "$name"
|
|
@ -1,9 +0,0 @@
|
|||||||
0f21ff3be90311092fe32e0e30878ef3ae9d9437b8d9ac25ef279e0d84e9bb8e llvm-mingw-20231128-ucrt-ubuntu-20.04-x86_64.tar.xz
|
|
||||||
53dfd31285f470fcf0dca88217c5cf9c557729af6d103afae5936e72ddc38d3c libjpeg-3.0.1-win32.zip
|
|
||||||
3d44e0740914e6878300e30653aad39e974821b5d7f6c2567e246b4eb04a5324 libjpeg-3.0.1-win64.zip
|
|
||||||
6baf4e819bfb3573760524b5dc9a04b5e479090d6d2046b86cf39a3107c0071f libpng-1.6.40-win32.zip
|
|
||||||
c02e029f01fce44baea7f4aecfd2564bd8a03507c0c6af8b03339ae0452c8b7d libpng-1.6.40-win64.zip
|
|
||||||
f9f890af960e92fd3f532f2e9ac00681c33bc67a722e000dfdaeb41b0064f1a0 sdl2-2.28.5-win32.zip
|
|
||||||
8dde2c6963544b7d8a2e87c128ebbdf51ad0e70c7e2df986ff4e963ce9996d9b sdl2-2.28.5-win64.zip
|
|
||||||
8af10515d57dbfee5d2106cd66cafa2adeb4270d4c6047ccbf7e8b5d2d50681c zlib-1.3.1-win32.zip
|
|
||||||
ad43f5d23052590c65633530743e5d622cc76b33c109072e6fd7b487aff56bca zlib-1.3.1-win64.zip
|
|
@ -1,32 +0,0 @@
|
|||||||
link_libraries(IrrlichtMt::IrrlichtMt)
|
|
||||||
add_executable(image_loader_test image_loader_test.cpp)
|
|
||||||
|
|
||||||
function(test_image_loader format expected input)
|
|
||||||
string(TOLOWER ${format} suffix)
|
|
||||||
add_test(NAME ImageLoader${format}-${input} COMMAND image_loader_test ${expected} data/sample_${input}.${suffix} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
test_image_loader(BMP 16color-16bpp 4bpp_v3)
|
|
||||||
# test_image_loader(BMP 16color-16bpp 4bpp_v7)
|
|
||||||
# test_image_loader(BMP 16color-16bpp 4bpp_v3_rle)
|
|
||||||
# test_image_loader(BMP 16color-16bpp 4bpp_v7_rle)
|
|
||||||
test_image_loader(BMP 30color-16bpp 8bpp_v3)
|
|
||||||
# test_image_loader(BMP 30color-16bpp 8bpp_v7)
|
|
||||||
test_image_loader(BMP 30color-16bpp 8bpp_v3_rle)
|
|
||||||
# test_image_loader(BMP 30color-16bpp 8bpp_v7_rle)
|
|
||||||
# test_image_loader(BMP 30color-16bpp 16bpp_v3)
|
|
||||||
# test_image_loader(BMP 30color-16bpp 16bpp_v7)
|
|
||||||
test_image_loader(BMP 30color-24bpp 24bpp_v3)
|
|
||||||
test_image_loader(BMP 30color-24bpp 24bpp_v7)
|
|
||||||
|
|
||||||
test_image_loader(PNG 30color-24bpp 8bpp)
|
|
||||||
test_image_loader(PNG 30color-24bpp 24bpp)
|
|
||||||
|
|
||||||
test_image_loader(TGA 30color-32bpp 8bpp_up)
|
|
||||||
test_image_loader(TGA 30color-32bpp 8bpp_down)
|
|
||||||
# test_image_loader(TGA 30color-16bpp 8bpp_rle_up)
|
|
||||||
# test_image_loader(TGA 30color-16bpp 8bpp_rle_down)
|
|
||||||
test_image_loader(TGA 30color-24bpp 24bpp_up)
|
|
||||||
test_image_loader(TGA 30color-24bpp 24bpp_down)
|
|
||||||
test_image_loader(TGA 30color-24bpp 24bpp_rle_up)
|
|
||||||
test_image_loader(TGA 30color-24bpp 24bpp_rle_down)
|
|
Before Width: | Height: | Size: 654 B |
Before Width: | Height: | Size: 738 B |
Before Width: | Height: | Size: 580 B |
Before Width: | Height: | Size: 899 B |
Before Width: | Height: | Size: 899 B |
Before Width: | Height: | Size: 954 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 298 B |
Before Width: | Height: | Size: 346 B |
Before Width: | Height: | Size: 474 B |
Before Width: | Height: | Size: 524 B |
Before Width: | Height: | Size: 558 B |
Before Width: | Height: | Size: 608 B |
@ -1,162 +0,0 @@
|
|||||||
#include <cstdio>
|
|
||||||
#include <initializer_list>
|
|
||||||
#include <stdexcept>
|
|
||||||
#include <vector>
|
|
||||||
#include <irrlicht.h>
|
|
||||||
|
|
||||||
using namespace irr;
|
|
||||||
|
|
||||||
struct ImageDesc
|
|
||||||
{
|
|
||||||
const char *name;
|
|
||||||
video::ECOLOR_FORMAT format;
|
|
||||||
std::vector<u8> data;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
std::vector<u8> to_byte_array(std::initializer_list<T> in_data)
|
|
||||||
{
|
|
||||||
std::vector<u8> data;
|
|
||||||
data.resize(sizeof(T) * in_data.size());
|
|
||||||
memcpy(data.data(), in_data.begin(), data.size());
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const ImageDesc test_images[] = {
|
|
||||||
{"16color-16bpp", video::ECF_A1R5G5B5, to_byte_array<u16>({
|
|
||||||
0xb6df, 0xb6df, 0xb6df, 0xb6df, 0xc23f, 0xc23f, 0xd61f, 0xd61f, 0xea3f, 0xea3f, 0xfe5e, 0xfe5e, 0xfe7c, 0xfe7a, 0xfe7a, 0xfe97, 0xfeb5, 0xfeb5, 0xff16,
|
|
||||||
0xb6df, 0xb6df, 0xff3f, 0xff3f, 0xc23f, 0xf2df, 0xf2df, 0xf2df, 0xea3f, 0xda7f, 0xda7f, 0xfe5e, 0xfe7a, 0xc23f, 0xbe7f, 0xbe7f, 0xfeb5, 0xfeb5, 0xfb76,
|
|
||||||
0xb6df, 0xff9e, 0xc23f, 0xc23f, 0xc23f, 0xf2df, 0xd61f, 0xf2df, 0xea3f, 0xda7f, 0xfe5e, 0xda7f, 0xfe7a, 0xc23f, 0xfe97, 0xfeb5, 0xfeb5, 0xff16, 0xfb76,
|
|
||||||
0xb6df, 0xff9e, 0xbe7f, 0xc23f, 0xd61f, 0xfe7c, 0xd61f, 0xf2df, 0xfe5e, 0xf2df, 0xfe7c, 0xda7f, 0xfe7a, 0xda7f, 0xbe7f, 0xfeb5, 0xff16, 0xff16, 0xfb76,
|
|
||||||
0xb6df, 0xff9e, 0xc23f, 0xc23f, 0xd61f, 0xff3f, 0xd61f, 0xf2df, 0xfe5e, 0xda7f, 0xfe7c, 0xda7f, 0xfe7a, 0xc23f, 0xfeb5, 0xfeb5, 0xff16, 0xff16, 0xfb76,
|
|
||||||
0xb6df, 0xbe7f, 0xff9e, 0xff3f, 0xd61f, 0xff3f, 0xf2df, 0xf2df, 0xfe5e, 0xf2df, 0xda7f, 0xfe97, 0xfe97, 0xda7f, 0xc23f, 0xda7f, 0xfb76, 0xfb76, 0xfb76,
|
|
||||||
0xbe7f, 0xc23f, 0xc23f, 0xd61f, 0xd61f, 0xea3f, 0xea3f, 0xfe5e, 0xfe5e, 0xfe7c, 0xfe7c, 0xfe7a, 0xfe97, 0xfeb5, 0xfeb5, 0xfeb5, 0xfb76, 0xfb76, 0xfb76,
|
|
||||||
0xbe7f, 0xc23f, 0xd61f, 0xd61f, 0xd61f, 0xea3f, 0xea3f, 0xfe5e, 0xfe5e, 0xfe7c, 0xfe97, 0xfe97, 0xfe97, 0xfeb5, 0xff16, 0xff16, 0xfb76, 0xfb76, 0xfb76,
|
|
||||||
0xc23f, 0xff9e, 0xc23f, 0xd61f, 0xff3f, 0xea3f, 0xfe5e, 0xff3f, 0xfe7c, 0xfe7c, 0xf2df, 0xfe97, 0xfeb5, 0xfeb5, 0xda7f, 0xff16, 0xc23f, 0xc23f, 0xbe7f,
|
|
||||||
0xc23f, 0xff9e, 0xff9e, 0xd61f, 0xff9e, 0xea3f, 0xff3f, 0xfe5e, 0xff3f, 0xfe7a, 0xf2df, 0xf2df, 0xfeb5, 0xf2df, 0xda7f, 0xfb76, 0xc23f, 0xfb76, 0xfb76,
|
|
||||||
0xc23f, 0xff9e, 0xd61f, 0xff9e, 0xff9e, 0xfe5e, 0xff3f, 0xff3f, 0xff3f, 0xfe7a, 0xff3f, 0xfeb5, 0xf2df, 0xff16, 0xda7f, 0xfb76, 0xda7f, 0xda7f, 0xfb76,
|
|
||||||
0xc23f, 0xff9e, 0xea3f, 0xea3f, 0xff9e, 0xfe5e, 0xff9e, 0xfe7c, 0xff3f, 0xfe97, 0xf2df, 0xfeb5, 0xfeb5, 0xff16, 0xf2df, 0xfb76, 0xda7f, 0xfb76, 0xfb76,
|
|
||||||
0xd61f, 0xff9e, 0xd61f, 0xea3f, 0xff9e, 0xfe5e, 0xff9e, 0xfe7c, 0xff3f, 0xfe97, 0xff3f, 0xfeb5, 0xff16, 0xfb76, 0xda7f, 0xfb76, 0xda7f, 0xda7f, 0xc23f,
|
|
||||||
0xd61f, 0xd61f, 0xea3f, 0xea3f, 0xea3f, 0xfe5e, 0xfe7c, 0xfe7a, 0xfe7a, 0xfe97, 0xfeb5, 0xff16, 0xff16, 0xfb76, 0xfb76, 0xfb76, 0xfb76, 0xfb76, 0xfb76,
|
|
||||||
0xd61f, 0xd61f, 0xea3f, 0xfe5e, 0xfe5e, 0xfe7c, 0xfe7a, 0xfe7a, 0xfe97, 0xfeb5, 0xfeb5, 0xff16, 0xff16, 0xfb76, 0xfb76, 0xfb76, 0xfb76, 0xfb76, 0xfb76,
|
|
||||||
})},
|
|
||||||
|
|
||||||
{"30color-16bpp", video::ECF_A1R5G5B5, to_byte_array<u16>({
|
|
||||||
0xbabf, 0xbabf, 0xbabf, 0xbabf, 0xbe3f, 0xbdff, 0xc9ff, 0xda1f, 0xee3f, 0xee3f, 0xfa5f, 0xfe5e, 0xfe7c, 0xfe7b, 0xfe79, 0xfe97, 0xfeb5, 0xfed5, 0xff16,
|
|
||||||
0xbabf, 0xbabf, 0xff1f, 0xff1f, 0xbdff, 0xfaff, 0xf2df, 0xeabf, 0xee3f, 0xe27f, 0xda7f, 0xfe5e, 0xfe7b, 0xc25f, 0xbe7f, 0xbe7f, 0xfeb5, 0xfed5, 0xff56,
|
|
||||||
0xbabf, 0xff7e, 0xbe7f, 0xc25f, 0xbdff, 0xfaff, 0xda1f, 0xf2df, 0xee3f, 0xda7f, 0xfe5e, 0xce5f, 0xfe79, 0xce5f, 0xfe97, 0xfeb5, 0xfed5, 0xff16, 0xff56,
|
|
||||||
0xbabf, 0xff7e, 0xbe7f, 0xbdff, 0xc9ff, 0xfaff, 0xda1f, 0xf2df, 0xfa5f, 0xeabf, 0xfe5e, 0xda7f, 0xfe79, 0xce5f, 0xc25f, 0xfeb5, 0xff16, 0xff16, 0xff76,
|
|
||||||
0xbabf, 0xff7e, 0xc25f, 0xbdff, 0xc9ff, 0xff1f, 0xda1f, 0xf2df, 0xfa5f, 0xeabf, 0xfe7c, 0xda7f, 0xfe79, 0xce5f, 0xfeb5, 0xfed5, 0xff16, 0xff56, 0xff97,
|
|
||||||
0xbabf, 0xbe7f, 0xff7e, 0xff5e, 0xda1f, 0xff1f, 0xfaff, 0xfaff, 0xfa5f, 0xf2df, 0xeabf, 0xfe79, 0xfe97, 0xda7f, 0xce5f, 0xce5f, 0xff56, 0xff76, 0xff97,
|
|
||||||
0xbe7f, 0xc25f, 0xbdff, 0xc9ff, 0xda1f, 0xda1f, 0xee3f, 0xfa5f, 0xfa5f, 0xfe7c, 0xfe7b, 0xfe79, 0xfe97, 0xfeb5, 0xfed5, 0xfed5, 0xff76, 0xff76, 0xff97,
|
|
||||||
0xbe7f, 0xbe3f, 0xc9ff, 0xc9ff, 0xda1f, 0xee3f, 0xee3f, 0xfa5f, 0xfe5e, 0xfe7c, 0xfe79, 0xfe97, 0xfe97, 0xfeb5, 0xff16, 0xff16, 0xff76, 0xff97, 0xff97,
|
|
||||||
0xbe3f, 0xffbe, 0xc9ff, 0xda1f, 0xff5e, 0xee3f, 0xfa5f, 0xff1f, 0xfe7c, 0xfe7b, 0xf2df, 0xfe97, 0xfeb5, 0xfeb5, 0xda7f, 0xff76, 0xce5f, 0xbe3f, 0xc25f,
|
|
||||||
0xbe3f, 0xffbe, 0xffbe, 0xda1f, 0xff7e, 0xfa5f, 0xff5e, 0xfe5e, 0xff1f, 0xfe79, 0xf2df, 0xf2df, 0xfeb5, 0xeabf, 0xda7f, 0xff76, 0xce5f, 0xff97, 0xff97,
|
|
||||||
0xbdff, 0xffbe, 0xda1f, 0xff7e, 0xff7e, 0xfa5f, 0xff5e, 0xff1f, 0xff1f, 0xfe79, 0xfaff, 0xfeb5, 0xf2df, 0xff16, 0xe27f, 0xff97, 0xda7f, 0xce5f, 0xff97,
|
|
||||||
0xbdff, 0xffbe, 0xda1f, 0xee3f, 0xffbe, 0xfa5f, 0xff7e, 0xfe7b, 0xff1f, 0xfe97, 0xfaff, 0xfeb5, 0xfed5, 0xff56, 0xeabf, 0xff97, 0xda7f, 0xff97, 0xff97,
|
|
||||||
0xc9ff, 0xffbe, 0xda1f, 0xee3f, 0xff7e, 0xfa5f, 0xff7e, 0xfe7c, 0xff5e, 0xfe97, 0xfaff, 0xfed5, 0xff16, 0xff56, 0xeabf, 0xff97, 0xda7f, 0xda7f, 0xce5f,
|
|
||||||
0xda1f, 0xda1f, 0xee3f, 0xee3f, 0xfa5f, 0xfe5e, 0xfe7c, 0xfe79, 0xfe79, 0xfe97, 0xfeb5, 0xfed5, 0xff16, 0xff56, 0xff97, 0xff97, 0xff97, 0xff97, 0xff97,
|
|
||||||
0xda1f, 0xda1f, 0xee3f, 0xfa5f, 0xfe5e, 0xfe7c, 0xfe7b, 0xfe79, 0xfe97, 0xfeb5, 0xfed5, 0xff16, 0xff56, 0xff97, 0xff97, 0xff97, 0xff97, 0xff97, 0xff97,
|
|
||||||
})},
|
|
||||||
|
|
||||||
{"30color-24bpp", video::ECF_R8G8B8, {
|
|
||||||
0x71, 0xaf, 0xff, 0x71, 0xaf, 0xff, 0x71, 0xaf, 0xff, 0x71, 0xaf, 0xff, 0x7b, 0x8b, 0xff, 0x7a, 0x7f, 0xff, 0x90, 0x7f, 0xff, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xd9, 0x8c, 0xff, 0xf4, 0x92, 0xfe, 0xfe, 0x96, 0xf0, 0xfd, 0x99, 0xe3, 0xfd, 0x9b, 0xda, 0xfc, 0x9f, 0xca, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf9, 0xc6, 0xb1,
|
|
||||||
0x71, 0xaf, 0xff, 0x71, 0xaf, 0xff, 0xff, 0xc6, 0xfc, 0xff, 0xc6, 0xfc, 0x7a, 0x7f, 0xff, 0xf7, 0xbe, 0xff, 0xe4, 0xb2, 0xfe, 0xd4, 0xa9, 0xff, 0xd9, 0x8c, 0xff, 0xc3, 0x98, 0xff, 0xb2, 0x9a, 0xff, 0xfe, 0x96, 0xf0, 0xfd, 0x9b, 0xda, 0x86, 0x93, 0xfe, 0x78, 0x9b, 0xff, 0x78, 0x9b, 0xff, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf8, 0xd2, 0xb3,
|
|
||||||
0x71, 0xaf, 0xff, 0xfe, 0xdc, 0xf3, 0x78, 0x9b, 0xff, 0x86, 0x93, 0xfe, 0x7a, 0x7f, 0xff, 0xf7, 0xbe, 0xff, 0xb6, 0x85, 0xff, 0xe4, 0xb2, 0xfe, 0xd9, 0x8c, 0xff, 0xb2, 0x9a, 0xff, 0xfe, 0x96, 0xf0, 0x9a, 0x91, 0xff, 0xfc, 0x9f, 0xca, 0x9a, 0x91, 0xff, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf9, 0xc6, 0xb1, 0xf8, 0xd2, 0xb3,
|
|
||||||
0x71, 0xaf, 0xff, 0xfe, 0xdc, 0xf3, 0x78, 0x9b, 0xff, 0x7a, 0x7f, 0xff, 0x90, 0x7f, 0xff, 0xf7, 0xbe, 0xff, 0xb6, 0x85, 0xff, 0xe4, 0xb2, 0xfe, 0xf4, 0x92, 0xfe, 0xd4, 0xa9, 0xff, 0xfe, 0x96, 0xf0, 0xb2, 0x9a, 0xff, 0xfc, 0x9f, 0xca, 0x9a, 0x91, 0xff, 0x86, 0x93, 0xfe, 0xfb, 0xa9, 0xab, 0xf9, 0xc6, 0xb1, 0xf9, 0xc6, 0xb1, 0xf8, 0xd8, 0xb5,
|
|
||||||
0x71, 0xaf, 0xff, 0xfe, 0xdc, 0xf3, 0x86, 0x93, 0xfe, 0x7a, 0x7f, 0xff, 0x90, 0x7f, 0xff, 0xff, 0xc6, 0xfc, 0xb6, 0x85, 0xff, 0xe4, 0xb2, 0xfe, 0xf4, 0x92, 0xfe, 0xd4, 0xa9, 0xff, 0xfd, 0x99, 0xe3, 0xb2, 0x9a, 0xff, 0xfc, 0x9f, 0xca, 0x9a, 0x91, 0xff, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf9, 0xc6, 0xb1, 0xf8, 0xd2, 0xb3, 0xf8, 0xe4, 0xb9,
|
|
||||||
0x71, 0xaf, 0xff, 0x78, 0x9b, 0xff, 0xfe, 0xdc, 0xf3, 0xff, 0xd0, 0xf7, 0xb6, 0x85, 0xff, 0xff, 0xc6, 0xfc, 0xf7, 0xbe, 0xff, 0xf7, 0xbe, 0xff, 0xf4, 0x92, 0xfe, 0xe4, 0xb2, 0xfe, 0xd4, 0xa9, 0xff, 0xfc, 0x9f, 0xca, 0xfc, 0xa4, 0xbc, 0xb2, 0x9a, 0xff, 0x9a, 0x91, 0xff, 0x9a, 0x91, 0xff, 0xf8, 0xd2, 0xb3, 0xf8, 0xd8, 0xb5, 0xf8, 0xe4, 0xb9,
|
|
||||||
0x78, 0x9b, 0xff, 0x86, 0x93, 0xfe, 0x7a, 0x7f, 0xff, 0x90, 0x7f, 0xff, 0xb6, 0x85, 0xff, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xf4, 0x92, 0xfe, 0xf4, 0x92, 0xfe, 0xfd, 0x99, 0xe3, 0xfd, 0x9b, 0xda, 0xfc, 0x9f, 0xca, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xfa, 0xb6, 0xad, 0xf8, 0xd8, 0xb5, 0xf8, 0xd8, 0xb5, 0xf8, 0xe4, 0xb9,
|
|
||||||
0x78, 0x9b, 0xff, 0x7b, 0x8b, 0xff, 0x90, 0x7f, 0xff, 0x90, 0x7f, 0xff, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xd9, 0x8c, 0xff, 0xf4, 0x92, 0xfe, 0xfe, 0x96, 0xf0, 0xfd, 0x99, 0xe3, 0xfc, 0x9f, 0xca, 0xfc, 0xa4, 0xbc, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xf9, 0xc6, 0xb1, 0xf9, 0xc6, 0xb1, 0xf8, 0xd8, 0xb5, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9,
|
|
||||||
0x7b, 0x8b, 0xff, 0xff, 0xeb, 0xf2, 0x90, 0x7f, 0xff, 0xb6, 0x85, 0xff, 0xff, 0xd0, 0xf7, 0xd9, 0x8c, 0xff, 0xf4, 0x92, 0xfe, 0xff, 0xc6, 0xfc, 0xfd, 0x99, 0xe3, 0xfd, 0x9b, 0xda, 0xe4, 0xb2, 0xfe, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xfb, 0xa9, 0xab, 0xb2, 0x9a, 0xff, 0xf8, 0xd8, 0xb5, 0x9a, 0x91, 0xff, 0x7b, 0x8b, 0xff, 0x86, 0x93, 0xfe,
|
|
||||||
0x7b, 0x8b, 0xff, 0xff, 0xeb, 0xf2, 0xff, 0xeb, 0xf2, 0xb6, 0x85, 0xff, 0xfe, 0xdc, 0xf3, 0xf4, 0x92, 0xfe, 0xff, 0xd0, 0xf7, 0xfe, 0x96, 0xf0, 0xff, 0xc6, 0xfc, 0xfc, 0x9f, 0xca, 0xe4, 0xb2, 0xfe, 0xe4, 0xb2, 0xfe, 0xfb, 0xa9, 0xab, 0xd4, 0xa9, 0xff, 0xb2, 0x9a, 0xff, 0xf8, 0xd8, 0xb5, 0x9a, 0x91, 0xff, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9,
|
|
||||||
0x7a, 0x7f, 0xff, 0xff, 0xeb, 0xf2, 0xb6, 0x85, 0xff, 0xfe, 0xdc, 0xf3, 0xfe, 0xdc, 0xf3, 0xf4, 0x92, 0xfe, 0xff, 0xd0, 0xf7, 0xff, 0xc6, 0xfc, 0xff, 0xc6, 0xfc, 0xfc, 0x9f, 0xca, 0xf7, 0xbe, 0xff, 0xfb, 0xa9, 0xab, 0xe4, 0xb2, 0xfe, 0xf9, 0xc6, 0xb1, 0xc3, 0x98, 0xff, 0xf8, 0xe4, 0xb9, 0xb2, 0x9a, 0xff, 0x9a, 0x91, 0xff, 0xf8, 0xe4, 0xb9,
|
|
||||||
0x7a, 0x7f, 0xff, 0xff, 0xeb, 0xf2, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xff, 0xeb, 0xf2, 0xf4, 0x92, 0xfe, 0xfe, 0xdc, 0xf3, 0xfd, 0x9b, 0xda, 0xff, 0xc6, 0xfc, 0xfc, 0xa4, 0xbc, 0xf7, 0xbe, 0xff, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf8, 0xd2, 0xb3, 0xd4, 0xa9, 0xff, 0xf8, 0xe4, 0xb9, 0xb2, 0x9a, 0xff, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9,
|
|
||||||
0x90, 0x7f, 0xff, 0xff, 0xeb, 0xf2, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xfe, 0xdc, 0xf3, 0xf4, 0x92, 0xfe, 0xfe, 0xdc, 0xf3, 0xfd, 0x99, 0xe3, 0xff, 0xd0, 0xf7, 0xfc, 0xa4, 0xbc, 0xf7, 0xbe, 0xff, 0xfa, 0xb6, 0xad, 0xf9, 0xc6, 0xb1, 0xf8, 0xd2, 0xb3, 0xd4, 0xa9, 0xff, 0xf8, 0xe4, 0xb9, 0xb2, 0x9a, 0xff, 0xb2, 0x9a, 0xff, 0x9a, 0x91, 0xff,
|
|
||||||
0xb6, 0x85, 0xff, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xd9, 0x8c, 0xff, 0xf4, 0x92, 0xfe, 0xfe, 0x96, 0xf0, 0xfd, 0x99, 0xe3, 0xfc, 0x9f, 0xca, 0xfc, 0x9f, 0xca, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf9, 0xc6, 0xb1, 0xf8, 0xd2, 0xb3, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9,
|
|
||||||
0xb6, 0x85, 0xff, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xf4, 0x92, 0xfe, 0xfe, 0x96, 0xf0, 0xfd, 0x99, 0xe3, 0xfd, 0x9b, 0xda, 0xfc, 0x9f, 0xca, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf9, 0xc6, 0xb1, 0xf8, 0xd2, 0xb3, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9,
|
|
||||||
}},
|
|
||||||
|
|
||||||
{"30color-32bpp", video::ECF_A8R8G8B8, to_byte_array<u32>({
|
|
||||||
0xff71afff, 0xff71afff, 0xff71afff, 0xff71afff, 0xff7b8bff, 0xff7a7fff, 0xff907fff, 0xffb685ff, 0xffd98cff, 0xffd98cff, 0xfff492fe, 0xfffe96f0, 0xfffd99e3, 0xfffd9bda, 0xfffc9fca, 0xfffca4bc, 0xfffba9ab, 0xfffab6ad, 0xfff9c6b1,
|
|
||||||
0xff71afff, 0xff71afff, 0xffffc6fc, 0xffffc6fc, 0xff7a7fff, 0xfff7beff, 0xffe4b2fe, 0xffd4a9ff, 0xffd98cff, 0xffc398ff, 0xffb29aff, 0xfffe96f0, 0xfffd9bda, 0xff8693fe, 0xff789bff, 0xff789bff, 0xfffba9ab, 0xfffab6ad, 0xfff8d2b3,
|
|
||||||
0xff71afff, 0xfffedcf3, 0xff789bff, 0xff8693fe, 0xff7a7fff, 0xfff7beff, 0xffb685ff, 0xffe4b2fe, 0xffd98cff, 0xffb29aff, 0xfffe96f0, 0xff9a91ff, 0xfffc9fca, 0xff9a91ff, 0xfffca4bc, 0xfffba9ab, 0xfffab6ad, 0xfff9c6b1, 0xfff8d2b3,
|
|
||||||
0xff71afff, 0xfffedcf3, 0xff789bff, 0xff7a7fff, 0xff907fff, 0xfff7beff, 0xffb685ff, 0xffe4b2fe, 0xfff492fe, 0xffd4a9ff, 0xfffe96f0, 0xffb29aff, 0xfffc9fca, 0xff9a91ff, 0xff8693fe, 0xfffba9ab, 0xfff9c6b1, 0xfff9c6b1, 0xfff8d8b5,
|
|
||||||
0xff71afff, 0xfffedcf3, 0xff8693fe, 0xff7a7fff, 0xff907fff, 0xffffc6fc, 0xffb685ff, 0xffe4b2fe, 0xfff492fe, 0xffd4a9ff, 0xfffd99e3, 0xffb29aff, 0xfffc9fca, 0xff9a91ff, 0xfffba9ab, 0xfffab6ad, 0xfff9c6b1, 0xfff8d2b3, 0xfff8e4b9,
|
|
||||||
0xff71afff, 0xff789bff, 0xfffedcf3, 0xffffd0f7, 0xffb685ff, 0xffffc6fc, 0xfff7beff, 0xfff7beff, 0xfff492fe, 0xffe4b2fe, 0xffd4a9ff, 0xfffc9fca, 0xfffca4bc, 0xffb29aff, 0xff9a91ff, 0xff9a91ff, 0xfff8d2b3, 0xfff8d8b5, 0xfff8e4b9,
|
|
||||||
0xff789bff, 0xff8693fe, 0xff7a7fff, 0xff907fff, 0xffb685ff, 0xffb685ff, 0xffd98cff, 0xfff492fe, 0xfff492fe, 0xfffd99e3, 0xfffd9bda, 0xfffc9fca, 0xfffca4bc, 0xfffba9ab, 0xfffab6ad, 0xfffab6ad, 0xfff8d8b5, 0xfff8d8b5, 0xfff8e4b9,
|
|
||||||
0xff789bff, 0xff7b8bff, 0xff907fff, 0xff907fff, 0xffb685ff, 0xffd98cff, 0xffd98cff, 0xfff492fe, 0xfffe96f0, 0xfffd99e3, 0xfffc9fca, 0xfffca4bc, 0xfffca4bc, 0xfffba9ab, 0xfff9c6b1, 0xfff9c6b1, 0xfff8d8b5, 0xfff8e4b9, 0xfff8e4b9,
|
|
||||||
0xff7b8bff, 0xffffebf2, 0xff907fff, 0xffb685ff, 0xffffd0f7, 0xffd98cff, 0xfff492fe, 0xffffc6fc, 0xfffd99e3, 0xfffd9bda, 0xffe4b2fe, 0xfffca4bc, 0xfffba9ab, 0xfffba9ab, 0xffb29aff, 0xfff8d8b5, 0xff9a91ff, 0xff7b8bff, 0xff8693fe,
|
|
||||||
0xff7b8bff, 0xffffebf2, 0xffffebf2, 0xffb685ff, 0xfffedcf3, 0xfff492fe, 0xffffd0f7, 0xfffe96f0, 0xffffc6fc, 0xfffc9fca, 0xffe4b2fe, 0xffe4b2fe, 0xfffba9ab, 0xffd4a9ff, 0xffb29aff, 0xfff8d8b5, 0xff9a91ff, 0xfff8e4b9, 0xfff8e4b9,
|
|
||||||
0xff7a7fff, 0xffffebf2, 0xffb685ff, 0xfffedcf3, 0xfffedcf3, 0xfff492fe, 0xffffd0f7, 0xffffc6fc, 0xffffc6fc, 0xfffc9fca, 0xfff7beff, 0xfffba9ab, 0xffe4b2fe, 0xfff9c6b1, 0xffc398ff, 0xfff8e4b9, 0xffb29aff, 0xff9a91ff, 0xfff8e4b9,
|
|
||||||
0xff7a7fff, 0xffffebf2, 0xffb685ff, 0xffd98cff, 0xffffebf2, 0xfff492fe, 0xfffedcf3, 0xfffd9bda, 0xffffc6fc, 0xfffca4bc, 0xfff7beff, 0xfffba9ab, 0xfffab6ad, 0xfff8d2b3, 0xffd4a9ff, 0xfff8e4b9, 0xffb29aff, 0xfff8e4b9, 0xfff8e4b9,
|
|
||||||
0xff907fff, 0xffffebf2, 0xffb685ff, 0xffd98cff, 0xfffedcf3, 0xfff492fe, 0xfffedcf3, 0xfffd99e3, 0xffffd0f7, 0xfffca4bc, 0xfff7beff, 0xfffab6ad, 0xfff9c6b1, 0xfff8d2b3, 0xffd4a9ff, 0xfff8e4b9, 0xffb29aff, 0xffb29aff, 0xff9a91ff,
|
|
||||||
0xffb685ff, 0xffb685ff, 0xffd98cff, 0xffd98cff, 0xfff492fe, 0xfffe96f0, 0xfffd99e3, 0xfffc9fca, 0xfffc9fca, 0xfffca4bc, 0xfffba9ab, 0xfffab6ad, 0xfff9c6b1, 0xfff8d2b3, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9,
|
|
||||||
0xffb685ff, 0xffb685ff, 0xffd98cff, 0xfff492fe, 0xfffe96f0, 0xfffd99e3, 0xfffd9bda, 0xfffc9fca, 0xfffca4bc, 0xfffba9ab, 0xfffab6ad, 0xfff9c6b1, 0xfff8d2b3, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9,
|
|
||||||
})},
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
void printImageBytes(const video::IImage *img)
|
|
||||||
{
|
|
||||||
const auto *data = (u8 *)img->getData();
|
|
||||||
const auto w = img->getPitch();
|
|
||||||
const auto h = img->getDimension().Height;
|
|
||||||
for (int y = 0; y < h; y++) {
|
|
||||||
for (int k = 0; k < w; k++) {
|
|
||||||
std::printf("0x%02x, ", *data++);
|
|
||||||
}
|
|
||||||
std::printf("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
try {
|
|
||||||
if (argc != 3)
|
|
||||||
throw std::runtime_error("Invalid arguments. Expected sample ID and image file name");
|
|
||||||
|
|
||||||
const ImageDesc *sample = nullptr;
|
|
||||||
for (auto &&image : test_images) {
|
|
||||||
if (strcmp(argv[1], image.name) == 0)
|
|
||||||
sample = ℑ
|
|
||||||
}
|
|
||||||
if (!sample)
|
|
||||||
throw std::runtime_error("Sample not found");
|
|
||||||
|
|
||||||
SIrrlichtCreationParameters p;
|
|
||||||
p.DriverType = video::EDT_NULL;
|
|
||||||
p.WindowSize = core::dimension2du(640, 480);
|
|
||||||
p.LoggingLevel = ELL_DEBUG;
|
|
||||||
|
|
||||||
auto *device = createDeviceEx(p);
|
|
||||||
if (!device)
|
|
||||||
throw std::runtime_error("Failed to create device");
|
|
||||||
|
|
||||||
auto *driver = device->getVideoDriver();
|
|
||||||
|
|
||||||
auto *img = driver->createImageFromFile(argv[2]);
|
|
||||||
if (!img)
|
|
||||||
throw std::runtime_error("Failed to load image");
|
|
||||||
|
|
||||||
if (img->getDimension() != core::dimension2du{19, 15})
|
|
||||||
throw std::runtime_error("Wrong image dimensions");
|
|
||||||
|
|
||||||
if (img->getColorFormat() != sample->format)
|
|
||||||
throw std::runtime_error("Wrong image format");
|
|
||||||
|
|
||||||
if (img->getImageDataSizeInBytes() != sample->data.size())
|
|
||||||
throw std::logic_error("Image data size not equal to sample size");
|
|
||||||
|
|
||||||
if (memcmp(img->getData(), sample->data.data(), sample->data.size()) != 0) {
|
|
||||||
printImageBytes(img);
|
|
||||||
throw std::runtime_error("Wrong image contents");
|
|
||||||
}
|
|
||||||
|
|
||||||
img->drop();
|
|
||||||
device->drop();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
} catch (const std::exception &e) {
|
|
||||||
std::printf("Test failed: %s\n", e.what());
|
|
||||||
return 1;
|
|
||||||
}
|
|