Compare commits
3 Commits
release
...
backup/rel
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7120431da6 | ||
|
|
3c25af4a57 | ||
|
|
64513ea069 |
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -15,7 +15,7 @@ What does this PR do? Provide a brief summary of the changes.
|
|||||||
### Required for All PRs
|
### Required for All PRs
|
||||||
|
|
||||||
- [ ] Reproducible glTF test file(s) are included (e.g., `models/regression/`, `tests/issue-***.gltf`, etc.)
|
- [ ] Reproducible glTF test file(s) are included (e.g., `models/regression/`, `tests/issue-***.gltf`, etc.)
|
||||||
- [ ] Unit tests are written and pass locally (`cd tests && make run`)
|
- [ ] Unit tests are written and pass locally (`cd tests && ./tester`)
|
||||||
|
|
||||||
### Required for Feature PRs
|
### Required for Feature PRs
|
||||||
|
|
||||||
|
|||||||
151
.github/workflows/c-cpp.yml
vendored
@@ -4,11 +4,39 @@ on: [push, pull_request]
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
|
# gcc4.8 is too old and ubuntu-18.04 image is not supported in GitHub Actions anymore,
|
||||||
|
# so disable this build.
|
||||||
|
## compile with older gcc4.8
|
||||||
|
#build-gcc48:
|
||||||
|
|
||||||
|
# runs-on: ubuntu-18.04
|
||||||
|
# name: Build with gcc 4.8
|
||||||
|
|
||||||
|
# steps:
|
||||||
|
# - name: Checkout
|
||||||
|
# uses: actions/checkout@v5
|
||||||
|
|
||||||
|
# - name: Build
|
||||||
|
# run: |
|
||||||
|
# sudo apt-get update
|
||||||
|
# sudo apt-get install -y build-essential
|
||||||
|
# sudo apt-get install -y gcc-4.8 g++-4.8
|
||||||
|
# g++-4.8 -std=c++11 -o loader_example loader_example.cc
|
||||||
|
|
||||||
|
# - name: NoexceptBuild
|
||||||
|
# run: |
|
||||||
|
# g++-4.8 -DTINYGLTF_NOEXCEPTION -std=c++11 -o loader_example loader_example.cc
|
||||||
|
|
||||||
|
# - name: RapidjsonBuild
|
||||||
|
# run: |
|
||||||
|
# git clone https://github.com/Tencent/rapidjson
|
||||||
|
# g++-4.8 -DTINYGLTF_USE_RAPIDJSON -I./rapidjson/include/rapidjson -std=c++11 -o loader_example loader_example.cc
|
||||||
|
|
||||||
# compile with mingw gcc cross
|
# compile with mingw gcc cross
|
||||||
build-mingw-cross:
|
build-mingw-cross:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Build v3 C tests with MinGW gcc cross
|
name: Build with MinGW gcc cross
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -19,50 +47,141 @@ jobs:
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y build-essential
|
sudo apt-get install -y build-essential
|
||||||
sudo apt-get install -y mingw-w64
|
sudo apt-get install -y mingw-w64
|
||||||
cd tests
|
x86_64-w64-mingw32-g++ -std=c++11 -o loader_example loader_example.cc
|
||||||
x86_64-w64-mingw32-gcc -I../ -std=c11 -DTINYGLTF3_ENABLE_FS -o tester_v3_c.exe tester_v3_c.c ../tiny_gltf_v3.c
|
|
||||||
|
|
||||||
# Windows(x64) + MSVC build (VS version agnostic: msvc-dev-cmd locates
|
# Windows(x64) + Visual Studio 2022 build
|
||||||
# whatever Visual Studio the runner image ships, e.g. VS2022 or VS2026)
|
# Assume windows-latest have VS2022 installed
|
||||||
build-windows-msvc:
|
build-windows-msvc:
|
||||||
|
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
name: Build v3 C tests on Windows(x64, MSVC)
|
name: Build for Windows(x64, MSVC)
|
||||||
|
|
||||||
|
# Use system installed cmake
|
||||||
|
# https://help.github.com/en/actions/reference/software-installed-on-github-hosted-runners
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
- name: Set up MSVC environment
|
|
||||||
uses: ilammy/msvc-dev-cmd@v1
|
|
||||||
- name: Configure
|
- name: Configure
|
||||||
run: cmake -B build -G Ninja -DTINYGLTF3_BUILD_TESTS=ON
|
run: |
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake --help
|
||||||
|
cmake -G "Visual Studio 17 2022" -A x64 -DTINYGLTF_BUILD_LOADER_EXAMPLE=On -DTINYGLTF_BUILD_GL_EXAMPLES=Off -DTINYGLTF_BUILD_VALIDATOR_EXAMPLE=On -DTINYGLTF_BUILD_TESTS=ON ..
|
||||||
|
cd ..
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cmake --build build
|
run: cmake --build build --config Release
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: ctest --test-dir build --output-on-failure
|
run: ctest --test-dir build -C Release --output-on-failure
|
||||||
|
|
||||||
|
|
||||||
build-linux:
|
build-linux:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Build v3 C tests with gcc
|
name: Buld with gcc
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v5
|
||||||
- name: build
|
- name: build
|
||||||
run: |
|
run: |
|
||||||
cd tests
|
g++ -std=c++11 -o loader_example loader_example.cc
|
||||||
cc -I../ -std=c11 -g -O0 -DTINYGLTF3_ENABLE_FS -o tester_v3_c tester_v3_c.c ../tiny_gltf_v3.c
|
|
||||||
- name: test
|
- name: test
|
||||||
run: |
|
run: |
|
||||||
./tests/tester_v3_c models/Cube/Cube.gltf
|
./loader_example models/Cube/Cube.gltf
|
||||||
|
|
||||||
- name: tests
|
- name: tests
|
||||||
run: |
|
run: |
|
||||||
cd tests
|
cd tests
|
||||||
make all
|
g++ -I../ -std=c++11 -g -O0 -o tester tester.cc
|
||||||
|
./tester
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
- name: noexcept_tests
|
||||||
|
run: |
|
||||||
|
cd tests
|
||||||
|
g++ -DTINYGLTF_NOEXCEPTION -I../ -std=c++11 -g -O0 -o tester_noexcept tester.cc
|
||||||
|
./tester_noexcept
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
- name: v3_c_tests
|
||||||
|
run: |
|
||||||
|
cd tests
|
||||||
|
cc -I../ -std=c11 -g -O0 -DTINYGLTF3_ENABLE_FS \
|
||||||
|
-o tester_v3_c tester_v3_c.c ../tiny_gltf_v3.c
|
||||||
./tester_v3_c
|
./tester_v3_c
|
||||||
|
cc -I../ -std=c11 -g -O0 -DTINYGLTF3_ENABLE_FS \
|
||||||
|
-o tester_v3_c_v1port tester_v3_c_v1port.c ../tiny_gltf_v3.c
|
||||||
./tester_v3_c_v1port
|
./tester_v3_c_v1port
|
||||||
|
cc -I../ -std=c11 -g -O0 \
|
||||||
|
-o tester_v3_json_c tester_v3_json_c.c
|
||||||
./tester_v3_json_c
|
./tester_v3_json_c
|
||||||
|
cc -I../ -std=c11 -ffreestanding -g -O0 \
|
||||||
|
-o tester_v3_freestanding tester_v3_freestanding.c
|
||||||
./tester_v3_freestanding
|
./tester_v3_freestanding
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
|
|
||||||
|
build-rapidjson-linux:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Buld with gcc + rapidjson
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- name: build
|
||||||
|
run: |
|
||||||
|
git clone https://github.com/Tencent/rapidjson
|
||||||
|
g++ -v
|
||||||
|
g++ -DTINYGLTF_USE_RAPIDJSON -I./rapidjson/include/rapidjson -std=c++11 -o loader_example loader_example.cc
|
||||||
|
|
||||||
|
- name: loader_example_test
|
||||||
|
run: |
|
||||||
|
./loader_example models/Cube/Cube.gltf
|
||||||
|
|
||||||
|
- name: tests
|
||||||
|
run: |
|
||||||
|
cd tests
|
||||||
|
g++ -DTINYGLTF_USE_RAPIDJSON -I../rapidjson/include/rapidjson -I../ -std=c++11 -g -O0 -o tester tester.cc
|
||||||
|
./tester
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
- name: noexcept_tests
|
||||||
|
run: |
|
||||||
|
cd tests
|
||||||
|
g++ -DTINYGLTF_USE_RAPIDJSON -I../rapidjson/include/rapidjson -DTINYGLTF_NOEXCEPTION -I../ -std=c++11 -g -O0 -o tester_noexcept tester.cc
|
||||||
|
./tester_noexcept
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# Cross-compile for aarch64 linux target
|
||||||
|
build-cross-aarch64:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Build on cross aarch64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y build-essential
|
||||||
|
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
|
||||||
|
|
||||||
|
git clone https://github.com/Tencent/rapidjson
|
||||||
|
aarch64-linux-gnu-g++ -DTINYGLTF_USE_RAPIDJSON -I./rapidjson/include/rapidjson -std=c++11 -g -O0 -o loader_example loader_example.cc
|
||||||
|
|
||||||
|
# macOS clang
|
||||||
|
build-macos:
|
||||||
|
|
||||||
|
runs-on: macos-latest
|
||||||
|
name: Build on macOS
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
clang++ -std=c++11 -g -O0 -o loader_example loader_example.cc
|
||||||
|
./loader_example models/Cube/Cube.gltf
|
||||||
|
|
||||||
|
git clone https://github.com/Tencent/rapidjson
|
||||||
|
clang++ -DTINYGLTF_USE_RAPIDJSON -I./rapidjson/include/rapidjson -std=c++11 -g -O0 -o loader_example loader_example.cc
|
||||||
|
|||||||
208
.github/workflows/ci.yml
vendored
@@ -26,13 +26,13 @@ jobs:
|
|||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Configure
|
- name: Configure
|
||||||
run: cmake -B build -DTINYGLTF3_BUILD_TESTS=ON
|
run: cmake -B build -DTINYGLTF_BUILD_LOADER_EXAMPLE=ON -DTINYGLTF_BUILD_TESTS=ON
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cmake --build build
|
run: cmake --build build
|
||||||
|
|
||||||
- name: Run tester_v3_c on a sample model
|
- name: Run loader_example
|
||||||
run: ./build/tester_v3_c models/Cube/Cube.gltf
|
run: ./build/loader_example models/Cube/Cube.gltf
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: ctest --test-dir build --output-on-failure
|
run: ctest --test-dir build --output-on-failure
|
||||||
@@ -53,13 +53,14 @@ jobs:
|
|||||||
|
|
||||||
- name: Configure
|
- name: Configure
|
||||||
run: |
|
run: |
|
||||||
cmake -B build -DCMAKE_C_COMPILER=clang-21 -DTINYGLTF3_BUILD_TESTS=ON
|
cmake -B build -DCMAKE_C_COMPILER=clang-21 -DCMAKE_CXX_COMPILER=clang++-21 -DTINYGLTF_BUILD_LOADER_EXAMPLE=ON -DTINYGLTF_BUILD_TESTS=ON
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cmake --build build
|
run: cmake --build build
|
||||||
|
|
||||||
- name: Run tester_v3_c on a sample model
|
- name: Run loader_example
|
||||||
run: ./build/tester_v3_c models/Cube/Cube.gltf
|
run: |
|
||||||
|
./build/loader_example models/Cube/Cube.gltf
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: ctest --test-dir build --output-on-failure
|
run: ctest --test-dir build --output-on-failure
|
||||||
@@ -73,13 +74,13 @@ jobs:
|
|||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Configure
|
- name: Configure
|
||||||
run: cmake -B build -DTINYGLTF3_BUILD_TESTS=ON
|
run: cmake -B build -DTINYGLTF_BUILD_LOADER_EXAMPLE=ON -DTINYGLTF_BUILD_TESTS=ON
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cmake --build build
|
run: cmake --build build
|
||||||
|
|
||||||
- name: Run tester_v3_c on a sample model
|
- name: Run loader_example
|
||||||
run: ./build/tester_v3_c models/Cube/Cube.gltf
|
run: ./build/loader_example models/Cube/Cube.gltf
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: ctest --test-dir build --output-on-failure
|
run: ctest --test-dir build --output-on-failure
|
||||||
@@ -93,19 +94,18 @@ jobs:
|
|||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Configure
|
- name: Configure
|
||||||
run: cmake -B build -DTINYGLTF3_BUILD_TESTS=ON
|
run: cmake -B build -DTINYGLTF_BUILD_LOADER_EXAMPLE=ON -DTINYGLTF_BUILD_TESTS=ON
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cmake --build build
|
run: cmake --build build
|
||||||
|
|
||||||
- name: Run tester_v3_c on a sample model
|
- name: Run loader_example
|
||||||
run: ./build/tester_v3_c models/Cube/Cube.gltf
|
run: ./build/loader_example models/Cube/Cube.gltf
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: ctest --test-dir build --output-on-failure
|
run: ctest --test-dir build --output-on-failure
|
||||||
|
|
||||||
# Windows x64 - MSVC (VS version agnostic; msvc-dev-cmd locates the
|
# Windows x64 - MSVC
|
||||||
# Visual Studio shipped with the runner image, e.g. VS2022 or VS2026)
|
|
||||||
windows-msvc-x64:
|
windows-msvc-x64:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
name: Windows x64 (MSVC)
|
name: Windows x64 (MSVC)
|
||||||
@@ -113,21 +113,58 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Set up MSVC environment
|
|
||||||
uses: ilammy/msvc-dev-cmd@v1
|
|
||||||
|
|
||||||
- name: Configure
|
- name: Configure
|
||||||
run: cmake -B build -G Ninja -DTINYGLTF3_BUILD_TESTS=ON
|
run: |
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -G "Visual Studio 17 2022" -A x64 -DTINYGLTF_BUILD_LOADER_EXAMPLE=On -DTINYGLTF_BUILD_GL_EXAMPLES=Off -DTINYGLTF_BUILD_VALIDATOR_EXAMPLE=Off -DTINYGLTF_BUILD_TESTS=ON ..
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cmake --build build
|
run: cmake --build build --config Release
|
||||||
|
|
||||||
- name: Run tester_v3_c on a sample model
|
- name: Run loader_example
|
||||||
run: |
|
run: |
|
||||||
.\build\tester_v3_c.exe models\Cube\Cube.gltf
|
.\build\Release\loader_example.exe models\Cube\Cube.gltf
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: ctest --test-dir build --output-on-failure
|
run: ctest --test-dir build -C Release --output-on-failure
|
||||||
|
|
||||||
|
# Windows x86 - MSVC
|
||||||
|
windows-msvc-x86:
|
||||||
|
runs-on: windows-latest
|
||||||
|
name: Windows x86 (MSVC)
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: Configure
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -G "Visual Studio 17 2022" -A Win32 -DTINYGLTF_BUILD_LOADER_EXAMPLE=On -DTINYGLTF_BUILD_GL_EXAMPLES=Off -DTINYGLTF_BUILD_VALIDATOR_EXAMPLE=Off -DTINYGLTF_BUILD_TESTS=ON ..
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build build --config Release
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: ctest --test-dir build -C Release --output-on-failure
|
||||||
|
|
||||||
|
# Windows ARM64 - MSVC (cross-compile)
|
||||||
|
windows-msvc-arm64:
|
||||||
|
runs-on: windows-latest
|
||||||
|
name: Windows ARM64 (MSVC) - Cross-compile
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: Configure
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -G "Visual Studio 17 2022" -A ARM64 -DTINYGLTF_BUILD_LOADER_EXAMPLE=On -DTINYGLTF_BUILD_GL_EXAMPLES=Off -DTINYGLTF_BUILD_VALIDATOR_EXAMPLE=Off ..
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build build --config Release
|
||||||
|
|
||||||
# Windows MinGW - MSYS2
|
# Windows MinGW - MSYS2
|
||||||
windows-mingw-msys2:
|
windows-mingw-msys2:
|
||||||
@@ -152,12 +189,12 @@ jobs:
|
|||||||
|
|
||||||
- name: Build with CMake
|
- name: Build with CMake
|
||||||
run: |
|
run: |
|
||||||
cmake -G"Ninja" -S . -B build -DTINYGLTF3_BUILD_TESTS=ON
|
cmake -G"Ninja" -S . -B build -DTINYGLTF_BUILD_TESTS=ON
|
||||||
cmake --build build
|
cmake --build build
|
||||||
|
|
||||||
- name: Run tester_v3_c on a sample model
|
- name: Run loader_example
|
||||||
run: |
|
run: |
|
||||||
./build/tester_v3_c models/Cube/Cube.gltf
|
./build/loader_example models/Cube/Cube.gltf
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: ctest --test-dir build --output-on-failure
|
run: ctest --test-dir build --output-on-failure
|
||||||
@@ -176,9 +213,51 @@ jobs:
|
|||||||
sudo apt-get install -y build-essential mingw-w64
|
sudo apt-get install -y build-essential mingw-w64
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
|
run: |
|
||||||
|
x86_64-w64-mingw32-g++ -std=c++11 -o loader_example.exe loader_example.cc
|
||||||
|
|
||||||
|
# Special Configuration: No Exceptions
|
||||||
|
linux-noexception:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Linux x64 (GCC) - No Exceptions
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: Build loader_example
|
||||||
|
run: |
|
||||||
|
g++ -DTINYGLTF_NOEXCEPTION -std=c++11 -o loader_example loader_example.cc
|
||||||
|
|
||||||
|
- name: Run loader_example
|
||||||
|
run: |
|
||||||
|
./loader_example models/Cube/Cube.gltf
|
||||||
|
|
||||||
|
- name: Build and run unit tests
|
||||||
run: |
|
run: |
|
||||||
cd tests
|
cd tests
|
||||||
x86_64-w64-mingw32-gcc -I../ -std=c11 -g -O0 -DTINYGLTF3_ENABLE_FS -o tester_v3_c.exe tester_v3_c.c ../tiny_gltf_v3.c
|
g++ -DTINYGLTF_NOEXCEPTION -I../ -std=c++11 -g -O0 -o tester_noexcept tester.cc
|
||||||
|
./tester_noexcept
|
||||||
|
|
||||||
|
# Special Configuration: Header-Only Mode
|
||||||
|
linux-header-only:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Linux x64 (GCC) - Header-Only Mode
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: Build with CMake Header-Only
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
cmake -B build -DTINYGLTF_HEADER_ONLY=ON -DTINYGLTF_BUILD_LOADER_EXAMPLE=ON -DTINYGLTF_BUILD_TESTS=ON
|
||||||
|
cmake --build build
|
||||||
|
|
||||||
|
- name: Run loader_example
|
||||||
|
run: |
|
||||||
|
./build/loader_example models/Cube/Cube.gltf
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: ctest --test-dir build --output-on-failure
|
||||||
|
|
||||||
# v3 C tests through Meson on the primary desktop platforms.
|
# v3 C tests through Meson on the primary desktop platforms.
|
||||||
v3-c-meson:
|
v3-c-meson:
|
||||||
@@ -204,6 +283,76 @@ jobs:
|
|||||||
- name: Run v3 C tests
|
- name: Run v3 C tests
|
||||||
run: meson test -C build-meson --print-errorlogs
|
run: meson test -C build-meson --print-errorlogs
|
||||||
|
|
||||||
|
# Special Configuration: RapidJSON Backend
|
||||||
|
linux-rapidjson:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Linux x64 (GCC) - RapidJSON Backend
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: Clone RapidJSON
|
||||||
|
run: |
|
||||||
|
git clone https://github.com/Tencent/rapidjson
|
||||||
|
|
||||||
|
- name: Configure
|
||||||
|
run: |
|
||||||
|
cmake -B build -DTINYGLTF_USE_RAPIDJSON=ON -DTINYGLTF_BUILD_LOADER_EXAMPLE=ON -DTINYGLTF_BUILD_TESTS=ON -DCMAKE_PREFIX_PATH=$PWD/rapidjson
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build build
|
||||||
|
|
||||||
|
- name: Run loader_example
|
||||||
|
run: |
|
||||||
|
./build/loader_example models/Cube/Cube.gltf
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: ctest --test-dir build --output-on-failure
|
||||||
|
|
||||||
|
# Special Configuration: AddressSanitizer
|
||||||
|
linux-asan:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Linux x64 (Clang) - AddressSanitizer
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: Build loader_example with ASan
|
||||||
|
run: |
|
||||||
|
clang++ -fsanitize=address -std=c++11 -g -O1 -o loader_example loader_example.cc
|
||||||
|
|
||||||
|
- name: Run loader_example
|
||||||
|
run: |
|
||||||
|
./loader_example models/Cube/Cube.gltf
|
||||||
|
|
||||||
|
- name: Build and run unit tests with ASan
|
||||||
|
run: |
|
||||||
|
cd tests
|
||||||
|
clang++ -fsanitize=address -I../ -std=c++11 -g -O1 -o tester tester.cc
|
||||||
|
./tester
|
||||||
|
|
||||||
|
# Special Configuration: UndefinedBehaviorSanitizer
|
||||||
|
linux-ubsan:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Linux x64 (Clang) - UndefinedBehaviorSanitizer
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: Build loader_example with UBSan
|
||||||
|
run: |
|
||||||
|
clang++ -fsanitize=undefined -std=c++11 -g -O1 -o loader_example loader_example.cc
|
||||||
|
|
||||||
|
- name: Run loader_example
|
||||||
|
run: |
|
||||||
|
./loader_example models/Cube/Cube.gltf
|
||||||
|
|
||||||
|
- name: Build and run unit tests with UBSan
|
||||||
|
run: |
|
||||||
|
cd tests
|
||||||
|
clang++ -fsanitize=undefined -I../ -std=c++11 -g -O1 -o tester tester.cc
|
||||||
|
./tester
|
||||||
|
|
||||||
# v3 C runtime: internal security regression tests + ported v1 unit tests.
|
# v3 C runtime: internal security regression tests + ported v1 unit tests.
|
||||||
v3-c-tests:
|
v3-c-tests:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -229,7 +378,7 @@ jobs:
|
|||||||
cd tests
|
cd tests
|
||||||
./tester_v3_c
|
./tester_v3_c
|
||||||
|
|
||||||
- name: Run tester_v3_c_v1port (ported unit tests)
|
- name: Run tester_v3_c_v1port (18 ported unit tests)
|
||||||
run: |
|
run: |
|
||||||
cd tests
|
cd tests
|
||||||
./tester_v3_c_v1port
|
./tester_v3_c_v1port
|
||||||
@@ -333,12 +482,10 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Set up MSVC environment
|
|
||||||
uses: ilammy/msvc-dev-cmd@v1
|
|
||||||
|
|
||||||
- name: Build and run tester_v3_c
|
- name: Build and run tester_v3_c
|
||||||
shell: cmd
|
shell: cmd
|
||||||
run: |
|
run: |
|
||||||
|
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
|
||||||
cd tests
|
cd tests
|
||||||
cl /nologo /W4 /WX /std:c11 /Zi /Od /D_CRT_SECURE_NO_WARNINGS /DTINYGLTF3_ENABLE_FS /I.. tester_v3_c.c ..\tiny_gltf_v3.c /Fe:tester_v3_c.exe
|
cl /nologo /W4 /WX /std:c11 /Zi /Od /D_CRT_SECURE_NO_WARNINGS /DTINYGLTF3_ENABLE_FS /I.. tester_v3_c.c ..\tiny_gltf_v3.c /Fe:tester_v3_c.exe
|
||||||
tester_v3_c.exe
|
tester_v3_c.exe
|
||||||
@@ -346,6 +493,7 @@ jobs:
|
|||||||
- name: Build and run tester_v3_c_v1port
|
- name: Build and run tester_v3_c_v1port
|
||||||
shell: cmd
|
shell: cmd
|
||||||
run: |
|
run: |
|
||||||
|
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
|
||||||
cd tests
|
cd tests
|
||||||
cl /nologo /W4 /WX /std:c11 /Zi /Od /D_CRT_SECURE_NO_WARNINGS /DTINYGLTF3_ENABLE_FS /I.. tester_v3_c_v1port.c ..\tiny_gltf_v3.c /Fe:tester_v3_c_v1port.exe
|
cl /nologo /W4 /WX /std:c11 /Zi /Od /D_CRT_SECURE_NO_WARNINGS /DTINYGLTF3_ENABLE_FS /I.. tester_v3_c_v1port.c ..\tiny_gltf_v3.c /Fe:tester_v3_c_v1port.exe
|
||||||
tester_v3_c_v1port.exe
|
tester_v3_c_v1port.exe
|
||||||
|
|||||||
2
.github/workflows/mingw-w64-msys2.yml
vendored
@@ -42,7 +42,7 @@ jobs:
|
|||||||
-G"Ninja" \
|
-G"Ninja" \
|
||||||
-S . \
|
-S . \
|
||||||
-B build \
|
-B build \
|
||||||
-DTINYGLTF3_BUILD_TESTS=ON
|
-DTINYGLTF_BUILD_TESTS=ON
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
36
.gitignore
vendored
@@ -70,22 +70,28 @@ imgui.ini
|
|||||||
*.app
|
*.app
|
||||||
|
|
||||||
loader_example
|
loader_example
|
||||||
# Compiled test binaries (built by tests/Makefile, CMakeLists.txt, meson.build)
|
tests/tester
|
||||||
tests/tester_v3
|
tests/tester_noexcept
|
||||||
tests/tester_v3_c
|
tests/tester_intensive_customjson
|
||||||
tests/tester_v3_c_cpp
|
tests/issue-97.gltf
|
||||||
tests/tester_v3_c_v1port
|
tests/issue-261.gltf
|
||||||
tests/tester_v3_c_v1port_cpp
|
tests/issue-495-external.gltf
|
||||||
tests/tester_v3_freestanding
|
# Test-generated output files (written by tester.cc during test run)
|
||||||
tests/tester_v3_json_c
|
tests/Cube.gltf
|
||||||
tests/v3/fuzzer/fuzz_gltf_v3
|
tests/Cube.bin
|
||||||
tests/v3/fuzzer/fuzz_gltf_v3_c
|
tests/Cube.glb
|
||||||
|
tests/Cube_BaseColor.png
|
||||||
# Generated by web/Makefile (make / make sample)
|
tests/Cube_MetallicRoughness.png
|
||||||
web/tinygltf_v3.js
|
tests/Cube_with_embedded_images.gltf
|
||||||
web/tinygltf_v3.wasm
|
tests/Cube_with_image_files.gltf
|
||||||
web/Cube.glb
|
tests/tmp.glb
|
||||||
|
tests/ issue-236.gltf
|
||||||
|
tests/ issue-236.bin
|
||||||
|
tests/ 2x2 image has multiple spaces.png
|
||||||
|
|
||||||
# unignore
|
# unignore
|
||||||
!Makefile
|
!Makefile
|
||||||
|
!examples/build-gltf/Makefile
|
||||||
|
!examples/raytrace/cornellbox_suzanne.obj
|
||||||
!tests/Makefile
|
!tests/Makefile
|
||||||
|
!tools/windows/premake5.exe
|
||||||
|
|||||||
55
AGENTS.md
@@ -1,55 +0,0 @@
|
|||||||
# AGENTS.md — tinygltf v3 (C)
|
|
||||||
|
|
||||||
TinyGLTF v3 C (`tiny_gltf_v3.h` + `tiny_gltf_v3.c` + `tinygltf_json_c.h`) is the
|
|
||||||
mainline. Legacy v1/v2/v3-C++ code lives under `attic/` and is not built or
|
|
||||||
tested.
|
|
||||||
|
|
||||||
## Commands
|
|
||||||
|
|
||||||
- Unit tests (C): `make -C tests all && make -C tests run`
|
|
||||||
- CMake: `cmake -B build -DTINYGLTF3_BUILD_TESTS=ON && cmake --build build && ctest --test-dir build --output-on-failure`
|
|
||||||
- Meson: `meson setup build && meson compile -C build && meson test -C build`
|
|
||||||
- WASM/web demo (requires Emscripten SDK, default `~/work/emsdk`):
|
|
||||||
`make -C web && make -C web sample` — then open `http://localhost:8000` via `make -C web serve`
|
|
||||||
- Fuzzers: `make -C tests/v3/fuzzer` (clang + libFuzzer)
|
|
||||||
|
|
||||||
## Pre-push audit checklist
|
|
||||||
|
|
||||||
Run **before every push**. Fix or unstage anything found; the audit must pass
|
|
||||||
clean.
|
|
||||||
|
|
||||||
1. **Working tree sanity**
|
|
||||||
- `git status --short` — no staged build artifacts, no surprise files.
|
|
||||||
- Never `git add -A` / `git add .`: stage only intended paths. The repo
|
|
||||||
root frequently contains untracked scratch files (`Fox.glb`,
|
|
||||||
`benchmark/synthetic_*`, `log*`, `.cache/`, `tests/v3/fuzzer/artifacts|corpus`,
|
|
||||||
stray `*.gltf`/`*.bin` files). Verify `git status` before staging.
|
|
||||||
|
|
||||||
2. **Secret scan**
|
|
||||||
- `gitleaks detect --source . --no-banner -r /tmp/gitleaks.json`
|
|
||||||
- `~/local/bin/trufflehog git file://$PWD --no-update --only-verified`
|
|
||||||
- Both must report 0 real secrets. Known allowed finding: `B3G_LEFT_ARROW`
|
|
||||||
generic-api-key hits in `attic/examples/common/OpenGLWindow/` are false
|
|
||||||
positives (keyboard key constants).
|
|
||||||
|
|
||||||
3. **No build artifacts or unwanted large binaries**
|
|
||||||
- `git ls-files -z | xargs -0 du -b | sort -rn | head -30` — review the top.
|
|
||||||
- Rule of thumb: nothing over ~1 MB unless it is a tracked, intentional
|
|
||||||
asset (e.g. `attic/tools/windows/premake5.exe`, `models/Cube/*.png`).
|
|
||||||
- Watch for: compiled executables, `*.wasm`/`*.exr`/`*.log`/`*.o`/`*.obj`,
|
|
||||||
generated `output.*`/`cloth*`/`sim*.bin`/`out_*.exr` files, and large
|
|
||||||
`.gltf`/`.glb` files. Small test/regression fixture `.gltf` files
|
|
||||||
(e.g. under `tests/`, `models/regression/`, `tests/v3/security/`) are OK.
|
|
||||||
- `web/tinygltf_v3.js`, `web/tinygltf_v3.wasm`, `web/Cube.glb` are
|
|
||||||
generated by `make -C web` and must stay gitignored (never commit them).
|
|
||||||
|
|
||||||
4. **History is lean**
|
|
||||||
- If an unwanted file was added in an unpushed commit, rewrite it
|
|
||||||
(`git rebase -i origin/<branch>`, `git rm` + `--amend`) so the blob never
|
|
||||||
reaches the remote, then `git gc --prune=now` locally.
|
|
||||||
- Push only intended branches (`git push origin <branch>` — never `--all`
|
|
||||||
or `--force` unless explicitly asked).
|
|
||||||
|
|
||||||
5. **Final smoke check**
|
|
||||||
- `make -C tests run` passes (all 4 testers).
|
|
||||||
- If touched: `cmake`/`meson` builds and `make -C web` still succeed.
|
|
||||||
129
CMakeLists.txt
@@ -1,20 +1,45 @@
|
|||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.6)
|
||||||
|
|
||||||
project(tinygltf_v3 C)
|
project(tinygltf)
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
|
include(CMakePackageConfigHelpers)
|
||||||
|
|
||||||
set(CMAKE_C_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
set(CMAKE_C_STANDARD_REQUIRED On)
|
set(CMAKE_CXX_STANDARD_REQUIRED On)
|
||||||
set(CMAKE_C_EXTENSIONS Off)
|
set(CMAKE_CXX_EXTENSIONS Off)
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
option(TINYGLTF3_BUILD_TESTS "Build and run tinygltf v3 C unit tests" ON)
|
option(TINYGLTF_BUILD_LOADER_EXAMPLE "Build loader_example(load glTF and dump infos)" ON)
|
||||||
option(TINYGLTF3_INSTALL "Install tinygltf v3 files during install step" ON)
|
option(TINYGLTF_BUILD_GL_EXAMPLES "Build GL exampels(requires glfw, OpenGL, etc)" OFF)
|
||||||
|
option(TINYGLTF_BUILD_VALIDATOR_EXAMPLE "Build validator exampe" OFF)
|
||||||
|
option(TINYGLTF_BUILD_BUILDER_EXAMPLE "Build glTF builder example" OFF)
|
||||||
|
option(TINYGLTF_BUILD_TESTS "Build unit tests" OFF)
|
||||||
|
option(TINYGLTF_HEADER_ONLY "On: header-only mode. Off: create tinygltf library(No TINYGLTF_IMPLEMENTATION required in your project)" OFF)
|
||||||
|
option(TINYGLTF_INSTALL "Install tinygltf files during install step. Usually set to OFF if you include tinygltf through add_subdirectory()" ON)
|
||||||
|
option(TINYGLTF_INSTALL_VENDOR "Install vendored nlohmann/json and nothings/stb headers" ON)
|
||||||
|
option(TINYGLTF_USE_CUSTOM_JSON "Use the built-in fast JSON parser (tinygltf_json.h) instead of nlohmann/json" OFF)
|
||||||
|
|
||||||
set(TINYGLTF3_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
|
if (TINYGLTF_BUILD_LOADER_EXAMPLE)
|
||||||
|
add_executable(loader_example
|
||||||
|
loader_example.cc
|
||||||
|
)
|
||||||
|
endif (TINYGLTF_BUILD_LOADER_EXAMPLE)
|
||||||
|
|
||||||
if (TINYGLTF3_BUILD_TESTS)
|
if (TINYGLTF_BUILD_GL_EXAMPLES)
|
||||||
|
add_subdirectory( examples/gltfutil )
|
||||||
|
add_subdirectory( examples/glview )
|
||||||
|
endif (TINYGLTF_BUILD_GL_EXAMPLES)
|
||||||
|
|
||||||
|
if (TINYGLTF_BUILD_VALIDATOR_EXAMPLE)
|
||||||
|
add_subdirectory( examples/validator )
|
||||||
|
endif (TINYGLTF_BUILD_VALIDATOR_EXAMPLE)
|
||||||
|
|
||||||
|
if (TINYGLTF_BUILD_BUILDER_EXAMPLE)
|
||||||
|
add_subdirectory ( examples/build-gltf )
|
||||||
|
endif (TINYGLTF_BUILD_BUILDER_EXAMPLE)
|
||||||
|
|
||||||
|
if (TINYGLTF_BUILD_TESTS)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
function(add_tinygltf_v3_c_test target)
|
function(add_tinygltf_v3_c_test target)
|
||||||
@@ -31,6 +56,31 @@ if (TINYGLTF3_BUILD_TESTS)
|
|||||||
add_test(NAME ${target} COMMAND ${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests)
|
add_test(NAME ${target} COMMAND ${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
add_executable(tester tests/tester.cc)
|
||||||
|
target_include_directories(tester PRIVATE
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/tests
|
||||||
|
)
|
||||||
|
add_test(NAME tester COMMAND tester WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests)
|
||||||
|
|
||||||
|
# Build and run tests with the custom JSON backend enabled to catch regressions
|
||||||
|
add_executable(tester_customjson tests/tester.cc)
|
||||||
|
target_include_directories(tester_customjson PRIVATE
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/tests
|
||||||
|
)
|
||||||
|
target_compile_definitions(tester_customjson PRIVATE TINYGLTF_USE_CUSTOM_JSON)
|
||||||
|
add_test(NAME tester_customjson COMMAND tester_customjson WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests)
|
||||||
|
|
||||||
|
# Intensive parser tests for the custom JSON backend
|
||||||
|
add_executable(tester_intensive_customjson tests/tester_intensive_customjson.cc)
|
||||||
|
target_include_directories(tester_intensive_customjson PRIVATE
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/tests
|
||||||
|
)
|
||||||
|
target_compile_definitions(tester_intensive_customjson PRIVATE TINYGLTF_USE_CUSTOM_JSON)
|
||||||
|
add_test(NAME tester_intensive_customjson COMMAND tester_intensive_customjson WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests)
|
||||||
|
|
||||||
add_tinygltf_v3_c_test(tester_v3_c tests/tester_v3_c.c tiny_gltf_v3.c)
|
add_tinygltf_v3_c_test(tester_v3_c tests/tester_v3_c.c tiny_gltf_v3.c)
|
||||||
target_compile_definitions(tester_v3_c PRIVATE TINYGLTF3_ENABLE_FS)
|
target_compile_definitions(tester_v3_c PRIVATE TINYGLTF3_ENABLE_FS)
|
||||||
|
|
||||||
@@ -43,14 +93,65 @@ if (TINYGLTF3_BUILD_TESTS)
|
|||||||
if (CMAKE_C_COMPILER_ID MATCHES "Clang|GNU")
|
if (CMAKE_C_COMPILER_ID MATCHES "Clang|GNU")
|
||||||
target_compile_options(tester_v3_freestanding PRIVATE -ffreestanding)
|
target_compile_options(tester_v3_freestanding PRIVATE -ffreestanding)
|
||||||
endif()
|
endif()
|
||||||
|
endif (TINYGLTF_BUILD_TESTS)
|
||||||
|
|
||||||
|
#
|
||||||
|
# for add_subdirectory and standalone build
|
||||||
|
#
|
||||||
|
if (TINYGLTF_HEADER_ONLY)
|
||||||
|
add_library(tinygltf INTERFACE)
|
||||||
|
|
||||||
|
target_include_directories(tinygltf
|
||||||
|
INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
||||||
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||||
|
)
|
||||||
|
|
||||||
|
else (TINYGLTF_HEADER_ONLY)
|
||||||
|
add_library(tinygltf)
|
||||||
|
target_sources(tinygltf PRIVATE
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/tiny_gltf.cc)
|
||||||
|
target_include_directories(tinygltf
|
||||||
|
INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
||||||
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||||
|
)
|
||||||
|
endif (TINYGLTF_HEADER_ONLY)
|
||||||
|
|
||||||
|
if (TINYGLTF_USE_CUSTOM_JSON)
|
||||||
|
if (TINYGLTF_HEADER_ONLY)
|
||||||
|
target_compile_definitions(tinygltf INTERFACE TINYGLTF_USE_CUSTOM_JSON)
|
||||||
|
else ()
|
||||||
|
target_compile_definitions(tinygltf PUBLIC TINYGLTF_USE_CUSTOM_JSON)
|
||||||
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (TINYGLTF3_INSTALL)
|
if (TINYGLTF_INSTALL)
|
||||||
install(FILES
|
install(TARGETS tinygltf EXPORT tinygltfTargets)
|
||||||
|
install(EXPORT tinygltfTargets NAMESPACE tinygltf:: FILE TinyGLTFTargets.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/tinygltf)
|
||||||
|
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/TinyGLTFConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/TinyGLTFConfig.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
|
||||||
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/TinyGLTFConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/tinygltf)
|
||||||
|
# Do not install .lib even if !TINYGLTF_HEADER_ONLY
|
||||||
|
|
||||||
|
INSTALL ( FILES
|
||||||
|
tiny_gltf.h
|
||||||
tiny_gltf_v3.h
|
tiny_gltf_v3.h
|
||||||
tiny_gltf_v3.c
|
tiny_gltf_v3.c
|
||||||
|
tinygltf_json.h
|
||||||
tinygltf_json_c.h
|
tinygltf_json_c.h
|
||||||
|
${TINYGLTF_EXTRA_SOUECES}
|
||||||
DESTINATION
|
DESTINATION
|
||||||
${TINYGLTF3_INSTALL_DIR}
|
include
|
||||||
)
|
)
|
||||||
endif ()
|
|
||||||
|
if(TINYGLTF_INSTALL_VENDOR)
|
||||||
|
INSTALL ( FILES
|
||||||
|
json.hpp
|
||||||
|
stb_image.h
|
||||||
|
stb_image_write.h
|
||||||
|
DESTINATION
|
||||||
|
include
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endif(TINYGLTF_INSTALL)
|
||||||
|
|||||||
21
Makefile
@@ -1,14 +1,13 @@
|
|||||||
# tinygltf v3 (C) — convenience build entry point.
|
|
||||||
#
|
# Use this for strict compilation check(will work on clang 3.8+)
|
||||||
# make — build all v3 C unit testers
|
#EXTRA_CXXFLAGS := -fsanitize=address -Wall -Werror -Weverything -Wno-c++11-long-long -Wno-c++98-compat
|
||||||
# make test — build and run all v3 C unit testers
|
|
||||||
# make clean — remove test binaries
|
# With draco
|
||||||
|
# EXTRA_CXXFLAGS := -I../draco/src/ -I../draco/build -DTINYGLTF_ENABLE_DRACO -L../draco/build
|
||||||
|
# EXTRA_LINKFLAGS := -L../draco/build/ -ldracodec -ldraco
|
||||||
|
|
||||||
all:
|
all:
|
||||||
$(MAKE) -C tests all
|
clang++ $(EXTRA_CXXFLAGS) -std=c++11 -g -O0 -o loader_example loader_example.cc $(EXTRA_LINKFLAGS)
|
||||||
|
|
||||||
test: all
|
lint:
|
||||||
$(MAKE) -C tests run
|
deps/cpplint.py tiny_gltf.h
|
||||||
|
|
||||||
clean:
|
|
||||||
$(MAKE) -C tests clean
|
|
||||||
|
|||||||
305
README.md
@@ -1,18 +1,27 @@
|
|||||||
# tinygltf v3 — C glTF 2.0 loader/saver
|
# Header only C++ tiny glTF library(loader/saver).
|
||||||
|
|
||||||
`TinyGLTF v3` is a C11-first implementation of a glTF 2.0
|
`TinyGLTF` is a header only C++ glTF 2.0 https://github.com/KhronosGroup/glTF library.
|
||||||
https://github.com/KhronosGroup/glTF loader and writer.
|
|
||||||
|
|
||||||
- **Pure C POD API** (`tiny_gltf_v3.h` + `tiny_gltf_v3.c` + `tinygltf_json_c.h`) — no STL, no RTTI, no exceptions required; easy to bind to other languages.
|
## TinyGLTF v3 (new major release)
|
||||||
|
|
||||||
|
**`tiny_gltf_v3.h`** is the new major version of TinyGLTF.
|
||||||
|
The new C implementation (`tiny_gltf_v3.c` + `tinygltf_json_c.h`) is currently **experimental**.
|
||||||
|
|
||||||
|
### What's new in v3
|
||||||
|
|
||||||
|
v3 is a ground-up rewrite with a C-centric, low-overhead design:
|
||||||
|
|
||||||
|
- **Pure C POD structs** — no STL containers in the public API; easy to bind to other languages.
|
||||||
- **Arena-based memory management** — all parse-time allocations come from a single arena; a single `tg3_model_free()` frees everything.
|
- **Arena-based memory management** — all parse-time allocations come from a single arena; a single `tg3_model_free()` frees everything.
|
||||||
- **Structured error reporting** — `tg3_error_stack` provides machine-readable errors with severity levels and source locations.
|
- **Structured error reporting** — `tg3_error_stack` provides machine-readable errors with severity levels and source locations.
|
||||||
- **Custom JSON backend** — `tinygltf_json_c.h` is a locale-independent pure-C JSON parser/serializer used by the v3 runtime.
|
- **Custom JSON backend** — backed by `tinygltf_json_c.h`, a locale-independent pure-C JSON parser/serializer used by the v3 runtime.
|
||||||
- **Streaming callbacks** — opt-in streaming parse/write via user-supplied callbacks.
|
- **Streaming callbacks** — opt-in streaming parse/write via user-supplied callbacks.
|
||||||
|
- **No RTTI, no exceptions required** — suitable for embedded and game-engine use.
|
||||||
- **Opt-in filesystem and image I/O** — `TINYGLTF3_ENABLE_FS` / `TINYGLTF3_ENABLE_STB_IMAGE` are off by default; you control when and how assets are loaded.
|
- **Opt-in filesystem and image I/O** — `TINYGLTF3_ENABLE_FS` / `TINYGLTF3_ENABLE_STB_IMAGE` are off by default; you control when and how assets are loaded.
|
||||||
- **C++20 coroutine facade** (optional, auto-detected). C17/C++17 default.
|
- **C++20 coroutine facade** (optional, auto-detected). C17/C++17 default.
|
||||||
- **Hardened against untrusted input** — URI sanitization, post-parse index-bounds validation (default-on, opt-out via `tg3_parse_options.validate_indices = 0`), strict numeric range checks; exercised by a libFuzzer harness. See the `Security Considerations` block at the top of `tiny_gltf_v3.h`.
|
- **Hardened against untrusted input** — URI sanitization, post-parse index-bounds validation (default-on, opt-out via `tg3_parse_options.validate_indices = 0`), strict numeric range checks; exercised by a libFuzzer harness and by a cross-version verifier that compares parsed output against the v1 C++ reference loader. See the `Security Considerations` block at the top of `tiny_gltf_v3.h`.
|
||||||
|
|
||||||
## Quick start
|
### Quick start (v3)
|
||||||
|
|
||||||
Copy `tiny_gltf_v3.h`, `tiny_gltf_v3.c`, and `tinygltf_json_c.h` to your project.
|
Copy `tiny_gltf_v3.h`, `tiny_gltf_v3.c`, and `tinygltf_json_c.h` to your project.
|
||||||
Compile `tiny_gltf_v3.c` as C11 or newer. Define `TINYGLTF3_ENABLE_FS` when
|
Compile `tiny_gltf_v3.c` as C11 or newer. Define `TINYGLTF3_ENABLE_FS` when
|
||||||
@@ -46,60 +55,262 @@ tg3_model_free(&model);
|
|||||||
tg3_error_stack_free(&errors);
|
tg3_error_stack_free(&errors);
|
||||||
```
|
```
|
||||||
|
|
||||||
## Testing & verification
|
### Testing & verification
|
||||||
|
|
||||||
The v3 C runtime ships with three layers of automated coverage:
|
The v3 C runtime ships with three layers of automated coverage:
|
||||||
|
|
||||||
- **`tests/tester_v3_c.c`** — internal unit checks plus security regression tests (path traversal, negative `byteStride`, OOB indices, error-message lifetime, …). Build via `make` in `tests/`; run `./tester_v3_c` for the internal suite or `./tester_v3_c <file.gltf|file.glb>` to parse a single asset.
|
- **`tests/tester_v3_c.c`** — internal unit checks plus security regression tests (path traversal, negative `byteStride`, OOB indices, error-message lifetime, …). Build via `make` in `tests/`; run `./tester_v3_c` for the internal suite or `./tester_v3_c <file.gltf|file.glb>` to parse a single asset.
|
||||||
- **`tests/tester_v3_c_v1port.c`** — v3 C port of the legacy unit tests, keeping behavioral parity with the old C++ API.
|
- **`test_runner.py`** — a cross-version verifier that runs the v1 C++ reference loader (`loader_example`) and the v3 C tester against every model in `glTF-Sample-Models/2.0`, then diffs a structured DIGEST block (buffer FNV64 hashes, accessor/bufferView fields, primitive attribute maps, node TRS, material PBR factors, skin/animation/scene topology, …). v1 is the ground truth.
|
||||||
- **`tests/tester_v3_json_c.c`** and **`tests/tester_v3_freestanding.c`** — JSON backend and freestanding (no libc) checks.
|
|
||||||
- **`test_runner.py`** — model verifier that runs `tests/tester_v3_c` against every model in `glTF-Sample-Models/2.0` and validates the structured COUNTS/DIGEST output.
|
|
||||||
- **`tests/v3/fuzzer/`** — libFuzzer harness with ASan + UBSan (`make run` builds and runs `fuzz_gltf_v3_c`). Crafted regression inputs live in `tests/v3/security/` and are seeded into `tests/v3/fuzzer/corpus/`.
|
- **`tests/v3/fuzzer/`** — libFuzzer harness with ASan + UBSan (`make run` builds and runs `fuzz_gltf_v3_c`). Crafted regression inputs live in `tests/v3/security/` and are seeded into `tests/v3/fuzzer/corpus/`.
|
||||||
|
|
||||||
### Building
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Plain make (gcc/clang)
|
|
||||||
$ make -C tests && make -C tests run
|
|
||||||
|
|
||||||
# CMake
|
|
||||||
$ cmake -B build && cmake --build build && ctest --test-dir build --output-on-failure
|
|
||||||
|
|
||||||
# Meson
|
|
||||||
$ meson setup build && meson compile -C build && meson test -C build
|
|
||||||
|
|
||||||
# WebAssembly (requires an Emscripten SDK, defaults to ~/work/emsdk)
|
|
||||||
$ make -C web && make -C web sample
|
|
||||||
```
|
|
||||||
|
|
||||||
## Web/WASM demo
|
|
||||||
|
|
||||||
[`web/`](web/) contains a browser demo that compiles the v3 C runtime with
|
|
||||||
Emscripten and renders glTF/GLB files with three.js (file picker + drag &
|
|
||||||
drop). See [`web/README.md`](web/README.md) for build instructions.
|
|
||||||
|
|
||||||
## Legacy v1/v2 (C++)
|
|
||||||
|
|
||||||
The previous C++ implementation (`tiny_gltf.h`, `tiny_gltf.cc`,
|
|
||||||
`tinygltf_json.h`, `json.hpp`, `loader_example.cc`, the C++ examples and
|
|
||||||
tests) is deprecated and has been moved to [`attic/`](attic/) for reference.
|
|
||||||
It is no longer built, tested, or installed. TinyGLTF v3 C is the mainline.
|
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
TinyGLTF v3 (`tiny_gltf_v3.h` + `tiny_gltf_v3.c`) is the mainline release.
|
> ⚠️ **v2 deprecation notice:** `tiny_gltf.h` (v2) remains fully functional and is still supported,
|
||||||
API additions and behavior changes go through the usual review process.
|
> but it is now in **maintenance mode only** — no new features will be added.
|
||||||
|
> v2 will be **sunset after mid-2026**. `tiny_gltf_v3.h` is the intended successor, but the new C v3 runtime is still **experimental**.
|
||||||
|
|
||||||
|
TinyGLTF v3's C runtime (`tiny_gltf_v3.h` + `tiny_gltf_v3.c`) is available for evaluation and early adoption,
|
||||||
|
but its API/behavior may still change while the implementation matures.
|
||||||
|
|
||||||
|
Currently TinyGLTF v2 is stable and in maintenance mode. No drastic changes and feature additions planned.
|
||||||
|
- v2.9.0 Various fixes and improvements. Filesystem callback API change.
|
||||||
|
- v2.8.0 Add URICallbacks for custom URI handling in Buffer and Image. PR#397
|
||||||
|
- v2.7.0 Change WriteImageDataFunction user callback function signature. PR#393
|
||||||
|
- v2.6.0 Support serializing sparse accessor(Thanks to @fynv).
|
||||||
|
- v2.5.0 Add SetPreserveImageChannels() option to load image data as is.
|
||||||
|
- v2.4.0 Experimental RapidJSON support. Experimental C++14 support(C++14 may give better performance)
|
||||||
|
- v2.3.0 Modified Material representation according to glTF 2.0 schema(and introduced TextureInfo class)
|
||||||
|
- v2.2.0 release(Support loading 16bit PNG. Sparse accessor support)
|
||||||
|
- v2.1.0 release(Draco decoding support)
|
||||||
|
- v2.0.0 release(22 Aug, 2018)!
|
||||||
|
|
||||||
|
### Branches
|
||||||
|
|
||||||
|
* `sajson` : Use sajson to parse JSON. Parsing only but faster compile time(2x reduction compared to json.hpp and RapidJson), but not well maintained.
|
||||||
|
|
||||||
## Builds
|
## Builds
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
Probably mostly feature-complete. Last missing feature is Draco encoding: https://github.com/syoyo/tinygltf/issues/207
|
||||||
|
|
||||||
|
* Written in portable C++. C++-11 with STL dependency only.
|
||||||
|
* [x] macOS + clang(LLVM)
|
||||||
|
* [x] iOS + clang
|
||||||
|
* [x] Linux + gcc/clang
|
||||||
|
* [x] Windows + MinGW
|
||||||
|
* [x] Windows + Visual Studio 2015 Update 3 or later.
|
||||||
|
* Visual Studio 2013 is not supported since they have limited C++11 support and failed to compile `json.hpp`.
|
||||||
|
* [x] Android NDK
|
||||||
|
* [x] Android + CrystaX(NDK drop-in replacement) GCC
|
||||||
|
* [x] Web using Emscripten(LLVM)
|
||||||
|
* Moderate parsing time and memory consumption.
|
||||||
|
* glTF specification v2.0.0
|
||||||
|
* [x] ASCII glTF
|
||||||
|
* [x] Load
|
||||||
|
* [x] Save
|
||||||
|
* [x] Binary glTF(GLB)
|
||||||
|
* [x] Load
|
||||||
|
* [x] Save(.bin embedded .glb)
|
||||||
|
* Buffers
|
||||||
|
* [x] Parse BASE64 encoded embedded buffer data(DataURI).
|
||||||
|
* [x] Load `.bin` file.
|
||||||
|
* Image(Using stb_image)
|
||||||
|
* [x] Parse BASE64 encoded embedded image data(DataURI).
|
||||||
|
* [x] Load external image file.
|
||||||
|
* [x] Load PNG(8bit and 16bit)
|
||||||
|
* [x] Load JPEG(8bit only)
|
||||||
|
* [x] Load BMP
|
||||||
|
* [x] Load GIF
|
||||||
|
* [x] Custom Image decoder callback(e.g. for decoding OpenEXR image)
|
||||||
|
* Morph traget
|
||||||
|
* [x] Sparse accessor
|
||||||
|
* Load glTF from memory
|
||||||
|
* Custom callback handler
|
||||||
|
* [x] Image load
|
||||||
|
* [x] Image save
|
||||||
|
* Extensions
|
||||||
|
* [x] Draco mesh decoding
|
||||||
|
* [ ] Draco mesh encoding
|
||||||
|
|
||||||
|
## Note on extension property
|
||||||
|
|
||||||
|
In extension(`ExtensionMap`), JSON number value is parsed as int or float(number) and stored as `tinygltf::Value` object. If you want a floating point value from `tinygltf::Value`, use `GetNumberAsDouble()` method.
|
||||||
|
|
||||||
|
`IsNumber()` returns true if the underlying value is an int value or a floating point value.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
* [glview](examples/glview) : Simple glTF geometry viewer.
|
||||||
|
* [validator](examples/validator) : Simple glTF validator with JSON schema.
|
||||||
|
* [basic](examples/basic) : Basic glTF viewer with texturing support.
|
||||||
|
* [build-gltf](examples/build-gltf) : Build simple glTF scene from a scratch.
|
||||||
|
|
||||||
|
### WASI/WASM build
|
||||||
|
|
||||||
|
Users who want to run TinyGLTF securely and safely(e.g. need to handle malcious glTF file to serve online glTF conver),
|
||||||
|
I recommend to build TinyGLTF for WASM target.
|
||||||
|
WASI build example is located in [wasm](wasm) .
|
||||||
|
|
||||||
|
|
||||||
|
## TODOs
|
||||||
|
|
||||||
|
* [ ] Robust URI decoding/encoding. https://github.com/syoyo/tinygltf/issues/369
|
||||||
|
* [ ] Mesh Compression/decompression(Open3DGC, etc)
|
||||||
|
* [x] Load Draco compressed mesh
|
||||||
|
* [ ] Save Draco compressed mesh
|
||||||
|
* [ ] Open3DGC?
|
||||||
|
* [x] Support `extensions` and `extras` property
|
||||||
|
* [ ] HDR image?
|
||||||
|
* [ ] OpenEXR extension through TinyEXR.
|
||||||
|
* [ ] 16bit PNG support in Serialization
|
||||||
|
* [ ] Write example and tests for `animation` and `skin`
|
||||||
|
|
||||||
|
### Optional
|
||||||
|
|
||||||
|
* [ ] Write C++ code generator which emits C++ code from JSON schema for robust parsing?
|
||||||
|
|
||||||
## Licenses
|
## Licenses
|
||||||
|
|
||||||
TinyGLTF is licensed under MIT license. See [LICENSE](LICENSE).
|
TinyGLTF is licensed under MIT license.
|
||||||
|
|
||||||
TinyGLTF v3 uses the following third party code:
|
TinyGLTF uses the following third party libraries.
|
||||||
|
|
||||||
* fast_float (JSON number parsing, in `tinygltf_json_c.h`): Copyright (c) 2021 The fast_float authors. Apache License 2.0 / MIT / Boost 1.0.
|
* json.hpp : Copyright (c) 2013-2017 Niels Lohmann. MIT license.
|
||||||
* dragonbox (JSON number serialization, in `tinygltf_json_c.h`): Copyright 2020-2024 Junekey Jeon. Apache 2.0 with LLVM exceptions / Boost 1.0.
|
* base64 : Copyright (C) 2004-2008 René Nyffenegger
|
||||||
* stb_image.h (optional, `TINYGLTF3_ENABLE_STB_IMAGE`) : public domain image loader - [Github link](https://github.com/nothings/stb/blob/master/stb_image.h)
|
* stb_image.h : v2.08 - public domain image loader - [Github link](https://github.com/nothings/stb/blob/master/stb_image.h)
|
||||||
|
* stb_image_write.h : v1.09 - public domain image writer - [Github link](https://github.com/nothings/stb/blob/master/stb_image_write.h)
|
||||||
|
|
||||||
|
|
||||||
|
## Build and example
|
||||||
|
|
||||||
|
Copy `stb_image.h`, `stb_image_write.h`, `json.hpp` and `tiny_gltf.h` to your project.
|
||||||
|
|
||||||
|
### Loading glTF 2.0 model
|
||||||
|
|
||||||
|
```c++
|
||||||
|
// Define these only in *one* .cc file.
|
||||||
|
#define TINYGLTF_IMPLEMENTATION
|
||||||
|
#define STB_IMAGE_IMPLEMENTATION
|
||||||
|
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
||||||
|
// #define TINYGLTF_NOEXCEPTION // optional. disable exception handling.
|
||||||
|
#include "tiny_gltf.h"
|
||||||
|
|
||||||
|
using namespace tinygltf;
|
||||||
|
|
||||||
|
Model model;
|
||||||
|
TinyGLTF loader;
|
||||||
|
std::string err;
|
||||||
|
std::string warn;
|
||||||
|
std::string filename = "input.gltf";
|
||||||
|
|
||||||
|
bool ret = loader.LoadASCIIFromFile(&model, &err, &warn, filename);
|
||||||
|
//bool ret = loader.LoadBinaryFromFile(&model, &err, &warn, filename); // for binary glTF(.glb)
|
||||||
|
|
||||||
|
if (!warn.empty()) {
|
||||||
|
printf("Warn: %s\n", warn.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!err.empty()) {
|
||||||
|
printf("Err: %s\n", err.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ret) {
|
||||||
|
printf("Failed to parse glTF: %s\n", filename.c_str());
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Loader options
|
||||||
|
|
||||||
|
* `TinyGLTF::SetPreserveimageChannels(bool onoff)`. `true` to preserve image channels as stored in image file for loaded image. `false` by default for backward compatibility(image channels are widen to `RGBA` 4 channels). Effective only when using builtin image loader(STB image loader).
|
||||||
|
|
||||||
|
## Compile options
|
||||||
|
|
||||||
|
* `TINYGLTF_NOEXCEPTION` : Disable C++ exception in JSON parsing. You can use `-fno-exceptions` or by defining the symbol `JSON_NOEXCEPTION` and `TINYGLTF_NOEXCEPTION` to fully remove C++ exception codes when compiling TinyGLTF.
|
||||||
|
* `TINYGLTF_NO_STB_IMAGE` : Do not load images with stb_image. Instead use `TinyGLTF::SetImageLoader(LoadimageDataFunction LoadImageData, void *user_data)` to set a callback for loading images.
|
||||||
|
* `TINYGLTF_NO_STB_IMAGE_WRITE` : Do not write images with stb_image_write. Instead use `TinyGLTF::SetImageWriter(WriteimageDataFunction WriteImageData, void *user_data)` to set a callback for writing images.
|
||||||
|
* `TINYGLTF_NO_EXTERNAL_IMAGE` : Do not try to load external image file. This option would be helpful if you do not want to load image files during glTF parsing.
|
||||||
|
* `TINYGLTF_ANDROID_LOAD_FROM_ASSETS`: Load all files from packaged app assets instead of the regular file system. **Note:** You must pass a valid asset manager from your android app to `tinygltf::asset_manager` beforehand.
|
||||||
|
* `TINYGLTF_ENABLE_DRACO`: Enable Draco compression. User must provide include path and link correspnding libraries in your project file.
|
||||||
|
* `TINYGLTF_NO_INCLUDE_JSON `: Disable including `json.hpp` from within `tiny_gltf.h` because it has been already included before or you want to include it using custom path before including `tiny_gltf.h`.
|
||||||
|
* `TINYGLTF_NO_INCLUDE_RAPIDJSON `: Disable including RapidJson's header files from within `tiny_gltf.h` because it has been already included before or you want to include it using custom path before including `tiny_gltf.h`.
|
||||||
|
* `TINYGLTF_NO_INCLUDE_STB_IMAGE `: Disable including `stb_image.h` from within `tiny_gltf.h` because it has been already included before or you want to include it using custom path before including `tiny_gltf.h`.
|
||||||
|
* `TINYGLTF_NO_INCLUDE_STB_IMAGE_WRITE `: Disable including `stb_image_write.h` from within `tiny_gltf.h` because it has been already included before or you want to include it using custom path before including `tiny_gltf.h`.
|
||||||
|
* `TINYGLTF_USE_RAPIDJSON` : Use RapidJSON as a JSON parser/serializer. RapidJSON files are not included in TinyGLTF repo. Please set an include path to RapidJSON if you enable this feature.
|
||||||
|
|
||||||
|
|
||||||
|
## CMake options
|
||||||
|
|
||||||
|
You can add tinygltf using `add_subdirectory` feature.
|
||||||
|
If you add tinygltf to your project using `add_subdirectory`, it would be better to set `TINYGLTF_HEADER_ONLY` on(just add an include path to tinygltf) and `TINYGLTF_INSTALL` off(Which does not install tinygltf files).
|
||||||
|
|
||||||
|
```
|
||||||
|
// Your project's CMakeLists.txt
|
||||||
|
...
|
||||||
|
|
||||||
|
set(TINYGLTF_HEADER_ONLY ON CACHE INTERNAL "" FORCE)
|
||||||
|
set(TINYGLTF_INSTALL OFF CACHE INTERNAL "" FORCE)
|
||||||
|
add_subdirectory(/path/to/tinygltf)
|
||||||
|
```
|
||||||
|
|
||||||
|
NOTE: Using tinygltf as a submodule doesn't automatically add the headers to your include path (as standard for many libraries). To get this functionality, add the following to the CMakeLists.txt file from above:
|
||||||
|
|
||||||
|
```
|
||||||
|
target_include_directories(${PROJECT_NAME} PRIVATE "/path/to/tinygltf")
|
||||||
|
```
|
||||||
|
|
||||||
|
### Saving gltTF 2.0 model
|
||||||
|
|
||||||
|
* Buffers.
|
||||||
|
* [x] To file
|
||||||
|
* [x] Embedded
|
||||||
|
* [ ] Draco compressed?
|
||||||
|
* [x] Images
|
||||||
|
* [x] To file
|
||||||
|
* [x] Embedded
|
||||||
|
* Binary(.glb)
|
||||||
|
* [x] .bin embedded single .glb
|
||||||
|
* [ ] External .bin
|
||||||
|
|
||||||
|
## Running tests.
|
||||||
|
|
||||||
|
### glTF parsing test
|
||||||
|
|
||||||
|
#### Setup
|
||||||
|
|
||||||
|
Python required.
|
||||||
|
Git clone https://github.com/KhronosGroup/glTF-Sample-Models to your local dir.
|
||||||
|
|
||||||
|
#### Run parsing test
|
||||||
|
|
||||||
|
After building `loader_example`, edit `test_runner.py`, then,
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ python test_runner.py
|
||||||
|
```
|
||||||
|
|
||||||
|
### Unit tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ cd tests
|
||||||
|
$ make
|
||||||
|
$ ./tester
|
||||||
|
$ ./tester_noexcept
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fuzzing tests
|
||||||
|
|
||||||
|
See `tests/fuzzer` for details.
|
||||||
|
|
||||||
|
After running fuzzer on Ryzen9 3950X a week, at least `LoadASCIIFromString` looks safe except for out-of-memory error in Fuzzer.
|
||||||
|
We may be better to introduce bounded memory size checking when parsing glTF data.
|
||||||
|
|
||||||
|
## Third party licenses
|
||||||
|
|
||||||
|
* json.hpp : Licensed under the MIT License <http://opensource.org/licenses/MIT>. Copyright (c) 2013-2017 Niels Lohmann <http://nlohmann.me>.
|
||||||
|
* stb_image : Public domain.
|
||||||
|
* catch : Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved. Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* RapidJSON : Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. http://rapidjson.org/
|
||||||
|
* dlib(uridecode, uriencode) : Copyright (C) 2003 Davis E. King Boost Software License 1.0. http://dlib.net/dlib/server/server_http.cpp.html
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
|
|
||||||
# Use this for strict compilation check(will work on clang 3.8+)
|
|
||||||
#EXTRA_CXXFLAGS := -fsanitize=address -Wall -Werror -Weverything -Wno-c++11-long-long -Wno-c++98-compat
|
|
||||||
|
|
||||||
# With draco
|
|
||||||
# EXTRA_CXXFLAGS := -I../draco/src/ -I../draco/build -DTINYGLTF_ENABLE_DRACO -L../draco/build
|
|
||||||
# EXTRA_LINKFLAGS := -L../draco/build/ -ldracodec -ldraco
|
|
||||||
|
|
||||||
all:
|
|
||||||
clang++ $(EXTRA_CXXFLAGS) -std=c++11 -g -O0 -o loader_example loader_example.cc $(EXTRA_LINKFLAGS)
|
|
||||||
|
|
||||||
lint:
|
|
||||||
deps/cpplint.py tiny_gltf.h
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
{
|
|
||||||
"scenes" : [
|
|
||||||
{
|
|
||||||
"nodes" : [ 0 ]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
"nodes" : [
|
|
||||||
{
|
|
||||||
"mesh" : 0,
|
|
||||||
"rotation" : [ 0.0, 0.0, 0.0, 1.0 ]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
"meshes" : [
|
|
||||||
{
|
|
||||||
"primitives" : [ {
|
|
||||||
"attributes" : {
|
|
||||||
"POSITION" : 1
|
|
||||||
},
|
|
||||||
"indices" : 0
|
|
||||||
} ]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
"animations": [
|
|
||||||
{
|
|
||||||
"samplers" : [
|
|
||||||
{
|
|
||||||
"input" : 2,
|
|
||||||
"interpolation" : "LINEAR",
|
|
||||||
"output" : 3
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"channels" : [ {
|
|
||||||
"sampler" : 0,
|
|
||||||
"target" : {
|
|
||||||
"node" : 0,
|
|
||||||
"path" : "rotation"
|
|
||||||
}
|
|
||||||
} ]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
"buffers" : [
|
|
||||||
{
|
|
||||||
"uri" : "data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=",
|
|
||||||
"byteLength" : 44
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"uri" : "data:application/octet-stream;base64,AAAAAAAAgD4AAAA/AABAPwAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAD0/TQ/9P00PwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAPT9ND/0/TS/AAAAAAAAAAAAAAAAAACAPw==",
|
|
||||||
"byteLength" : 100
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"bufferViews" : [
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"byteLength" : 6,
|
|
||||||
"target" : 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteOffset" : 8,
|
|
||||||
"byteLength" : 36,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 1,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"byteLength" : 100
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"accessors" : [
|
|
||||||
{
|
|
||||||
"bufferView" : 0,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5123,
|
|
||||||
"count" : 3,
|
|
||||||
"type" : "SCALAR",
|
|
||||||
"max" : [ 2 ],
|
|
||||||
"min" : [ 0 ]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 1,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 3,
|
|
||||||
"type" : "VEC3",
|
|
||||||
"max" : [ 1.0, 1.0, 0.0 ],
|
|
||||||
"min" : [ 0.0, 0.0, 0.0 ]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 2,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 5,
|
|
||||||
"type" : "SCALAR",
|
|
||||||
"max" : [ 1.0 ],
|
|
||||||
"min" : [ 0.0 ]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 2,
|
|
||||||
"byteOffset" : 20,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 5,
|
|
||||||
"type" : "VEC4",
|
|
||||||
"max" : [ 0.0, 0.0, 1.0, 1.0 ],
|
|
||||||
"min" : [ 0.0, 0.0, 0.0, -0.707 ]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
"asset" : {
|
|
||||||
"version" : "2.0"
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
This software is available as a choice of the following licenses. Choose
|
|
||||||
whichever you prefer.
|
|
||||||
|
|
||||||
===============================================================================
|
|
||||||
ALTERNATIVE 1 - Public Domain (www.unlicense.org)
|
|
||||||
===============================================================================
|
|
||||||
This is free and unencumbered software released into the public domain.
|
|
||||||
|
|
||||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
|
||||||
software, either in source code form or as a compiled binary, for any purpose,
|
|
||||||
commercial or non-commercial, and by any means.
|
|
||||||
|
|
||||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
|
||||||
software dedicate any and all copyright interest in the software to the public
|
|
||||||
domain. We make this dedication for the benefit of the public at large and to
|
|
||||||
the detriment of our heirs and successors. We intend this dedication to be an
|
|
||||||
overt act of relinquishment in perpetuity of all present and future rights to
|
|
||||||
this software under copyright law.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
For more information, please refer to <http://unlicense.org/>
|
|
||||||
|
|
||||||
===============================================================================
|
|
||||||
ALTERNATIVE 2 - MIT No Attribution
|
|
||||||
===============================================================================
|
|
||||||
Copyright 2020 David Reid
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
all:
|
|
||||||
clang++ -O1 -g -I../../ main.cc
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
Simple example playing embedded audio data thorough OMI_audio_emitter.
|
|
||||||
|
|
||||||
Supported audio file: mp3
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
#define TINYGLTF_IMPLEMENTATION
|
|
||||||
#define STB_IMAGE_IMPLEMENTATION
|
|
||||||
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
|
||||||
#include "tiny_gltf.h"
|
|
||||||
|
|
||||||
#define DR_MP3_IMPLEMENTATION
|
|
||||||
#include "dr_mp3.h"
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
static std::string GetFilePathExtension(const std::string &FileName) {
|
|
||||||
if (FileName.find_last_of(".") != std::string::npos)
|
|
||||||
return FileName.substr(FileName.find_last_of(".") + 1);
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
|
||||||
|
|
||||||
if (argc < 2) {
|
|
||||||
std::cout << "gltf_audio input.gltf/.glb" << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
float scale = 1.0f;
|
|
||||||
if (argc > 2) {
|
|
||||||
scale = atof(argv[2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
tinygltf::Model model;
|
|
||||||
tinygltf::TinyGLTF loader;
|
|
||||||
std::string err;
|
|
||||||
std::string warn;
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
#ifdef _DEBUG
|
|
||||||
std::string input_filename(argv[1] ? argv[1]
|
|
||||||
: "../../../models/Cube/Cube.gltf");
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
std::string input_filename(argv[1] ? argv[1] : "../../models/Cube/Cube.gltf");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
std::string ext = GetFilePathExtension(input_filename);
|
|
||||||
|
|
||||||
bool ret = false;
|
|
||||||
if (ext.compare("glb") == 0) {
|
|
||||||
// assume binary glTF.
|
|
||||||
ret =
|
|
||||||
loader.LoadBinaryFromFile(&model, &err, &warn, input_filename.c_str());
|
|
||||||
} else {
|
|
||||||
// assume ascii glTF.
|
|
||||||
ret = loader.LoadASCIIFromFile(&model, &err, &warn, input_filename.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!warn.empty()) {
|
|
||||||
printf("Warn: %s\n", warn.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!err.empty()) {
|
|
||||||
printf("ERR: %s\n", err.c_str());
|
|
||||||
}
|
|
||||||
if (!ret) {
|
|
||||||
printf("Failed to load .glTF : %s\n", argv[1]);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
# GNU Make workspace makefile autogenerated by Premake
|
|
||||||
|
|
||||||
ifndef config
|
|
||||||
config=debug_native
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef verbose
|
|
||||||
SILENT = @
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),debug_native)
|
|
||||||
basic_viewer_config = debug_native
|
|
||||||
endif
|
|
||||||
ifeq ($(config),debug_x64)
|
|
||||||
basic_viewer_config = debug_x64
|
|
||||||
endif
|
|
||||||
ifeq ($(config),debug_x32)
|
|
||||||
basic_viewer_config = debug_x32
|
|
||||||
endif
|
|
||||||
ifeq ($(config),release_native)
|
|
||||||
basic_viewer_config = release_native
|
|
||||||
endif
|
|
||||||
ifeq ($(config),release_x64)
|
|
||||||
basic_viewer_config = release_x64
|
|
||||||
endif
|
|
||||||
ifeq ($(config),release_x32)
|
|
||||||
basic_viewer_config = release_x32
|
|
||||||
endif
|
|
||||||
|
|
||||||
PROJECTS := basic_viewer
|
|
||||||
|
|
||||||
.PHONY: all clean help $(PROJECTS)
|
|
||||||
|
|
||||||
all: $(PROJECTS)
|
|
||||||
|
|
||||||
basic_viewer:
|
|
||||||
ifneq (,$(basic_viewer_config))
|
|
||||||
@echo "==== Building basic_viewer ($(basic_viewer_config)) ===="
|
|
||||||
@${MAKE} --no-print-directory -C . -f basic_viewer.make config=$(basic_viewer_config)
|
|
||||||
endif
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@${MAKE} --no-print-directory -C . -f basic_viewer.make clean
|
|
||||||
|
|
||||||
help:
|
|
||||||
@echo "Usage: make [config=name] [target]"
|
|
||||||
@echo ""
|
|
||||||
@echo "CONFIGURATIONS:"
|
|
||||||
@echo " debug_native"
|
|
||||||
@echo " debug_x64"
|
|
||||||
@echo " debug_x32"
|
|
||||||
@echo " release_native"
|
|
||||||
@echo " release_x64"
|
|
||||||
@echo " release_x32"
|
|
||||||
@echo ""
|
|
||||||
@echo "TARGETS:"
|
|
||||||
@echo " all (default)"
|
|
||||||
@echo " clean"
|
|
||||||
@echo " basic_viewer"
|
|
||||||
@echo ""
|
|
||||||
@echo "For more information, see https://github.com/premake/premake-core/wiki"
|
|
||||||
@@ -1,250 +0,0 @@
|
|||||||
# GNU Make project makefile autogenerated by Premake
|
|
||||||
|
|
||||||
ifndef config
|
|
||||||
config=debug_native
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef verbose
|
|
||||||
SILENT = @
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: clean prebuild prelink
|
|
||||||
|
|
||||||
ifeq ($(config),debug_native)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/native/Debug
|
|
||||||
TARGET = $(TARGETDIR)/basic_viewer
|
|
||||||
OBJDIR = obj/native/Debug
|
|
||||||
DEFINES += -DDEBUG
|
|
||||||
INCLUDES += -I. -I../.. -I../common/glm
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -g -Wall -Wextra -fsanitize=address
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -g -Wall -Wextra -std=c++11 -fsanitize=address
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -fsanitize=address `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),debug_x64)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/x64/Debug
|
|
||||||
TARGET = $(TARGETDIR)/basic_viewer
|
|
||||||
OBJDIR = obj/x64/Debug
|
|
||||||
DEFINES += -DDEBUG
|
|
||||||
INCLUDES += -I. -I../.. -I../common/glm
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m64 -g -Wall -Wextra -fsanitize=address
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m64 -g -Wall -Wextra -std=c++11 -fsanitize=address
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib64 -m64 -fsanitize=address `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),debug_x32)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/x32/Debug
|
|
||||||
TARGET = $(TARGETDIR)/basic_viewer
|
|
||||||
OBJDIR = obj/x32/Debug
|
|
||||||
DEFINES += -DDEBUG
|
|
||||||
INCLUDES += -I. -I../.. -I../common/glm
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m32 -g -Wall -Wextra -fsanitize=address
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m32 -g -Wall -Wextra -std=c++11 -fsanitize=address
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib32 -m32 -fsanitize=address `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),release_native)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/native/Release
|
|
||||||
TARGET = $(TARGETDIR)/basic_viewer
|
|
||||||
OBJDIR = obj/native/Release
|
|
||||||
DEFINES += -DNDEBUG
|
|
||||||
INCLUDES += -I. -I../.. -I../common/glm
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -O2 -Wall -Wextra -fsanitize=address
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -O2 -Wall -Wextra -std=c++11 -fsanitize=address
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -s -fsanitize=address `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),release_x64)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/x64/Release
|
|
||||||
TARGET = $(TARGETDIR)/basic_viewer
|
|
||||||
OBJDIR = obj/x64/Release
|
|
||||||
DEFINES += -DNDEBUG
|
|
||||||
INCLUDES += -I. -I../.. -I../common/glm
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m64 -O2 -Wall -Wextra -fsanitize=address
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m64 -O2 -Wall -Wextra -std=c++11 -fsanitize=address
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib64 -m64 -s -fsanitize=address `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),release_x32)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/x32/Release
|
|
||||||
TARGET = $(TARGETDIR)/basic_viewer
|
|
||||||
OBJDIR = obj/x32/Release
|
|
||||||
DEFINES += -DNDEBUG
|
|
||||||
INCLUDES += -I. -I../.. -I../common/glm
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m32 -O2 -Wall -Wextra -fsanitize=address
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m32 -O2 -Wall -Wextra -std=c++11 -fsanitize=address
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib32 -m32 -s -fsanitize=address `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
OBJECTS := \
|
|
||||||
$(OBJDIR)/main.o \
|
|
||||||
$(OBJDIR)/shaders.o \
|
|
||||||
$(OBJDIR)/window.o \
|
|
||||||
|
|
||||||
RESOURCES := \
|
|
||||||
|
|
||||||
CUSTOMFILES := \
|
|
||||||
|
|
||||||
SHELLTYPE := posix
|
|
||||||
ifeq (.exe,$(findstring .exe,$(ComSpec)))
|
|
||||||
SHELLTYPE := msdos
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(TARGET): $(GCH) ${CUSTOMFILES} $(OBJECTS) $(LDDEPS) $(RESOURCES) | $(TARGETDIR)
|
|
||||||
@echo Linking basic_viewer
|
|
||||||
$(SILENT) $(LINKCMD)
|
|
||||||
$(POSTBUILDCMDS)
|
|
||||||
|
|
||||||
$(CUSTOMFILES): | $(OBJDIR)
|
|
||||||
|
|
||||||
$(TARGETDIR):
|
|
||||||
@echo Creating $(TARGETDIR)
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) mkdir -p $(TARGETDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) mkdir $(subst /,\\,$(TARGETDIR))
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(OBJDIR):
|
|
||||||
@echo Creating $(OBJDIR)
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) mkdir -p $(OBJDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) mkdir $(subst /,\\,$(OBJDIR))
|
|
||||||
endif
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@echo Cleaning basic_viewer
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) rm -f $(TARGET)
|
|
||||||
$(SILENT) rm -rf $(OBJDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) if exist $(subst /,\\,$(TARGET)) del $(subst /,\\,$(TARGET))
|
|
||||||
$(SILENT) if exist $(subst /,\\,$(OBJDIR)) rmdir /s /q $(subst /,\\,$(OBJDIR))
|
|
||||||
endif
|
|
||||||
|
|
||||||
prebuild:
|
|
||||||
$(PREBUILDCMDS)
|
|
||||||
|
|
||||||
prelink:
|
|
||||||
$(PRELINKCMDS)
|
|
||||||
|
|
||||||
ifneq (,$(PCH))
|
|
||||||
$(OBJECTS): $(GCH) $(PCH) | $(OBJDIR)
|
|
||||||
$(GCH): $(PCH) | $(OBJDIR)
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(SILENT) $(CXX) -x c++-header $(ALL_CXXFLAGS) -o "$@" -MF "$(@:%.gch=%.d)" -c "$<"
|
|
||||||
else
|
|
||||||
$(OBJECTS): | $(OBJDIR)
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(OBJDIR)/main.o: main.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
|
|
||||||
$(OBJDIR)/shaders.o: shaders.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
|
|
||||||
$(OBJDIR)/window.o: window.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
|
|
||||||
|
|
||||||
-include $(OBJECTS:%.o=%.d)
|
|
||||||
ifneq (,$(PCH))
|
|
||||||
-include $(OBJDIR)/$(notdir $(PCH)).d
|
|
||||||
endif
|
|
||||||
@@ -1,152 +0,0 @@
|
|||||||
{
|
|
||||||
"asset" : {
|
|
||||||
"generator" : "Khronos glTF Blender I/O v1.1.46",
|
|
||||||
"version" : "2.0"
|
|
||||||
},
|
|
||||||
"scene" : 0,
|
|
||||||
"scenes" : [
|
|
||||||
{
|
|
||||||
"name" : "Scene",
|
|
||||||
"nodes" : [
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
2
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes" : [
|
|
||||||
{
|
|
||||||
"mesh" : 0,
|
|
||||||
"name" : "Cube"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "Light",
|
|
||||||
"rotation" : [
|
|
||||||
0.16907575726509094,
|
|
||||||
0.7558803558349609,
|
|
||||||
-0.27217137813568115,
|
|
||||||
0.570947527885437
|
|
||||||
],
|
|
||||||
"translation" : [
|
|
||||||
4.076245307922363,
|
|
||||||
5.903861999511719,
|
|
||||||
-1.0054539442062378
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "Camera",
|
|
||||||
"rotation" : [
|
|
||||||
0.483536034822464,
|
|
||||||
0.33687159419059753,
|
|
||||||
-0.20870360732078552,
|
|
||||||
0.7804827094078064
|
|
||||||
],
|
|
||||||
"translation" : [
|
|
||||||
7.358891487121582,
|
|
||||||
4.958309173583984,
|
|
||||||
6.925790786743164
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials" : [
|
|
||||||
{
|
|
||||||
"doubleSided" : true,
|
|
||||||
"emissiveFactor" : [
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"name" : "Material",
|
|
||||||
"pbrMetallicRoughness" : {
|
|
||||||
"baseColorFactor" : [
|
|
||||||
0.800000011920929,
|
|
||||||
0.800000011920929,
|
|
||||||
0.800000011920929,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"metallicFactor" : 0,
|
|
||||||
"roughnessFactor" : 0.4000000059604645
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes" : [
|
|
||||||
{
|
|
||||||
"name" : "Cube",
|
|
||||||
"primitives" : [
|
|
||||||
{
|
|
||||||
"attributes" : {
|
|
||||||
"POSITION" : 0,
|
|
||||||
"NORMAL" : 1,
|
|
||||||
"TEXCOORD_0" : 2
|
|
||||||
},
|
|
||||||
"indices" : 3,
|
|
||||||
"material" : 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"accessors" : [
|
|
||||||
{
|
|
||||||
"bufferView" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 24,
|
|
||||||
"max" : [
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
-1
|
|
||||||
],
|
|
||||||
"type" : "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 1,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 24,
|
|
||||||
"type" : "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 2,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 24,
|
|
||||||
"type" : "VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 3,
|
|
||||||
"componentType" : 5123,
|
|
||||||
"count" : 36,
|
|
||||||
"type" : "SCALAR"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"bufferViews" : [
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 288,
|
|
||||||
"byteOffset" : 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 288,
|
|
||||||
"byteOffset" : 288
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 192,
|
|
||||||
"byteOffset" : 576
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 72,
|
|
||||||
"byteOffset" : 768
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers" : [
|
|
||||||
{
|
|
||||||
"byteLength" : 840,
|
|
||||||
"uri" : "data:application/octet-stream;base64,AACAPwAAgD8AAIA/AACAPwAAgD8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAgL8AAIA/AACAPwAAgL8AAIA/AACAPwAAgD8AAIA/AACAvwAAgD8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIA/AACAvwAAgD8AAIA/AACAvwAAgL8AAIA/AACAvwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgL8AAIA/AACAPwAAgD8AAIA/AACAPwAAgL8AAIA/AACAPwAAgL8AAIC/AACAPwAAgD8AAIC/AACAPwAAgD8AAIC/AACAPwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgD8AAIC/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAgPwAAgD4AACA/AAAAPwAAYD8AAAA/AABgPwAAgD4AACA/AAAAAAAAwD4AAAAAAADAPgAAgD4AACA/AACAPgAAID8AAEA/AADAPgAAQD8AAMA+AACAPwAAID8AAIA/AAAAPgAAgD4AAAA+AAAAPwAAwD4AAAA/AADAPgAAgD4AACA/AACAPgAAwD4AAIA+AADAPgAAAD8AACA/AAAAPwAAID8AAAA/AADAPgAAAD8AAMA+AABAPwAAID8AAEA/AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
// An example of how to generate a gltf file from scratch. This example
|
|
||||||
// was translated from the pygltlib documentation in the pypi project page,
|
|
||||||
// which in turn is based on the Khronos Sample Models at:
|
|
||||||
//
|
|
||||||
// https://github.com/KhronosGroup/glTF-Sample-Models
|
|
||||||
//
|
|
||||||
// This example is released under the MIT license.
|
|
||||||
//
|
|
||||||
// 2021-02-25 Thu
|
|
||||||
// Dov Grobgeld <dov.grobgeld@gmail.com>
|
|
||||||
|
|
||||||
|
|
||||||
// Define these only in *one* .cc file.
|
|
||||||
#define TINYGLTF_IMPLEMENTATION
|
|
||||||
#define TINYGLTF_USE_RAPIDJSON
|
|
||||||
#define STB_IMAGE_IMPLEMENTATION
|
|
||||||
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
|
||||||
|
|
||||||
// #define TINYGLTF_NOEXCEPTION // optional. disable exception handling.
|
|
||||||
#include "tiny_gltf.h"
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
// Create a model with a single mesh and save it as a gltf file
|
|
||||||
tinygltf::Model m;
|
|
||||||
tinygltf::Scene scene;
|
|
||||||
tinygltf::Mesh mesh;
|
|
||||||
tinygltf::Primitive primitive;
|
|
||||||
tinygltf::Node node;
|
|
||||||
tinygltf::Buffer buffer;
|
|
||||||
tinygltf::BufferView bufferView1;
|
|
||||||
tinygltf::BufferView bufferView2;
|
|
||||||
tinygltf::Accessor accessor1;
|
|
||||||
tinygltf::Accessor accessor2;
|
|
||||||
tinygltf::Asset asset;
|
|
||||||
|
|
||||||
// This is the raw data buffer.
|
|
||||||
buffer.data = {
|
|
||||||
// 6 bytes of indices and two bytes of padding
|
|
||||||
0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,
|
|
||||||
// 36 bytes of floating point numbers
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3f,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3f,
|
|
||||||
0x00,0x00,0x00,0x00};
|
|
||||||
|
|
||||||
// "The indices of the vertices (ELEMENT_ARRAY_BUFFER) take up 6 bytes in the
|
|
||||||
// start of the buffer.
|
|
||||||
bufferView1.buffer = 0;
|
|
||||||
bufferView1.byteOffset=0;
|
|
||||||
bufferView1.byteLength=6;
|
|
||||||
bufferView1.target = TINYGLTF_TARGET_ELEMENT_ARRAY_BUFFER;
|
|
||||||
|
|
||||||
// The vertices take up 36 bytes (3 vertices * 3 floating points * 4 bytes)
|
|
||||||
// at position 8 in the buffer and are of type ARRAY_BUFFER
|
|
||||||
bufferView2.buffer = 0;
|
|
||||||
bufferView2.byteOffset=8;
|
|
||||||
bufferView2.byteLength=36;
|
|
||||||
bufferView2.target = TINYGLTF_TARGET_ARRAY_BUFFER;
|
|
||||||
|
|
||||||
// Describe the layout of bufferView1, the indices of the vertices
|
|
||||||
accessor1.bufferView = 0;
|
|
||||||
accessor1.byteOffset = 0;
|
|
||||||
accessor1.componentType = TINYGLTF_COMPONENT_TYPE_UNSIGNED_SHORT;
|
|
||||||
accessor1.count = 3;
|
|
||||||
accessor1.type = TINYGLTF_TYPE_SCALAR;
|
|
||||||
accessor1.maxValues.push_back(2);
|
|
||||||
accessor1.minValues.push_back(0);
|
|
||||||
|
|
||||||
// Describe the layout of bufferView2, the vertices themself
|
|
||||||
accessor2.bufferView = 1;
|
|
||||||
accessor2.byteOffset = 0;
|
|
||||||
accessor2.componentType = TINYGLTF_COMPONENT_TYPE_FLOAT;
|
|
||||||
accessor2.count = 3;
|
|
||||||
accessor2.type = TINYGLTF_TYPE_VEC3;
|
|
||||||
accessor2.maxValues = {1.0, 1.0, 0.0};
|
|
||||||
accessor2.minValues = {0.0, 0.0, 0.0};
|
|
||||||
|
|
||||||
// Build the mesh primitive and add it to the mesh
|
|
||||||
primitive.indices = 0; // The index of the accessor for the vertex indices
|
|
||||||
primitive.attributes["POSITION"] = 1; // The index of the accessor for positions
|
|
||||||
primitive.material = 0;
|
|
||||||
primitive.mode = TINYGLTF_MODE_TRIANGLES;
|
|
||||||
mesh.primitives.push_back(primitive);
|
|
||||||
|
|
||||||
// Other tie ups
|
|
||||||
node.mesh = 0;
|
|
||||||
scene.nodes.push_back(0); // Default scene
|
|
||||||
|
|
||||||
// Define the asset. The version is required
|
|
||||||
asset.version = "2.0";
|
|
||||||
asset.generator = "tinygltf";
|
|
||||||
|
|
||||||
// Now all that remains is to tie back all the loose objects into the
|
|
||||||
// our single model.
|
|
||||||
m.scenes.push_back(scene);
|
|
||||||
m.meshes.push_back(mesh);
|
|
||||||
m.nodes.push_back(node);
|
|
||||||
m.buffers.push_back(buffer);
|
|
||||||
m.bufferViews.push_back(bufferView1);
|
|
||||||
m.bufferViews.push_back(bufferView2);
|
|
||||||
m.accessors.push_back(accessor1);
|
|
||||||
m.accessors.push_back(accessor2);
|
|
||||||
m.asset = asset;
|
|
||||||
|
|
||||||
// Create a simple material
|
|
||||||
tinygltf::Material mat;
|
|
||||||
mat.pbrMetallicRoughness.baseColorFactor = {1.0f, 0.9f, 0.9f, 1.0f};
|
|
||||||
mat.doubleSided = true;
|
|
||||||
m.materials.push_back(mat);
|
|
||||||
|
|
||||||
// lights
|
|
||||||
tinygltf::Light dummyLight;
|
|
||||||
dummyLight.name = "bora";
|
|
||||||
m.lights.push_back(dummyLight);
|
|
||||||
tinygltf::Value dummyVal(3.14);
|
|
||||||
m.extensions.emplace("ext1", dummyVal);
|
|
||||||
|
|
||||||
// Save it to a file
|
|
||||||
tinygltf::TinyGLTF gltf;
|
|
||||||
gltf.WriteGltfSceneToFile(&m, "triangle.gltf",
|
|
||||||
true, // embedImages
|
|
||||||
true, // embedBuffers
|
|
||||||
true, // pretty print
|
|
||||||
false); // write binary
|
|
||||||
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
@@ -1,94 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors": [
|
|
||||||
{
|
|
||||||
"bufferView": 0,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 3,
|
|
||||||
"max": [
|
|
||||||
2
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"type": "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 1,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 3,
|
|
||||||
"max": [
|
|
||||||
1.0,
|
|
||||||
1.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset": {
|
|
||||||
"generator": "tinygltf",
|
|
||||||
"version": "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews": [
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 6,
|
|
||||||
"target": 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 36,
|
|
||||||
"byteOffset": 8,
|
|
||||||
"target": 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers": [
|
|
||||||
{
|
|
||||||
"byteLength": 44,
|
|
||||||
"uri": "data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA="
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials": [
|
|
||||||
{
|
|
||||||
"doubleSided": true,
|
|
||||||
"pbrMetallicRoughness": {
|
|
||||||
"baseColorFactor": [
|
|
||||||
1.0,
|
|
||||||
0.8999999761581421,
|
|
||||||
0.8999999761581421,
|
|
||||||
1.0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes": [
|
|
||||||
{
|
|
||||||
"primitives": [
|
|
||||||
{
|
|
||||||
"attributes": {
|
|
||||||
"POSITION": 1
|
|
||||||
},
|
|
||||||
"indices": 0,
|
|
||||||
"material": 0,
|
|
||||||
"mode": 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"mesh": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"scenes": [
|
|
||||||
{
|
|
||||||
"nodes": [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
# GNU Make workspace makefile autogenerated by Premake
|
|
||||||
|
|
||||||
ifndef config
|
|
||||||
config=debug_native
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef verbose
|
|
||||||
SILENT = @
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),debug_native)
|
|
||||||
glview_config = debug_native
|
|
||||||
endif
|
|
||||||
ifeq ($(config),debug_x64)
|
|
||||||
glview_config = debug_x64
|
|
||||||
endif
|
|
||||||
ifeq ($(config),debug_x32)
|
|
||||||
glview_config = debug_x32
|
|
||||||
endif
|
|
||||||
ifeq ($(config),release_native)
|
|
||||||
glview_config = release_native
|
|
||||||
endif
|
|
||||||
ifeq ($(config),release_x64)
|
|
||||||
glview_config = release_x64
|
|
||||||
endif
|
|
||||||
ifeq ($(config),release_x32)
|
|
||||||
glview_config = release_x32
|
|
||||||
endif
|
|
||||||
|
|
||||||
PROJECTS := glview
|
|
||||||
|
|
||||||
.PHONY: all clean help $(PROJECTS)
|
|
||||||
|
|
||||||
all: $(PROJECTS)
|
|
||||||
|
|
||||||
glview:
|
|
||||||
ifneq (,$(glview_config))
|
|
||||||
@echo "==== Building glview ($(glview_config)) ===="
|
|
||||||
@${MAKE} --no-print-directory -C . -f glview.make config=$(glview_config)
|
|
||||||
endif
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@${MAKE} --no-print-directory -C . -f glview.make clean
|
|
||||||
|
|
||||||
help:
|
|
||||||
@echo "Usage: make [config=name] [target]"
|
|
||||||
@echo ""
|
|
||||||
@echo "CONFIGURATIONS:"
|
|
||||||
@echo " debug_native"
|
|
||||||
@echo " debug_x64"
|
|
||||||
@echo " debug_x32"
|
|
||||||
@echo " release_native"
|
|
||||||
@echo " release_x64"
|
|
||||||
@echo " release_x32"
|
|
||||||
@echo ""
|
|
||||||
@echo "TARGETS:"
|
|
||||||
@echo " all (default)"
|
|
||||||
@echo " clean"
|
|
||||||
@echo " glview"
|
|
||||||
@echo ""
|
|
||||||
@echo "For more information, see https://github.com/premake/premake-core/wiki"
|
|
||||||
@@ -1,246 +0,0 @@
|
|||||||
# GNU Make project makefile autogenerated by Premake
|
|
||||||
|
|
||||||
ifndef config
|
|
||||||
config=debug_native
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef verbose
|
|
||||||
SILENT = @
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: clean prebuild prelink
|
|
||||||
|
|
||||||
ifeq ($(config),debug_native)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/native/Debug
|
|
||||||
TARGET = $(TARGETDIR)/glview
|
|
||||||
OBJDIR = obj/native/Debug
|
|
||||||
DEFINES += -DDEBUG
|
|
||||||
INCLUDES += -I. -I../.. -I../common
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -g -Wall -Wextra
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -g -Wall -Wextra -std=c++11
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),debug_x64)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/x64/Debug
|
|
||||||
TARGET = $(TARGETDIR)/glview
|
|
||||||
OBJDIR = obj/x64/Debug
|
|
||||||
DEFINES += -DDEBUG
|
|
||||||
INCLUDES += -I. -I../.. -I../common
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m64 -g -Wall -Wextra
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m64 -g -Wall -Wextra -std=c++11
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib64 -m64 `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),debug_x32)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/x32/Debug
|
|
||||||
TARGET = $(TARGETDIR)/glview
|
|
||||||
OBJDIR = obj/x32/Debug
|
|
||||||
DEFINES += -DDEBUG
|
|
||||||
INCLUDES += -I. -I../.. -I../common
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m32 -g -Wall -Wextra
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m32 -g -Wall -Wextra -std=c++11
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib32 -m32 `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),release_native)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/native/Release
|
|
||||||
TARGET = $(TARGETDIR)/glview
|
|
||||||
OBJDIR = obj/native/Release
|
|
||||||
DEFINES += -DNDEBUG
|
|
||||||
INCLUDES += -I. -I../.. -I../common
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -O2 -Wall -Wextra
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -O2 -Wall -Wextra -std=c++11
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -s `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),release_x64)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/x64/Release
|
|
||||||
TARGET = $(TARGETDIR)/glview
|
|
||||||
OBJDIR = obj/x64/Release
|
|
||||||
DEFINES += -DNDEBUG
|
|
||||||
INCLUDES += -I. -I../.. -I../common
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m64 -O2 -Wall -Wextra
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m64 -O2 -Wall -Wextra -std=c++11
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib64 -m64 -s `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),release_x32)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/x32/Release
|
|
||||||
TARGET = $(TARGETDIR)/glview
|
|
||||||
OBJDIR = obj/x32/Release
|
|
||||||
DEFINES += -DNDEBUG
|
|
||||||
INCLUDES += -I. -I../.. -I../common
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m32 -O2 -Wall -Wextra
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m32 -O2 -Wall -Wextra -std=c++11
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib32 -m32 -s `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
OBJECTS := \
|
|
||||||
$(OBJDIR)/trackball.o \
|
|
||||||
$(OBJDIR)/glview.o \
|
|
||||||
|
|
||||||
RESOURCES := \
|
|
||||||
|
|
||||||
CUSTOMFILES := \
|
|
||||||
|
|
||||||
SHELLTYPE := posix
|
|
||||||
ifeq (.exe,$(findstring .exe,$(ComSpec)))
|
|
||||||
SHELLTYPE := msdos
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(TARGET): $(GCH) ${CUSTOMFILES} $(OBJECTS) $(LDDEPS) $(RESOURCES) | $(TARGETDIR)
|
|
||||||
@echo Linking glview
|
|
||||||
$(SILENT) $(LINKCMD)
|
|
||||||
$(POSTBUILDCMDS)
|
|
||||||
|
|
||||||
$(CUSTOMFILES): | $(OBJDIR)
|
|
||||||
|
|
||||||
$(TARGETDIR):
|
|
||||||
@echo Creating $(TARGETDIR)
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) mkdir -p $(TARGETDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) mkdir $(subst /,\\,$(TARGETDIR))
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(OBJDIR):
|
|
||||||
@echo Creating $(OBJDIR)
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) mkdir -p $(OBJDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) mkdir $(subst /,\\,$(OBJDIR))
|
|
||||||
endif
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@echo Cleaning glview
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) rm -f $(TARGET)
|
|
||||||
$(SILENT) rm -rf $(OBJDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) if exist $(subst /,\\,$(TARGET)) del $(subst /,\\,$(TARGET))
|
|
||||||
$(SILENT) if exist $(subst /,\\,$(OBJDIR)) rmdir /s /q $(subst /,\\,$(OBJDIR))
|
|
||||||
endif
|
|
||||||
|
|
||||||
prebuild:
|
|
||||||
$(PREBUILDCMDS)
|
|
||||||
|
|
||||||
prelink:
|
|
||||||
$(PRELINKCMDS)
|
|
||||||
|
|
||||||
ifneq (,$(PCH))
|
|
||||||
$(OBJECTS): $(GCH) $(PCH) | $(OBJDIR)
|
|
||||||
$(GCH): $(PCH) | $(OBJDIR)
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(SILENT) $(CXX) -x c++-header $(ALL_CXXFLAGS) -o "$@" -MF "$(@:%.gch=%.d)" -c "$<"
|
|
||||||
else
|
|
||||||
$(OBJECTS): | $(OBJDIR)
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(OBJDIR)/trackball.o: ../common/trackball.cc
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
|
|
||||||
$(OBJDIR)/glview.o: glview.cc
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
|
|
||||||
|
|
||||||
-include $(OBJECTS:%.o=%.d)
|
|
||||||
ifneq (,$(PCH))
|
|
||||||
-include $(OBJDIR)/$(notdir $(PCH)).d
|
|
||||||
endif
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
Jsonnet representation of glTF
|
|
||||||
|
|
||||||
https://jsonnet.org/
|
|
||||||
|
|
||||||
# Benefit
|
|
||||||
|
|
||||||
You can assign id programatically
|
|
||||||
|
|
||||||
```
|
|
||||||
{
|
|
||||||
|
|
||||||
```
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
newmtl hairSG
|
|
||||||
Ka 0.000000 0.000000 0.000000
|
|
||||||
Kd 0.000000 0.000000 0.000000
|
|
||||||
Ks 0.000000 0.000000 0.000000
|
|
||||||
Kt 1.000000 0.000000 0.000000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ns 1.000000
|
|
||||||
Ni 1.000000
|
|
||||||
illum 4
|
|
||||||
map_Kd color.png
|
|
||||||
|
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
newmtl _blinn1SG
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 0.00
|
|
||||||
newmtl blinn1SG
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
map_Kd skin_dif.tif
|
|
||||||
Ni 1.00
|
|
||||||
Ks 0.28 0.28 0.28
|
|
||||||
newmtl eyeMTLSG
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 0.00
|
|
||||||
newmtl eyebrows_hairTubeShader2SG1
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 0.00
|
|
||||||
newmtl eyelushes_hairTubeShader3SG
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 0.00
|
|
||||||
newmtl face_eye_mouth_blinn2SG
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
map_Kd HWI_male_gum_dif.jpg
|
|
||||||
Ni 1.00
|
|
||||||
Ks 0.50 0.50 0.50
|
|
||||||
newmtl hairFrontHair_hairTubeShader1SG1
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 0.00
|
|
||||||
newmtl hairMainHair_hairTubeShader1SG
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 0.00
|
|
||||||
newmtl hairStrayHair_hairTubeShader1SG
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 0.00
|
|
||||||
newmtl hairTopFix_hairTubeShader1SG
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 0.00
|
|
||||||
newmtl hairTopFix_surfaceShader13SG
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 0.00
|
|
||||||
newmtl initialShadingGroup
|
|
||||||
illum 4
|
|
||||||
Kd 0.37 0.37 0.37
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 1.00
|
|
||||||
newmtl irisMTLSG
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 0.00
|
|
||||||
newmtl skinSG
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
map_Kd skin_dif.tif
|
|
||||||
Ni 1.00
|
|
||||||
Ks 0.14 0.14 0.14
|
|
||||||
newmtl teethMTLSG
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 0.00
|
|
||||||
newmtl tongueMTLSG
|
|
||||||
illum 4
|
|
||||||
Kd 0.00 0.00 0.00
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 0.00
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"sim": {
|
|
||||||
"version": 1,
|
|
||||||
"id": "sim",
|
|
||||||
"name": "1",
|
|
||||||
"kind": "Puppeteer",
|
|
||||||
"mood": null,
|
|
||||||
"postPlaybackMood": null,
|
|
||||||
"duration": 3.75
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"lowpoly": {
|
|
||||||
"version": 1,
|
|
||||||
"id": "lowpoly",
|
|
||||||
"name": "1",
|
|
||||||
"kind": "Puppeteer",
|
|
||||||
"mood": null,
|
|
||||||
"postPlaybackMood": null,
|
|
||||||
"duration": 62.5
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors": [
|
|
||||||
{
|
|
||||||
"bufferView": 0,
|
|
||||||
"componentType": 5125,
|
|
||||||
"count": 11532,
|
|
||||||
"max": [
|
|
||||||
11531.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"type": "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 1,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 11532,
|
|
||||||
"max": [
|
|
||||||
14679.0,
|
|
||||||
1.0,
|
|
||||||
9728.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
14678.0,
|
|
||||||
0.0,
|
|
||||||
9216.0
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 2,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 11532,
|
|
||||||
"max": [
|
|
||||||
1.0,
|
|
||||||
1.0,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-1.0,
|
|
||||||
-1.0,
|
|
||||||
-1.0
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 3,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 11532,
|
|
||||||
"max": [
|
|
||||||
0.96875,
|
|
||||||
0.96875
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.03125,
|
|
||||||
0.03125
|
|
||||||
],
|
|
||||||
"type": "VEC2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset": {
|
|
||||||
"generator": "mesh-modify",
|
|
||||||
"version": "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews": [
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 46128,
|
|
||||||
"target": 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 138384,
|
|
||||||
"byteOffset": 46128,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 138384,
|
|
||||||
"byteOffset": 184512,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 92256,
|
|
||||||
"byteOffset": 322896,
|
|
||||||
"target": 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers": [
|
|
||||||
{
|
|
||||||
"byteLength": 415152,
|
|
||||||
"name": "bufffer0",
|
|
||||||
"uri": "output.bin"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes": [
|
|
||||||
{
|
|
||||||
"name": "r.28.18.obj",
|
|
||||||
"primitives": [
|
|
||||||
{
|
|
||||||
"attributes": {
|
|
||||||
"NORMAL": 2,
|
|
||||||
"POSITION": 1,
|
|
||||||
"TEXCOORD_0": 3
|
|
||||||
},
|
|
||||||
"indices": 0,
|
|
||||||
"mode": 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"mesh": 0,
|
|
||||||
"name": "mesh"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"scene": 0,
|
|
||||||
"scenes": [
|
|
||||||
{
|
|
||||||
"nodes": [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,185 +0,0 @@
|
|||||||
{
|
|
||||||
"asset": {
|
|
||||||
"copyright": "(C)2020 syoyo",
|
|
||||||
"generator": "maya2glTF master d293e09",
|
|
||||||
"version": "2.0"
|
|
||||||
},
|
|
||||||
"scenes": [
|
|
||||||
{
|
|
||||||
"nodes": [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"scene": 0,
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"name": "pPlane1",
|
|
||||||
"mesh": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes": [
|
|
||||||
{
|
|
||||||
"name": "pPlaneShape1",
|
|
||||||
"extras": {
|
|
||||||
"targetNames": []
|
|
||||||
},
|
|
||||||
"primitives": [
|
|
||||||
{
|
|
||||||
"attributes": {
|
|
||||||
"NORMAL": 1,
|
|
||||||
"POSITION": 2,
|
|
||||||
"TANGENT": 3,
|
|
||||||
"TEXCOORD_0": 4
|
|
||||||
},
|
|
||||||
"indices": 0,
|
|
||||||
"mode": 4,
|
|
||||||
"material": 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials": [
|
|
||||||
{
|
|
||||||
"name": "lambert1",
|
|
||||||
"pbrMetallicRoughness": {
|
|
||||||
"baseColorFactor": [
|
|
||||||
0.4000000059604645,
|
|
||||||
0.4000000059604645,
|
|
||||||
0.4000000059604645,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"metallicFactor": 0.0,
|
|
||||||
"roughnessFactor": 1.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"accessors": [
|
|
||||||
{
|
|
||||||
"name": "pPlaneShape1#0/indices",
|
|
||||||
"bufferView": 0,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 24,
|
|
||||||
"max": [
|
|
||||||
8
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"type": "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pPlaneShape1#0/vertices/NORMAL",
|
|
||||||
"bufferView": 1,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 9,
|
|
||||||
"max": [
|
|
||||||
0.0,
|
|
||||||
1.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
1.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pPlaneShape1#0/vertices/POSITION",
|
|
||||||
"bufferView": 1,
|
|
||||||
"byteOffset": 108,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 9,
|
|
||||||
"max": [
|
|
||||||
0.5,
|
|
||||||
0.0,
|
|
||||||
0.5
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-0.5,
|
|
||||||
0.0,
|
|
||||||
-0.5
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pPlaneShape1#0/vertices/TANGENT",
|
|
||||||
"bufferView": 2,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 9,
|
|
||||||
"max": [
|
|
||||||
1.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
1.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pPlaneShape1#0/vertices/TEXCOORD_0",
|
|
||||||
"bufferView": 3,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 9,
|
|
||||||
"max": [
|
|
||||||
1.0,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"type": "VEC2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"bufferViews": [
|
|
||||||
{
|
|
||||||
"name": "plane/data/indices-2",
|
|
||||||
"buffer": 0,
|
|
||||||
"byteOffset": 432,
|
|
||||||
"byteLength": 48,
|
|
||||||
"target": 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "plane/data/vertices-12",
|
|
||||||
"buffer": 0,
|
|
||||||
"byteOffset": 144,
|
|
||||||
"byteLength": 216,
|
|
||||||
"byteStride": 12,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "plane/data/vertices-16",
|
|
||||||
"buffer": 0,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"byteLength": 144,
|
|
||||||
"byteStride": 16,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "plane/data/vertices-8",
|
|
||||||
"buffer": 0,
|
|
||||||
"byteOffset": 360,
|
|
||||||
"byteLength": 72,
|
|
||||||
"byteStride": 8,
|
|
||||||
"target": 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers": [
|
|
||||||
{
|
|
||||||
"name": "plane/data",
|
|
||||||
"byteLength": 480,
|
|
||||||
"uri": "plane0.bin"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
./mesh-conv --op gltf2obj -i ../hairsimtest/sim.gltf
|
|
||||||
|
|
||||||
#./mesh-conv --op obj2gltf --verbose -i hair_bfShape_0.obj
|
|
||||||
./mesh-conv --op obj2gltf -i hair_bfShape_1.obj -o hair_bfShape_1.gltf
|
|
||||||
|
|
||||||
@@ -1,224 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors": [
|
|
||||||
{
|
|
||||||
"bufferView": 0,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 36,
|
|
||||||
"max": [
|
|
||||||
35
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"type": "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 1,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 36,
|
|
||||||
"max": [
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1.000001
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
-1
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 2,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 36,
|
|
||||||
"max": [
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
-1
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 3,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 36,
|
|
||||||
"max": [
|
|
||||||
1,
|
|
||||||
-0,
|
|
||||||
-0,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0,
|
|
||||||
-0,
|
|
||||||
-1,
|
|
||||||
-1
|
|
||||||
],
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 4,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 36,
|
|
||||||
"max": [
|
|
||||||
1,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-1,
|
|
||||||
-1
|
|
||||||
],
|
|
||||||
"type": "VEC2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset": {
|
|
||||||
"generator": "VKTS glTF 2.0 exporter",
|
|
||||||
"version": "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews": [
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 72,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"target": 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 432,
|
|
||||||
"byteOffset": 72,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 432,
|
|
||||||
"byteOffset": 504,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 576,
|
|
||||||
"byteOffset": 936,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 288,
|
|
||||||
"byteOffset": 1512,
|
|
||||||
"target": 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers": [
|
|
||||||
{
|
|
||||||
"byteLength": 1800,
|
|
||||||
"uri": "Cube.bin"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"images": [
|
|
||||||
{
|
|
||||||
"0comment": "Use Cube_MetallicRoughness.png to reduce scene filesize",
|
|
||||||
"uri": "Cube_MetallicRoughness.png"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"uri": "Cube_MetallicRoughness.png"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials": [
|
|
||||||
{
|
|
||||||
"emissiveTexture": {
|
|
||||||
"index": 0,
|
|
||||||
"extensions": {
|
|
||||||
"KHR_texture_transform": {
|
|
||||||
"offset": [
|
|
||||||
0,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"scale": [
|
|
||||||
1,
|
|
||||||
-1
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Cube",
|
|
||||||
"pbrMetallicRoughness": {
|
|
||||||
"baseColorTexture": {
|
|
||||||
"index": 0
|
|
||||||
},
|
|
||||||
"metallicRoughnessTexture": {
|
|
||||||
"index": 1,
|
|
||||||
"extensions": {
|
|
||||||
"KHR_texture_transform": {
|
|
||||||
"offset": [
|
|
||||||
0,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"rotation": 1.57079632679,
|
|
||||||
"scale": [
|
|
||||||
0.5,
|
|
||||||
0.5
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes": [
|
|
||||||
{
|
|
||||||
"name": "Cube",
|
|
||||||
"primitives": [
|
|
||||||
{
|
|
||||||
"attributes": {
|
|
||||||
"NORMAL": 2,
|
|
||||||
"POSITION": 1,
|
|
||||||
"TANGENT": 3,
|
|
||||||
"TEXCOORD_0": 4
|
|
||||||
},
|
|
||||||
"indices": 0,
|
|
||||||
"material": 0,
|
|
||||||
"mode": 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"mesh": 0,
|
|
||||||
"name": "Cube"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"samplers": [
|
|
||||||
{}
|
|
||||||
],
|
|
||||||
"scene": 0,
|
|
||||||
"scenes": [
|
|
||||||
{
|
|
||||||
"nodes": [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"textures": [
|
|
||||||
{
|
|
||||||
"sampler": 0,
|
|
||||||
"source": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sampler": 0,
|
|
||||||
"source": 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,224 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors": [
|
|
||||||
{
|
|
||||||
"bufferView": 0,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 36,
|
|
||||||
"max": [
|
|
||||||
35
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"type": "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 1,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 36,
|
|
||||||
"max": [
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1.000001
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
-1
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 2,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 36,
|
|
||||||
"max": [
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
-1
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 3,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 36,
|
|
||||||
"max": [
|
|
||||||
1,
|
|
||||||
-0,
|
|
||||||
-0,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0,
|
|
||||||
-0,
|
|
||||||
-1,
|
|
||||||
-1
|
|
||||||
],
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 4,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 36,
|
|
||||||
"max": [
|
|
||||||
1,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-1,
|
|
||||||
-1
|
|
||||||
],
|
|
||||||
"type": "VEC2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset": {
|
|
||||||
"generator": "VKTS glTF 2.0 exporter",
|
|
||||||
"version": "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews": [
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 72,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"target": 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 432,
|
|
||||||
"byteOffset": 72,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 432,
|
|
||||||
"byteOffset": 504,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 576,
|
|
||||||
"byteOffset": 936,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 288,
|
|
||||||
"byteOffset": 1512,
|
|
||||||
"target": 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers": [
|
|
||||||
{
|
|
||||||
"byteLength": 1800,
|
|
||||||
"uri": "Cube.bin"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"images": [
|
|
||||||
{
|
|
||||||
"0comment": "Use Cube_MetallicRoughness.png to reduce scene filesize",
|
|
||||||
"uri": "Cube_MetallicRoughness.png"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"uri": "Cube_MetallicRoughness.png"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials": [
|
|
||||||
{
|
|
||||||
"emissiveTexture": {
|
|
||||||
"index": 0,
|
|
||||||
"extensions": {
|
|
||||||
"KHR_texture_transform": {
|
|
||||||
"offset": [
|
|
||||||
0,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"scale": [
|
|
||||||
1,
|
|
||||||
-1
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Cube",
|
|
||||||
"pbrMetallicRoughness": {
|
|
||||||
"baseColorTexture": {
|
|
||||||
"index": 0
|
|
||||||
},
|
|
||||||
"metallicRoughnessTexture": {
|
|
||||||
"index": 1,
|
|
||||||
"extensions": {
|
|
||||||
"KHR_texture_transform": {
|
|
||||||
"offset": [
|
|
||||||
0,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"rotation": 1.57079632679,
|
|
||||||
"scale": [
|
|
||||||
0.5,
|
|
||||||
0.5
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes": [
|
|
||||||
{
|
|
||||||
"name": "Cube",
|
|
||||||
"primitives": [
|
|
||||||
{
|
|
||||||
"attributes": {
|
|
||||||
"NORMAL": 2,
|
|
||||||
"POSITION": 1,
|
|
||||||
"TANGENT": 3,
|
|
||||||
"TEXCOORD_0": 4
|
|
||||||
},
|
|
||||||
"indices": 0,
|
|
||||||
"material": 0,
|
|
||||||
"mode": 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"mesh": 0,
|
|
||||||
"name": "Cube"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"samplers": [
|
|
||||||
{}
|
|
||||||
],
|
|
||||||
"scene": 0,
|
|
||||||
"scenes": [
|
|
||||||
{
|
|
||||||
"nodes": [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"textures": [
|
|
||||||
{
|
|
||||||
"sampler": 0,
|
|
||||||
"source": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sampler": 0,
|
|
||||||
"source": 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
all:
|
|
||||||
python concat_mesh.py hair_bfShape_1.gltf hair_bfShape_0.gltf sim.gltf merged-sim.gltf
|
|
||||||
# python replace_attrib.py merged-sim.gltf replaced.gltf "added/hair_bfShape_1.obj" "hair_bfShape" 0 1
|
|
||||||
@@ -1,288 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors": [
|
|
||||||
{
|
|
||||||
"bufferView": 0,
|
|
||||||
"componentType": 5125,
|
|
||||||
"count": 79434,
|
|
||||||
"max": [
|
|
||||||
28135.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/indices",
|
|
||||||
"type": "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 1,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
11.10669994354248,
|
|
||||||
170.1320037841797,
|
|
||||||
7.035999774932861
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-11.581600189208984,
|
|
||||||
142.8719940185547,
|
|
||||||
-15.023500442504883
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/POSITION",
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 2,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
0.9999430179595947,
|
|
||||||
0.9999679923057556,
|
|
||||||
0.9999390244483948
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-0.9997580051422119,
|
|
||||||
-0.8950620293617249,
|
|
||||||
-0.9999200105667114
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/NORMAL",
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 3,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
0.889851987361908,
|
|
||||||
0.998104989528656
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0014202300226315856,
|
|
||||||
-0.0010660899570211768
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/TEXCOORD_0",
|
|
||||||
"type": "VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 4,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
97.0,
|
|
||||||
97.0,
|
|
||||||
94.0,
|
|
||||||
93.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/JOINTS_0",
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 5,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
93.0,
|
|
||||||
93.0,
|
|
||||||
92.0,
|
|
||||||
92.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/JOINTS_1",
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 6,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
91.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/JOINTS_2",
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 7,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
1.0,
|
|
||||||
0.5,
|
|
||||||
0.3330000042915344,
|
|
||||||
0.24390600621700287
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.2014250010251999,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/WEIGHTS_0",
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 8,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
0.18594099581241608,
|
|
||||||
0.11678200215101242,
|
|
||||||
0.10268200188875198,
|
|
||||||
0.03563150018453598
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/WEIGHTS_1",
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 9,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
0.001464050030335784,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/WEIGHTS_2",
|
|
||||||
"type": "VEC4"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset": {
|
|
||||||
"generator": "mesh-modify",
|
|
||||||
"version": "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews": [
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 317736,
|
|
||||||
"target": 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 337632,
|
|
||||||
"byteOffset": 317736,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 337632,
|
|
||||||
"byteOffset": 655368,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 225088,
|
|
||||||
"byteOffset": 993000,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 225088,
|
|
||||||
"byteOffset": 1218088,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 225088,
|
|
||||||
"byteOffset": 1443176,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 225088,
|
|
||||||
"byteOffset": 1668264,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 450176,
|
|
||||||
"byteOffset": 1893352,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 450176,
|
|
||||||
"byteOffset": 2343528,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 450176,
|
|
||||||
"byteOffset": 2793704,
|
|
||||||
"target": 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers": [
|
|
||||||
{
|
|
||||||
"byteLength": 3243880,
|
|
||||||
"name": "bufffer0",
|
|
||||||
"uri": "hair_bfShape_1.bin"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes": [
|
|
||||||
{
|
|
||||||
"name": "hair_bfShape_1.obj",
|
|
||||||
"primitives": [
|
|
||||||
{
|
|
||||||
"attributes": {
|
|
||||||
"JOINTS_0": 4,
|
|
||||||
"JOINTS_1": 5,
|
|
||||||
"JOINTS_2": 6,
|
|
||||||
"NORMAL": 2,
|
|
||||||
"POSITION": 1,
|
|
||||||
"TEXCOORD_0": 3,
|
|
||||||
"WEIGHTS_0": 7,
|
|
||||||
"WEIGHTS_1": 8,
|
|
||||||
"WEIGHTS_2": 9
|
|
||||||
},
|
|
||||||
"indices": 0,
|
|
||||||
"mode": 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"mesh": 0,
|
|
||||||
"name": "mesh"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"scene": 0,
|
|
||||||
"scenes": [
|
|
||||||
{
|
|
||||||
"nodes": [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,288 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors": [
|
|
||||||
{
|
|
||||||
"bufferView": 0,
|
|
||||||
"componentType": 5125,
|
|
||||||
"count": 79434,
|
|
||||||
"max": [
|
|
||||||
28135.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/indices",
|
|
||||||
"type": "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 1,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
11.10669994354248,
|
|
||||||
170.1320037841797,
|
|
||||||
7.035999774932861
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-11.581600189208984,
|
|
||||||
142.8719940185547,
|
|
||||||
-15.023500442504883
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/POSITION",
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 2,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
0.9999430179595947,
|
|
||||||
0.9999679923057556,
|
|
||||||
0.9999390244483948
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-0.9997580051422119,
|
|
||||||
-0.8950620293617249,
|
|
||||||
-0.9999200105667114
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/NORMAL",
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 3,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
0.889851987361908,
|
|
||||||
0.998104989528656
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0014202300226315856,
|
|
||||||
-0.0010660899570211768
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/TEXCOORD_0",
|
|
||||||
"type": "VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 4,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
97.0,
|
|
||||||
97.0,
|
|
||||||
94.0,
|
|
||||||
93.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/JOINTS_0",
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 5,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
93.0,
|
|
||||||
93.0,
|
|
||||||
92.0,
|
|
||||||
92.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/JOINTS_1",
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 6,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
91.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/JOINTS_2",
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 7,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
1.0,
|
|
||||||
0.5,
|
|
||||||
0.3330000042915344,
|
|
||||||
0.24390600621700287
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.2014250010251999,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/WEIGHTS_0",
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 8,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
0.18594099581241608,
|
|
||||||
0.11678200215101242,
|
|
||||||
0.10268200188875198,
|
|
||||||
0.03563150018453598
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/WEIGHTS_1",
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 9,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 28136,
|
|
||||||
"max": [
|
|
||||||
0.001464050030335784,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "hair_bfShape_1.obj#0/WEIGHTS_2",
|
|
||||||
"type": "VEC4"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset": {
|
|
||||||
"generator": "mesh-modify",
|
|
||||||
"version": "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews": [
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 317736,
|
|
||||||
"target": 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 337632,
|
|
||||||
"byteOffset": 317736,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 337632,
|
|
||||||
"byteOffset": 655368,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 225088,
|
|
||||||
"byteOffset": 993000,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 225088,
|
|
||||||
"byteOffset": 1218088,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 225088,
|
|
||||||
"byteOffset": 1443176,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 225088,
|
|
||||||
"byteOffset": 1668264,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 450176,
|
|
||||||
"byteOffset": 1893352,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 450176,
|
|
||||||
"byteOffset": 2343528,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 450176,
|
|
||||||
"byteOffset": 2793704,
|
|
||||||
"target": 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers": [
|
|
||||||
{
|
|
||||||
"byteLength": 3243880,
|
|
||||||
"name": "bufffer0",
|
|
||||||
"uri": "hair_bfShape_1.bin"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes": [
|
|
||||||
{
|
|
||||||
"name": "hair_bfShape_1.obj",
|
|
||||||
"primitives": [
|
|
||||||
{
|
|
||||||
"attributes": {
|
|
||||||
"JOINTS_0": 4,
|
|
||||||
"JOINTS_1": 5,
|
|
||||||
"JOINTS_2": 6,
|
|
||||||
"NORMAL": 2,
|
|
||||||
"POSITION": 1,
|
|
||||||
"TEXCOORD_0": 3,
|
|
||||||
"WEIGHTS_0": 7,
|
|
||||||
"WEIGHTS_1": 8,
|
|
||||||
"WEIGHTS_2": 9
|
|
||||||
},
|
|
||||||
"indices": 0,
|
|
||||||
"mode": 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"mesh": 0,
|
|
||||||
"name": "mesh"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"scene": 0,
|
|
||||||
"scenes": [
|
|
||||||
{
|
|
||||||
"nodes": [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,278 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors": [
|
|
||||||
{
|
|
||||||
"bufferView": 0,
|
|
||||||
"componentType": 5125,
|
|
||||||
"count": 120,
|
|
||||||
"max": [
|
|
||||||
41.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"type": "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 1,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 42,
|
|
||||||
"max": [
|
|
||||||
7.569169998168945,
|
|
||||||
158.69000244140625,
|
|
||||||
0.8566960096359253
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
6.6432600021362305,
|
|
||||||
151.98899841308594,
|
|
||||||
-3.55295991897583
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 2,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 42,
|
|
||||||
"max": [
|
|
||||||
0.980184018611908,
|
|
||||||
0.3233279883861542,
|
|
||||||
0.4895069897174835
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.8707389831542969,
|
|
||||||
-0.3086549937725067,
|
|
||||||
-0.2010059952735901
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 3,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 42,
|
|
||||||
"max": [
|
|
||||||
0.7207019925117493,
|
|
||||||
0.8640819787979126
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.7156370282173157,
|
|
||||||
0.8067020177841187
|
|
||||||
],
|
|
||||||
"type": "VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 4,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 42,
|
|
||||||
"max": [
|
|
||||||
0.0,
|
|
||||||
74.0,
|
|
||||||
73.0,
|
|
||||||
75.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 5,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 42,
|
|
||||||
"max": [
|
|
||||||
68.0,
|
|
||||||
78.0,
|
|
||||||
70.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 6,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 42,
|
|
||||||
"max": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 7,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 42,
|
|
||||||
"max": [
|
|
||||||
1.0,
|
|
||||||
0.02313319966197014,
|
|
||||||
0.01985890045762062,
|
|
||||||
0.005621309857815504
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.9537339806556702,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 8,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 42,
|
|
||||||
"max": [
|
|
||||||
0.0003756110090762377,
|
|
||||||
0.0002766030083876103,
|
|
||||||
2.8980000479350565e-06,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 9,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 42,
|
|
||||||
"max": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"type": "VEC4"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset": {
|
|
||||||
"generator": "mesh-modify",
|
|
||||||
"version": "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews": [
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 480,
|
|
||||||
"target": 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 504,
|
|
||||||
"byteOffset": 480,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 504,
|
|
||||||
"byteOffset": 984,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 336,
|
|
||||||
"byteOffset": 1488,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 336,
|
|
||||||
"byteOffset": 1824,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 336,
|
|
||||||
"byteOffset": 2160,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 336,
|
|
||||||
"byteOffset": 2496,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 672,
|
|
||||||
"byteOffset": 2832,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 672,
|
|
||||||
"byteOffset": 3504,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 672,
|
|
||||||
"byteOffset": 4176,
|
|
||||||
"target": 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers": [
|
|
||||||
{
|
|
||||||
"byteLength": 4848,
|
|
||||||
"name": "bufffer0",
|
|
||||||
"uri": "output.bin"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes": [
|
|
||||||
{
|
|
||||||
"name": "hair_bfShape_0.obj",
|
|
||||||
"primitives": [
|
|
||||||
{
|
|
||||||
"attributes": {
|
|
||||||
"JOINTS_0": 4,
|
|
||||||
"JOINTS_1": 5,
|
|
||||||
"JOINTS_2": 6,
|
|
||||||
"NORMAL": 2,
|
|
||||||
"POSITION": 1,
|
|
||||||
"TEXCOORD_0": 3,
|
|
||||||
"WEIGHTS_0": 7,
|
|
||||||
"WEIGHTS_1": 8,
|
|
||||||
"WEIGHTS_2": 9
|
|
||||||
},
|
|
||||||
"indices": 0,
|
|
||||||
"mode": 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"mesh": 0,
|
|
||||||
"name": "mesh"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"scene": 0,
|
|
||||||
"scenes": [
|
|
||||||
{
|
|
||||||
"nodes": [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
all:
|
|
||||||
python strip-buffer.py cloth.gltf
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# Strip unused buffer data.
|
|
||||||
|
|
||||||
T.B.W.
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
import json
|
|
||||||
import struct
|
|
||||||
import sys
|
|
||||||
|
|
||||||
if len(sys.argv) < 2:
|
|
||||||
print("Need input.gltf")
|
|
||||||
sys.exit(-1)
|
|
||||||
|
|
||||||
gltf_file = sys.argv[1]
|
|
||||||
#bin_file = sys.argv[1]
|
|
||||||
|
|
||||||
gltf = json.loads(open(gltf_file, "r", encoding='utf-8').read())
|
|
||||||
print(gltf)
|
|
||||||
|
|
||||||
#data = open(bin_file, "rb").read()
|
|
||||||
#print(len(data))
|
|
||||||
#
|
|
||||||
#out = data[100:]
|
|
||||||
#print(len(out))
|
|
||||||
#
|
|
||||||
#with open("output.bin", "wb") as f:
|
|
||||||
# f.write(out)
|
|
||||||
#
|
|
||||||
#print("DONE!")
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{ "buffer" : 0 }
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
local lib = import 'lowpoly-nodes.gltf';
|
|
||||||
{
|
|
||||||
//"muda": lib.skins[0].joints,
|
|
||||||
"bora": if std.length(lib.assets) then 0 else 1,
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
newmtl initialShadingGroup
|
|
||||||
illum 4
|
|
||||||
Kd 0.50 0.50 0.50
|
|
||||||
Ka 0.00 0.00 0.00
|
|
||||||
Tf 1.00 1.00 1.00
|
|
||||||
Ni 1.00
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
# GNU Make workspace makefile autogenerated by Premake
|
|
||||||
|
|
||||||
ifndef config
|
|
||||||
config=release_native
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef verbose
|
|
||||||
SILENT = @
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),release_native)
|
|
||||||
viwewer_config = release_native
|
|
||||||
endif
|
|
||||||
ifeq ($(config),release_x64)
|
|
||||||
viwewer_config = release_x64
|
|
||||||
endif
|
|
||||||
ifeq ($(config),release_x32)
|
|
||||||
viwewer_config = release_x32
|
|
||||||
endif
|
|
||||||
ifeq ($(config),debug_native)
|
|
||||||
viwewer_config = debug_native
|
|
||||||
endif
|
|
||||||
ifeq ($(config),debug_x64)
|
|
||||||
viwewer_config = debug_x64
|
|
||||||
endif
|
|
||||||
ifeq ($(config),debug_x32)
|
|
||||||
viwewer_config = debug_x32
|
|
||||||
endif
|
|
||||||
|
|
||||||
PROJECTS := viwewer
|
|
||||||
|
|
||||||
.PHONY: all clean help $(PROJECTS)
|
|
||||||
|
|
||||||
all: $(PROJECTS)
|
|
||||||
|
|
||||||
viwewer:
|
|
||||||
ifneq (,$(viwewer_config))
|
|
||||||
@echo "==== Building viwewer ($(viwewer_config)) ===="
|
|
||||||
@${MAKE} --no-print-directory -C . -f viwewer.make config=$(viwewer_config)
|
|
||||||
endif
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@${MAKE} --no-print-directory -C . -f viwewer.make clean
|
|
||||||
|
|
||||||
help:
|
|
||||||
@echo "Usage: make [config=name] [target]"
|
|
||||||
@echo ""
|
|
||||||
@echo "CONFIGURATIONS:"
|
|
||||||
@echo " release_native"
|
|
||||||
@echo " release_x64"
|
|
||||||
@echo " release_x32"
|
|
||||||
@echo " debug_native"
|
|
||||||
@echo " debug_x64"
|
|
||||||
@echo " debug_x32"
|
|
||||||
@echo ""
|
|
||||||
@echo "TARGETS:"
|
|
||||||
@echo " all (default)"
|
|
||||||
@echo " clean"
|
|
||||||
@echo " viwewer"
|
|
||||||
@echo ""
|
|
||||||
@echo "For more information, see http://industriousone.com/premake/quick-start"
|
|
||||||
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 871 KiB |
|
Before Width: | Height: | Size: 10 KiB |
@@ -1 +0,0 @@
|
|||||||
Makefile.dev
|
|
||||||
@@ -1,191 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors": [
|
|
||||||
{
|
|
||||||
"bufferView": 0,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 36,
|
|
||||||
"min": [
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"max": [
|
|
||||||
35.0
|
|
||||||
],
|
|
||||||
"normalized": false,
|
|
||||||
"type": "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 1,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 36,
|
|
||||||
"min": [
|
|
||||||
-1.0,
|
|
||||||
-1.0,
|
|
||||||
-1.0
|
|
||||||
],
|
|
||||||
"max": [
|
|
||||||
1.0,
|
|
||||||
1.0,
|
|
||||||
1.000001
|
|
||||||
],
|
|
||||||
"normalized": false,
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 2,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 36,
|
|
||||||
"min": [
|
|
||||||
-1.0,
|
|
||||||
-1.0,
|
|
||||||
-1.0
|
|
||||||
],
|
|
||||||
"max": [
|
|
||||||
1.0,
|
|
||||||
1.0,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"normalized": false,
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 3,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 36,
|
|
||||||
"min": [
|
|
||||||
0.0,
|
|
||||||
-0.0,
|
|
||||||
-1.0,
|
|
||||||
-1.0
|
|
||||||
],
|
|
||||||
"max": [
|
|
||||||
1.0,
|
|
||||||
-0.0,
|
|
||||||
-0.0,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"normalized": false,
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 4,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 36,
|
|
||||||
"min": [
|
|
||||||
-1.0,
|
|
||||||
-1.0
|
|
||||||
],
|
|
||||||
"max": [
|
|
||||||
1.0,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"normalized": false,
|
|
||||||
"type": "VEC2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset": {
|
|
||||||
"generator": "VKTS glTF 2.0 exporter",
|
|
||||||
"version": "2.0"
|
|
||||||
},
|
|
||||||
"buffers": [
|
|
||||||
{
|
|
||||||
"byteLength": 1800,
|
|
||||||
"uri": "Cube.bin"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"bufferViews": [
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 72,
|
|
||||||
"target": 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 432,
|
|
||||||
"byteOffset": 72,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 432,
|
|
||||||
"byteOffset": 504,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 576,
|
|
||||||
"byteOffset": 936,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 288,
|
|
||||||
"byteOffset": 1512,
|
|
||||||
"target": 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"images": [
|
|
||||||
{
|
|
||||||
"uri": "Cube_BaseColor.png"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"uri": "Cube_MetallicRoughness.png"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials": [
|
|
||||||
{
|
|
||||||
"name": "Cube"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes": [
|
|
||||||
{
|
|
||||||
"primitives": [
|
|
||||||
{
|
|
||||||
"attributes": {
|
|
||||||
"NORMAL": 2,
|
|
||||||
"POSITION": 1,
|
|
||||||
"TANGENT": 3,
|
|
||||||
"TEXCOORD_0": 4
|
|
||||||
},
|
|
||||||
"indices": 0,
|
|
||||||
"material": 0,
|
|
||||||
"mode": 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Cube"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"mesh": 0,
|
|
||||||
"name": "Cube",
|
|
||||||
"children": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"scene": 0,
|
|
||||||
"scenes": [
|
|
||||||
{
|
|
||||||
"nodes": [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"textures": [
|
|
||||||
{
|
|
||||||
"sampler": 0,
|
|
||||||
"source": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sampler": 0,
|
|
||||||
"source": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"samplers": [
|
|
||||||
{
|
|
||||||
"magFilter": 9729,
|
|
||||||
"minFilter": 9986,
|
|
||||||
"wrapR": 10497,
|
|
||||||
"wrapS": 10497,
|
|
||||||
"wrapT": 10497
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
# GNU Make workspace makefile autogenerated by Premake
|
|
||||||
|
|
||||||
ifndef config
|
|
||||||
config=debug_native
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef verbose
|
|
||||||
SILENT = @
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),debug_native)
|
|
||||||
skinning_config = debug_native
|
|
||||||
endif
|
|
||||||
ifeq ($(config),debug_x64)
|
|
||||||
skinning_config = debug_x64
|
|
||||||
endif
|
|
||||||
ifeq ($(config),debug_x32)
|
|
||||||
skinning_config = debug_x32
|
|
||||||
endif
|
|
||||||
ifeq ($(config),release_native)
|
|
||||||
skinning_config = release_native
|
|
||||||
endif
|
|
||||||
ifeq ($(config),release_x64)
|
|
||||||
skinning_config = release_x64
|
|
||||||
endif
|
|
||||||
ifeq ($(config),release_x32)
|
|
||||||
skinning_config = release_x32
|
|
||||||
endif
|
|
||||||
|
|
||||||
PROJECTS := skinning
|
|
||||||
|
|
||||||
.PHONY: all clean help $(PROJECTS)
|
|
||||||
|
|
||||||
all: $(PROJECTS)
|
|
||||||
|
|
||||||
skinning:
|
|
||||||
ifneq (,$(skinning_config))
|
|
||||||
@echo "==== Building skinning ($(skinning_config)) ===="
|
|
||||||
@${MAKE} --no-print-directory -C . -f skinning.make config=$(skinning_config)
|
|
||||||
endif
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@${MAKE} --no-print-directory -C . -f skinning.make clean
|
|
||||||
|
|
||||||
help:
|
|
||||||
@echo "Usage: make [config=name] [target]"
|
|
||||||
@echo ""
|
|
||||||
@echo "CONFIGURATIONS:"
|
|
||||||
@echo " debug_native"
|
|
||||||
@echo " debug_x64"
|
|
||||||
@echo " debug_x32"
|
|
||||||
@echo " release_native"
|
|
||||||
@echo " release_x64"
|
|
||||||
@echo " release_x32"
|
|
||||||
@echo ""
|
|
||||||
@echo "TARGETS:"
|
|
||||||
@echo " all (default)"
|
|
||||||
@echo " clean"
|
|
||||||
@echo " skinning"
|
|
||||||
@echo ""
|
|
||||||
@echo "For more information, see http://industriousone.com/premake/quick-start"
|
|
||||||
@@ -1,276 +0,0 @@
|
|||||||
# GNU Make project makefile autogenerated by Premake
|
|
||||||
|
|
||||||
ifndef config
|
|
||||||
config=debug_native
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef verbose
|
|
||||||
SILENT = @
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: clean prebuild prelink
|
|
||||||
|
|
||||||
ifeq ($(config),debug_native)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/native/Debug
|
|
||||||
TARGET = $(TARGETDIR)/skinning
|
|
||||||
OBJDIR = obj/native/Debug
|
|
||||||
DEFINES += -DDEBUG
|
|
||||||
INCLUDES += -I. -I../..
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -g -Wall -Wextra
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -g -Wall -Wextra -std=c++11
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),debug_x64)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/x64/Debug
|
|
||||||
TARGET = $(TARGETDIR)/skinning
|
|
||||||
OBJDIR = obj/x64/Debug
|
|
||||||
DEFINES += -DDEBUG
|
|
||||||
INCLUDES += -I. -I../..
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m64 -g -Wall -Wextra
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m64 -g -Wall -Wextra -std=c++11
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib64 -m64 `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),debug_x32)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/x32/Debug
|
|
||||||
TARGET = $(TARGETDIR)/skinning
|
|
||||||
OBJDIR = obj/x32/Debug
|
|
||||||
DEFINES += -DDEBUG
|
|
||||||
INCLUDES += -I. -I../..
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m32 -g -Wall -Wextra
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m32 -g -Wall -Wextra -std=c++11
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib32 -m32 `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),release_native)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/native/Release
|
|
||||||
TARGET = $(TARGETDIR)/skinning
|
|
||||||
OBJDIR = obj/native/Release
|
|
||||||
DEFINES += -DNDEBUG
|
|
||||||
INCLUDES += -I. -I../..
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -O2 -Wall -Wextra
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -O2 -Wall -Wextra -std=c++11
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -s `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),release_x64)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/x64/Release
|
|
||||||
TARGET = $(TARGETDIR)/skinning
|
|
||||||
OBJDIR = obj/x64/Release
|
|
||||||
DEFINES += -DNDEBUG
|
|
||||||
INCLUDES += -I. -I../..
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m64 -O2 -Wall -Wextra
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m64 -O2 -Wall -Wextra -std=c++11
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib64 -m64 -s `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(config),release_x32)
|
|
||||||
RESCOMP = windres
|
|
||||||
TARGETDIR = bin/x32/Release
|
|
||||||
TARGET = $(TARGETDIR)/skinning
|
|
||||||
OBJDIR = obj/x32/Release
|
|
||||||
DEFINES += -DNDEBUG
|
|
||||||
INCLUDES += -I. -I../..
|
|
||||||
FORCE_INCLUDE +=
|
|
||||||
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
|
|
||||||
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m32 -O2 -Wall -Wextra
|
|
||||||
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m32 -O2 -Wall -Wextra -std=c++11
|
|
||||||
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
|
|
||||||
LIBS += -lGL -lGLU -lm -lGLEW -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl
|
|
||||||
LDDEPS +=
|
|
||||||
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib32 -m32 -s `pkg-config --libs glfw3`
|
|
||||||
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
|
|
||||||
define PREBUILDCMDS
|
|
||||||
endef
|
|
||||||
define PRELINKCMDS
|
|
||||||
endef
|
|
||||||
define POSTBUILDCMDS
|
|
||||||
endef
|
|
||||||
all: prebuild prelink $(TARGET)
|
|
||||||
@:
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
OBJECTS := \
|
|
||||||
$(OBJDIR)/matrix.o \
|
|
||||||
$(OBJDIR)/trackball.o \
|
|
||||||
$(OBJDIR)/main.o \
|
|
||||||
$(OBJDIR)/morph-targets.o \
|
|
||||||
$(OBJDIR)/skinning.o \
|
|
||||||
|
|
||||||
RESOURCES := \
|
|
||||||
|
|
||||||
CUSTOMFILES := \
|
|
||||||
|
|
||||||
SHELLTYPE := msdos
|
|
||||||
ifeq (,$(ComSpec)$(COMSPEC))
|
|
||||||
SHELLTYPE := posix
|
|
||||||
endif
|
|
||||||
ifeq (/bin,$(findstring /bin,$(SHELL)))
|
|
||||||
SHELLTYPE := posix
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(TARGET): $(GCH) ${CUSTOMFILES} $(OBJECTS) $(LDDEPS) $(RESOURCES)
|
|
||||||
@echo Linking skinning
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) mkdir -p $(TARGETDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) mkdir $(subst /,\\,$(TARGETDIR))
|
|
||||||
endif
|
|
||||||
$(SILENT) $(LINKCMD)
|
|
||||||
$(POSTBUILDCMDS)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@echo Cleaning skinning
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) rm -f $(TARGET)
|
|
||||||
$(SILENT) rm -rf $(OBJDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) if exist $(subst /,\\,$(TARGET)) del $(subst /,\\,$(TARGET))
|
|
||||||
$(SILENT) if exist $(subst /,\\,$(OBJDIR)) rmdir /s /q $(subst /,\\,$(OBJDIR))
|
|
||||||
endif
|
|
||||||
|
|
||||||
prebuild:
|
|
||||||
$(PREBUILDCMDS)
|
|
||||||
|
|
||||||
prelink:
|
|
||||||
$(PRELINKCMDS)
|
|
||||||
|
|
||||||
ifneq (,$(PCH))
|
|
||||||
$(OBJECTS): $(GCH) $(PCH)
|
|
||||||
$(GCH): $(PCH)
|
|
||||||
@echo $(notdir $<)
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) mkdir -p $(OBJDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) mkdir $(subst /,\\,$(OBJDIR))
|
|
||||||
endif
|
|
||||||
$(SILENT) $(CXX) -x c++-header $(ALL_CXXFLAGS) -o "$@" -MF "$(@:%.gch=%.d)" -c "$<"
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(OBJDIR)/matrix.o: ../common/matrix.cc
|
|
||||||
@echo $(notdir $<)
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) mkdir -p $(OBJDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) mkdir $(subst /,\\,$(OBJDIR))
|
|
||||||
endif
|
|
||||||
$(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
|
|
||||||
$(OBJDIR)/trackball.o: ../common/trackball.cc
|
|
||||||
@echo $(notdir $<)
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) mkdir -p $(OBJDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) mkdir $(subst /,\\,$(OBJDIR))
|
|
||||||
endif
|
|
||||||
$(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
|
|
||||||
$(OBJDIR)/main.o: main.cc
|
|
||||||
@echo $(notdir $<)
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) mkdir -p $(OBJDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) mkdir $(subst /,\\,$(OBJDIR))
|
|
||||||
endif
|
|
||||||
$(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
|
|
||||||
$(OBJDIR)/morph-targets.o: morph-targets.cc
|
|
||||||
@echo $(notdir $<)
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) mkdir -p $(OBJDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) mkdir $(subst /,\\,$(OBJDIR))
|
|
||||||
endif
|
|
||||||
$(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
|
|
||||||
$(OBJDIR)/skinning.o: skinning.cc
|
|
||||||
@echo $(notdir $<)
|
|
||||||
ifeq (posix,$(SHELLTYPE))
|
|
||||||
$(SILENT) mkdir -p $(OBJDIR)
|
|
||||||
else
|
|
||||||
$(SILENT) mkdir $(subst /,\\,$(OBJDIR))
|
|
||||||
endif
|
|
||||||
$(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
|
|
||||||
|
|
||||||
-include $(OBJECTS:%.o=%.d)
|
|
||||||
ifneq (,$(PCH))
|
|
||||||
-include $(OBJDIR)/$(notdir $(PCH)).d
|
|
||||||
endif
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
# Use this for strict compilation check(will work on clang 3.8+)
|
|
||||||
EXTRA_CXXFLAGS := -Wall -Werror -Weverything -Wno-c++11-long-long -Wno-c++98-compat
|
|
||||||
|
|
||||||
all:
|
|
||||||
clang++ $(EXTRA_CXXFLAGS) -I../../ -std=c++11 -g -O0 -o main main.cpp
|
|
||||||
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors" : [
|
|
||||||
{
|
|
||||||
"bufferView" : 0,
|
|
||||||
"componentType" : 5121,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
23
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"type" : "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 1,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 24,
|
|
||||||
"max" : [
|
|
||||||
1.0000004768371582,
|
|
||||||
1.0,
|
|
||||||
1.0000005960464478
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.0000003576278687,
|
|
||||||
-1.0,
|
|
||||||
-1.0000003576278687
|
|
||||||
],
|
|
||||||
"type" : "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 2,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 24,
|
|
||||||
"max" : [
|
|
||||||
1.0,
|
|
||||||
1.0,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.0,
|
|
||||||
-1.0,
|
|
||||||
-1.0
|
|
||||||
],
|
|
||||||
"type" : "VEC3"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset" : {
|
|
||||||
"generator" : "Khronos Blender glTF 2.0 exporter",
|
|
||||||
"version" : "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews" : [
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 36,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"target" : 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 288,
|
|
||||||
"byteOffset" : 36,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 288,
|
|
||||||
"byteOffset" : 324,
|
|
||||||
"target" : 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers" : [
|
|
||||||
{
|
|
||||||
"byteLength" : 612,
|
|
||||||
"uri" : "data:application/octet-stream;base64,AAECAwEABAUGBAcFCAkKCAsJDA0ODA8NEBESEBMRFBUWFBcVAACAPwAAgL///3+/AQCAvwAAgL/9/38/+v9/vwAAgL8DAIC/AACAPwAAgL8AAIA/AwCAvwAAgD/6/38/BACAPwAAgD/3/3+///9/vwAAgD8AAIC/9f9/PwAAgD8FAIA/BACAPwAAgD/3/3+/AACAPwAAgL8AAIA/AACAPwAAgL///3+/9f9/PwAAgD8FAIA/9f9/PwAAgD8FAIA/AQCAvwAAgL/9/38/AACAPwAAgL8AAIA/AwCAvwAAgD/6/38/AwCAvwAAgD/6/38/+v9/vwAAgL8DAIC/AQCAvwAAgL/9/38///9/vwAAgD8AAIC///9/vwAAgD8AAIC/AACAPwAAgL///3+/+v9/vwAAgL8DAIC/BACAPwAAgD/3/3+/AAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAP+z/PzMAAJg0AACAP+z/PzMAAJg0AACAP+z/PzMAAJg0AACAP+z/PzMAAJg0AACYtAkA4LMAAIA/AACYtAkA4LMAAIA/AACYtAkA4LMAAIA/AACYtAkA4LMAAIA/AACAv///D7QCAHC0AACAv///D7QCAHC0AACAv///D7QCAHC0AACAv///D7QCAHC0AACANAAAYDQAAIC/AACANAAAYDQAAIC/AACANAAAYDQAAIC/AACANAAAYDQAAIC/"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials" : [
|
|
||||||
{
|
|
||||||
"name" : "Material",
|
|
||||||
"pbrMetallicRoughness" : {
|
|
||||||
"baseColorFactor" : [
|
|
||||||
0.6400000190734865,
|
|
||||||
0.6400000190734865,
|
|
||||||
0.6400000190734865,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"metallicFactor" : 0.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes" : [
|
|
||||||
{
|
|
||||||
"name" : "Cube",
|
|
||||||
"primitives" : [
|
|
||||||
{
|
|
||||||
"attributes" : {
|
|
||||||
"NORMAL" : 2,
|
|
||||||
"POSITION" : 1
|
|
||||||
},
|
|
||||||
"indices" : 0,
|
|
||||||
"material" : 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes" : [
|
|
||||||
{
|
|
||||||
"mesh" : 0,
|
|
||||||
"name" : "Cube"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"scene" : 0,
|
|
||||||
"scenes" : [
|
|
||||||
{
|
|
||||||
"name" : "Scene",
|
|
||||||
"nodes" : [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#define TINYGLTF_IMPLEMENTATION
|
|
||||||
#define TINYGLTF_NO_STB_IMAGE
|
|
||||||
#define TINYGLTF_NO_STB_IMAGE_WRITE
|
|
||||||
#include "tiny_gltf.h"
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __clang__
|
|
||||||
#pragma clang diagnostic ignored "-Weverything"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static int _allocs = 0;
|
|
||||||
|
|
||||||
void* operator new( size_t size )
|
|
||||||
{
|
|
||||||
++_allocs;
|
|
||||||
return malloc( size );
|
|
||||||
}
|
|
||||||
|
|
||||||
void* operator new[]( size_t size )
|
|
||||||
{
|
|
||||||
++_allocs;
|
|
||||||
return malloc( size );
|
|
||||||
}
|
|
||||||
|
|
||||||
void operator delete( void* memory )
|
|
||||||
{
|
|
||||||
--_allocs;
|
|
||||||
free( memory );
|
|
||||||
}
|
|
||||||
|
|
||||||
void operator delete( void* memory, size_t size )
|
|
||||||
{
|
|
||||||
--_allocs;
|
|
||||||
free( memory );
|
|
||||||
}
|
|
||||||
|
|
||||||
void operator delete[]( void* memory )
|
|
||||||
{
|
|
||||||
--_allocs;
|
|
||||||
free( memory );
|
|
||||||
}
|
|
||||||
|
|
||||||
void operator delete[]( void* memory, size_t size )
|
|
||||||
{
|
|
||||||
--_allocs;
|
|
||||||
free( memory );
|
|
||||||
}
|
|
||||||
|
|
||||||
void test()
|
|
||||||
{
|
|
||||||
tinygltf::TinyGLTF loader;
|
|
||||||
tinygltf::Model model;
|
|
||||||
|
|
||||||
bool status = loader.LoadASCIIFromFile( &model, NULL, NULL, "box.gltf" );
|
|
||||||
printf( "status: %d\n", status );
|
|
||||||
}
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
printf( "before: %d\n", _allocs );
|
|
||||||
test();
|
|
||||||
printf( "after: %d\n", _allocs );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
#ifdef VALIJSON_BUILD_CXX11_ADAPTERS
|
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
|
||||||
|
|
||||||
#include <valijson/adapters/json11_adapter.hpp>
|
|
||||||
|
|
||||||
class TestJson11Adapter : public testing::Test
|
|
||||||
{
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
TEST_F(TestJson11Adapter, BasicArrayIteration)
|
|
||||||
{
|
|
||||||
const unsigned int numElements = 10;
|
|
||||||
|
|
||||||
// Create a Json11 document that consists of an array of numbers
|
|
||||||
json11::Json::array array;
|
|
||||||
for (unsigned int i = 0; i < numElements; i++) {
|
|
||||||
json11::Json value(static_cast<double>(i));
|
|
||||||
array.push_back(value);
|
|
||||||
}
|
|
||||||
json11::Json document(array);
|
|
||||||
|
|
||||||
// Ensure that wrapping the document preserves the array and does not allow
|
|
||||||
// it to be cast to other types
|
|
||||||
valijson::adapters::Json11Adapter adapter(document);
|
|
||||||
ASSERT_NO_THROW( adapter.getArray() );
|
|
||||||
ASSERT_ANY_THROW( adapter.getBool() );
|
|
||||||
ASSERT_ANY_THROW( adapter.getDouble() );
|
|
||||||
ASSERT_ANY_THROW( adapter.getObject() );
|
|
||||||
ASSERT_ANY_THROW( adapter.getString() );
|
|
||||||
|
|
||||||
// Ensure that the array contains the expected number of elements
|
|
||||||
EXPECT_EQ( numElements, adapter.getArray().size() );
|
|
||||||
|
|
||||||
// Ensure that the elements are returned in the order they were inserted
|
|
||||||
unsigned int expectedValue = 0;
|
|
||||||
for (const valijson::adapters::Json11Adapter value : adapter.getArray()) {
|
|
||||||
ASSERT_TRUE( value.isNumber() );
|
|
||||||
EXPECT_EQ( double(expectedValue), value.getDouble() );
|
|
||||||
expectedValue++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure that the correct number of elements were iterated over
|
|
||||||
EXPECT_EQ(numElements, expectedValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(TestJson11Adapter, BasicObjectIteration)
|
|
||||||
{
|
|
||||||
const unsigned int numElements = 10;
|
|
||||||
|
|
||||||
// Create a DropBoxJson11 document that consists of an object that maps numeric
|
|
||||||
// strings their corresponding numeric values
|
|
||||||
json11::Json::object object;
|
|
||||||
for (unsigned int i = 0; i < numElements; i++) {
|
|
||||||
std::string name(std::to_string(i));
|
|
||||||
object[name] = json11::Json(static_cast<double>(i));
|
|
||||||
}
|
|
||||||
json11::Json document(object);
|
|
||||||
|
|
||||||
// Ensure that wrapping the document preserves the object and does not
|
|
||||||
// allow it to be cast to other types
|
|
||||||
valijson::adapters::Json11Adapter adapter(document);
|
|
||||||
ASSERT_NO_THROW( adapter.getObject() );
|
|
||||||
ASSERT_ANY_THROW( adapter.getArray() );
|
|
||||||
ASSERT_ANY_THROW( adapter.getBool() );
|
|
||||||
ASSERT_ANY_THROW( adapter.getDouble() );
|
|
||||||
ASSERT_ANY_THROW( adapter.getString() );
|
|
||||||
|
|
||||||
// Ensure that the object contains the expected number of members
|
|
||||||
EXPECT_EQ( numElements, adapter.getObject().size() );
|
|
||||||
|
|
||||||
// Ensure that the members are returned in the order they were inserted
|
|
||||||
unsigned int expectedValue = 0;
|
|
||||||
for (const valijson::adapters::Json11Adapter::ObjectMember member : adapter.getObject()) {
|
|
||||||
ASSERT_TRUE( member.second.isNumber() );
|
|
||||||
EXPECT_EQ( std::to_string(expectedValue), member.first );
|
|
||||||
EXPECT_EQ( double(expectedValue), member.second.getDouble() );
|
|
||||||
expectedValue++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure that the correct number of elements were iterated over
|
|
||||||
EXPECT_EQ( numElements, expectedValue );
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // VALIJSON_BUILD_CXX11_ADAPTERS
|
|
||||||
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
all:
|
|
||||||
python gen.py /home/syoyo/work/glTF/specification/2.0/schema/
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
CXX=/mnt/data/local/llvm-mingw-20200325-ubuntu-18.04/bin/x86_64-w64-mingw32-clang++
|
|
||||||
#CXX=x86_64-w64-mingw32-g++
|
|
||||||
|
|
||||||
all: ../tiny_gltf.h
|
|
||||||
$(CXX) -fuse-ld=lld -I../ $(EXTRA_CXXFLAGS) -std=c++11 -g -O0 -o tester.exe tester.cc
|
|
||||||
@@ -1,209 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors" : [
|
|
||||||
{
|
|
||||||
"bufferView" : 0,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5123,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
35
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"type" : "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 1,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000,
|
|
||||||
1.000001
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 2,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 3,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
-0.000000,
|
|
||||||
-0.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
0.000000,
|
|
||||||
-0.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 4,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset" : {
|
|
||||||
"generator" : "VKTS glTF 2.0 exporter",
|
|
||||||
"version" : "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews" : [
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 72,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"target" : 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 432,
|
|
||||||
"byteOffset" : 72,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 432,
|
|
||||||
"byteOffset" : 504,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 576,
|
|
||||||
"byteOffset" : 936,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 288,
|
|
||||||
"byteOffset" : 1512,
|
|
||||||
"target" : 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers" : [
|
|
||||||
{
|
|
||||||
"byteLength" : 1800,
|
|
||||||
"uri" : "Cube.bin"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"uri" : "Cube_BaseColor.png"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"uri" : "Cube_MetallicRoughness.png"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials" : [
|
|
||||||
{"emissiveTexture": {
|
|
||||||
"index": 0,
|
|
||||||
"extensions": {
|
|
||||||
"KHR_texture_transform": {
|
|
||||||
"offset": [0, 1],
|
|
||||||
"scale": [1, -1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}},
|
|
||||||
{
|
|
||||||
"name" : "Cube",
|
|
||||||
"pbrMetallicRoughness" : {
|
|
||||||
"baseColorTexture" : {
|
|
||||||
"index" : 0
|
|
||||||
},
|
|
||||||
"metallicRoughnessTexture" : {
|
|
||||||
"index" : 1,
|
|
||||||
"extensions": {
|
|
||||||
"KHR_texture_transform": {
|
|
||||||
"offset": [0, 1],
|
|
||||||
"rotation": 1.57079632679,
|
|
||||||
"scale": [0.5, 0.5]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes" : [
|
|
||||||
{
|
|
||||||
"name" : "Cube",
|
|
||||||
"primitives" : [
|
|
||||||
{
|
|
||||||
"attributes" : {
|
|
||||||
"NORMAL" : 2,
|
|
||||||
"POSITION" : 1,
|
|
||||||
"TANGENT" : 3,
|
|
||||||
"TEXCOORD_0" : 4
|
|
||||||
},
|
|
||||||
"indices" : 0,
|
|
||||||
"material" : 0,
|
|
||||||
"mode" : 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes" : [
|
|
||||||
{
|
|
||||||
"mesh" : 0,
|
|
||||||
"name" : "Cube"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"samplers" : [
|
|
||||||
{}
|
|
||||||
],
|
|
||||||
"scene" : 0,
|
|
||||||
"scenes" : [
|
|
||||||
{
|
|
||||||
"nodes" : [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"textures" : [
|
|
||||||
{
|
|
||||||
"sampler" : 0,
|
|
||||||
"source" : 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sampler" : 0,
|
|
||||||
"source" : 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
@@ -1,193 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors" : [
|
|
||||||
{
|
|
||||||
"bufferView" : 0,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5123,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
35
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"type" : "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 1,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000,
|
|
||||||
1.000001
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 2,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 3,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
-0.000000,
|
|
||||||
-0.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
0.000000,
|
|
||||||
-0.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 4,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset" : {
|
|
||||||
"generator" : "VKTS glTF 2.0 exporter",
|
|
||||||
"version" : "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews" : [
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 72,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"target" : 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 432,
|
|
||||||
"byteOffset" : 72,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 432,
|
|
||||||
"byteOffset" : 504,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 576,
|
|
||||||
"byteOffset" : 936,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 288,
|
|
||||||
"byteOffset" : 1512,
|
|
||||||
"target" : 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers" : [
|
|
||||||
{
|
|
||||||
"byteLength" : 1800,
|
|
||||||
"uri" : "Cube.bin"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"uri" : "Cube_BaseColor.png"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"uri" : "Cube_MetallicRoughness.png"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials" : [
|
|
||||||
{
|
|
||||||
"name" : "Cube",
|
|
||||||
"pbrMetallicRoughness" : {
|
|
||||||
"baseColorTexture" : {
|
|
||||||
"index" : 0
|
|
||||||
},
|
|
||||||
"metallicRoughnessTexture" : {
|
|
||||||
"index" : 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes" : [
|
|
||||||
{
|
|
||||||
"name" : "Cube",
|
|
||||||
"primitives" : [
|
|
||||||
{
|
|
||||||
"attributes" : {
|
|
||||||
"NORMAL" : 2,
|
|
||||||
"POSITION" : 1,
|
|
||||||
"TANGENT" : 3,
|
|
||||||
"TEXCOORD_0" : 4
|
|
||||||
},
|
|
||||||
"indices" : 0,
|
|
||||||
"material" : 0,
|
|
||||||
"mode" : 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes" : [
|
|
||||||
{
|
|
||||||
"mesh" : 0,
|
|
||||||
"name" : "Cube"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"samplers" : [
|
|
||||||
{}
|
|
||||||
],
|
|
||||||
"scene" : 0,
|
|
||||||
"scenes" : [
|
|
||||||
{
|
|
||||||
"nodes" : [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"textures" : [
|
|
||||||
{
|
|
||||||
"sampler" : 0,
|
|
||||||
"source" : 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sampler" : 0,
|
|
||||||
"source" : 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,197 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors" : [
|
|
||||||
{
|
|
||||||
"bufferView" : 0,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5123,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
35
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"type" : "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 1,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000,
|
|
||||||
1.000001
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 2,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 3,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
-0.000000,
|
|
||||||
-0.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
0.000000,
|
|
||||||
-0.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 4,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset" : {
|
|
||||||
"generator" : "VKTS glTF 2.0 exporter",
|
|
||||||
"version" : "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews" : [
|
|
||||||
{
|
|
||||||
"buffer" : 1,
|
|
||||||
"byteLength" : 72,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"target" : 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 1,
|
|
||||||
"byteLength" : 432,
|
|
||||||
"byteOffset" : 72,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 1,
|
|
||||||
"byteLength" : 432,
|
|
||||||
"byteOffset" : 504,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 1,
|
|
||||||
"byteLength" : 576,
|
|
||||||
"byteOffset" : 936,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 1,
|
|
||||||
"byteLength" : 288,
|
|
||||||
"byteOffset" : 1512,
|
|
||||||
"target" : 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers" : [
|
|
||||||
{
|
|
||||||
"byteLength" : 1800,
|
|
||||||
"uri" : "Cube.bin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"byteLength" : 1800,
|
|
||||||
"uri" : "Cube.bin2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"uri" : "Cube_BaseColor.png"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"uri" : "Cube_MetallicRoughness.png"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials" : [
|
|
||||||
{
|
|
||||||
"name" : "Cube",
|
|
||||||
"pbrMetallicRoughness" : {
|
|
||||||
"baseColorTexture" : {
|
|
||||||
"index" : 0
|
|
||||||
},
|
|
||||||
"metallicRoughnessTexture" : {
|
|
||||||
"index" : 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes" : [
|
|
||||||
{
|
|
||||||
"name" : "Cube",
|
|
||||||
"primitives" : [
|
|
||||||
{
|
|
||||||
"attributes" : {
|
|
||||||
"NORMAL" : 2,
|
|
||||||
"POSITION" : 1,
|
|
||||||
"TANGENT" : 3,
|
|
||||||
"TEXCOORD_0" : 4
|
|
||||||
},
|
|
||||||
"indices" : 0,
|
|
||||||
"material" : 0,
|
|
||||||
"mode" : 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes" : [
|
|
||||||
{
|
|
||||||
"mesh" : 0,
|
|
||||||
"name" : "Cube"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"samplers" : [
|
|
||||||
{}
|
|
||||||
],
|
|
||||||
"scene" : 0,
|
|
||||||
"scenes" : [
|
|
||||||
{
|
|
||||||
"nodes" : [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"textures" : [
|
|
||||||
{
|
|
||||||
"sampler" : 0,
|
|
||||||
"source" : 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sampler" : 0,
|
|
||||||
"source" : 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 871 KiB |
|
Before Width: | Height: | Size: 319 B |
@@ -1,9 +0,0 @@
|
|||||||
rm -rf build
|
|
||||||
mkdir build
|
|
||||||
|
|
||||||
WASI_VERSION=16
|
|
||||||
WASI_VERSION_FULL=${WASI_VERSION}.0
|
|
||||||
|
|
||||||
WASI_SDK_PATH=$HOME/local/wasi-sdk-${WASI_VERSION_FULL}
|
|
||||||
|
|
||||||
CC=${WASI_SDK_PATH}/bin/clang CXX=${WASI_SDK_PATH}/bin/clang++ cmake -DWASI_SDK_PATH=${WASI_SDK_PATH} -Bbuild -DCMAKE_BUILD_TYPE=MinSizeRel -S.
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
import wasmtime.loader
|
|
||||||
|
|
||||||
# Assuming `your_wasm_file.wasm` is in the python load path...
|
|
||||||
import loader_example
|
|
||||||
|
|
||||||
# Now you're compiled and instantiated and ready to go!
|
|
||||||
print(loader_example.main())
|
|
||||||
@@ -1,223 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors" : [
|
|
||||||
{
|
|
||||||
"bufferView" : 0,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5123,
|
|
||||||
"count" : 18,
|
|
||||||
"max" : [
|
|
||||||
35
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"type" : "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 1,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000,
|
|
||||||
1.000001
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 2,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 3,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
-0.000000,
|
|
||||||
-0.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
0.000000,
|
|
||||||
-0.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 4,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 5,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5123,
|
|
||||||
"count" : 18,
|
|
||||||
"max" : [
|
|
||||||
71
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
36
|
|
||||||
],
|
|
||||||
"type" : "SCALAR"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset" : {
|
|
||||||
"generator" : "VKTS glTF 2.0 exporter",
|
|
||||||
"version" : "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews" : [
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 36,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"target" : 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 432,
|
|
||||||
"byteOffset" : 72,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 432,
|
|
||||||
"byteOffset" : 504,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 576,
|
|
||||||
"byteOffset" : 936,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 288,
|
|
||||||
"byteOffset" : 1512,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 36,
|
|
||||||
"byteOffset" : 36,
|
|
||||||
"target" : 34963
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers" : [
|
|
||||||
{
|
|
||||||
"byteLength" : 1800,
|
|
||||||
"uri" : "Cube.bin"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"uri" : "Cube_BaseColor.png"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"uri" : "Cube_MetallicRoughness.png"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials" : [
|
|
||||||
{
|
|
||||||
"name" : "Cube",
|
|
||||||
"pbrMetallicRoughness" : {
|
|
||||||
"baseColorTexture" : {
|
|
||||||
"index" : 0
|
|
||||||
},
|
|
||||||
"metallicRoughnessTexture" : {
|
|
||||||
"index" : 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes" : [
|
|
||||||
{
|
|
||||||
"name" : "Cube",
|
|
||||||
"primitives" : [
|
|
||||||
{
|
|
||||||
"attributes" : {
|
|
||||||
"NORMAL" : 2,
|
|
||||||
"POSITION" : 1,
|
|
||||||
"TANGENT" : 3,
|
|
||||||
"TEXCOORD_0" : 4
|
|
||||||
},
|
|
||||||
"indices" : 0,
|
|
||||||
"material" : 0,
|
|
||||||
"mode" : 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"attributes" : {
|
|
||||||
"NORMAL" : 2,
|
|
||||||
"POSITION" : 1,
|
|
||||||
"TANGENT" : 3,
|
|
||||||
"TEXCOORD_0" : 4
|
|
||||||
},
|
|
||||||
"indices" : 5,
|
|
||||||
"material" : 0,
|
|
||||||
"mode" : 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes" : [
|
|
||||||
{
|
|
||||||
"mesh" : 0,
|
|
||||||
"name" : "Cube"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"samplers" : [
|
|
||||||
{}
|
|
||||||
],
|
|
||||||
"scene" : 0,
|
|
||||||
"scenes" : [
|
|
||||||
{
|
|
||||||
"nodes" : [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"textures" : [
|
|
||||||
{
|
|
||||||
"sampler" : 0,
|
|
||||||
"source" : 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sampler" : 0,
|
|
||||||
"source" : 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
0
attic/deps/cpplint.py → deps/cpplint.py
vendored
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |