commit | 0f76561ebf21f56b4f38887ec4e6ae89c2d95c03 | [log] [tgz] |
---|---|---|
author | Syoyo Fujita <syoyo@lighttransport.com> | Sat Jul 03 22:06:29 2021 +0900 |
committer | Syoyo Fujita <syoyo@lighttransport.com> | Sat Jul 03 22:06:29 2021 +0900 |
tree | 88986a9e45c64e7d0f87ac0cb4a6590857039bdf | |
parent | f3dc4acaa48ac6295350a6cf52a0a4a9920f859d [diff] |
Add readme to use tinygtf through cmake + add_subdirectory.
TinyGLTF
is a header only C++11 glTF 2.0 https://github.com/KhronosGroup/glTF library.
TinyGLTF
uses Niels Lohmann's json library(https://github.com/nlohmann/json), so now it requires C++11 compiler. If you are looking for old, C++03 version, please use devel-picojson
branch(but not maintained anymore).
sajson
: Use sajson to parse JSON. Parsing only but faster compile time(2x reduction compared to json.hpp and RapidJson)json.hpp
..bin
file.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.
extensions
and extras
propertyanimation
and skin
TinyGLTF is licensed under MIT license.
TinyGLTF uses the following third party libraries.
Copy stb_image.h
, stb_image_write.h
, json.hpp
and tiny_gltf.h
to your project.
// 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; bool ret = loader.LoadASCIIFromFile(&model, &err, &warn, argv[1]); //bool ret = loader.LoadBinaryFromFile(&model, &err, &warn, argv[1]); // 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\n"); return -1; }
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).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 featrure.TINYGLTF_USE_CPP14
: Use C++14 feature(requires C++14 compiler). This may give better performance than C++11.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)
Python 2.6 or 2.7 required. Git clone https://github.com/KhronosGroup/glTF-Sample-Models to your local dir.
After building loader_example
, edit test_runner.py
, then,
$ python test_runner.py
$ cd tests $ make $ ./tester $ ./tester_noexcept
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.