blob: ed5ebfdbc041577540dd2b48394422df5b279274 [file] [view] [edit]
# Repository Guidelines
## Project Structure & Module Organization
- Core library lives in `tiny_gltf.h` (header-only) with `tiny_gltf.cc` provided for the amalgamated implementation flags. Keep public API updates localized and documented.
- Example viewers and utilities sit under `examples/`; use them as references for loading, validation, and WASM builds. Temporary build outputs belong in `build/` (git-ignored).
- Tests reside in `tests/` with sample assets in `data/` and `models/`; avoid committing generated binaries in `build/`, `tmp/`, or `tests/tester*`.
## Build, Test, and Development Commands
- Quick build of the loader example: `make` (uses clang++, C++11, optional `EXTRA_CXXFLAGS` for sanitizers).
- Unit tests: `cd tests && make && ./tester && ./tester_noexcept`.
- Parsing regression run: build `loader_example`, then `python test_runner.py` (requires local glTF-Sample-Models checkout and path update inside the script).
- CMake alternative: `cmake -S . -B build && cmake --build build` for IDE integration or non-clang toolchains.
- Lint header: `python deps/cpplint.py tiny_gltf.h`.
## Coding Style & Naming Conventions
- C++11, two-space indent, braces on the same line; mirror existing spacing and comment style in `tiny_gltf.h`.
- Prefer `std::` facilities and minimal dependencies; keep new symbols in the `tinygltf` namespace.
- Public API names stay PascalCase for types and camelCase for functions; keep enums/macros consistent with existing `TINYGLTF_*` patterns.
- Guard optional features with the established `TINYGLTF_*` defines; avoid introducing new globals without discussion.
## Testing Guidelines
- Framework: Catch2 single-header (`tests/catch.hpp`); add `TEST_CASE` blocks alongside related helpers in `tests/tester.cc`.
- Provide coverage for both exception-enabled and `TINYGLTF_NOEXCEPTION` builds; run both `tester` binaries before submitting.
- For new formats or parsing code, add assets under `tests/` or reference `data/` and note provenance.
## Commit & Pull Request Guidelines
- Commit messages: concise, present-tense imperatives mirroring existing history (e.g., Add bounds check to images loaded from bufferviews”).
- PRs should describe the change, motivation, and testing (`tester`, `tester_noexcept`, fuzzing if relevant); link related issues.
- Include platform notes if behavior differs (Windows vs. POSIX, filesystem callbacks, WASM). Add before/after metrics when touching performance-sensitive paths.
## Security & Configuration Tips
- Handle external data defensively: validate buffer sizes, offsets, and URI handling; prefer bounded allocations.
- Keep optional callbacks (`fs::`, URI, image) robust against untrusted input; document new failure modes.
- Avoid committing sample assets with unclear licensing; reuse existing test fixtures where possible.