Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
ebb714c
Initial plan
Copilot Mar 7, 2026
5b90381
Add optimized parser with multithreading, SIMD, and custom allocator …
Copilot Mar 7, 2026
fc371bd
Address code review: fix NEON comment, add portable ctz, implement mt…
Copilot Mar 7, 2026
9f65381
Update tiny_obj_loader.h
syoyo Mar 9, 2026
7d46e5e
Fix CI: guard C++11 tests behind preprocessor check; fix name_len +1 OOB
Copilot Mar 9, 2026
3038926
Address review: remove line buffer copy, fix leading decimal dot pars…
Copilot Mar 9, 2026
75dc2b0
Add null check for buf pointer and use consistent test tolerances
Copilot Mar 9, 2026
c498e9a
Merge release into copilot/optimize-parser-for-huge-meshes
syoyo Mar 11, 2026
2a57c8b
Comprehensive review: fix data races, face validation, line endings, …
Copilot Mar 11, 2026
3ab01d6
Address code review: improve sentinel comment, intrin.h placement, st…
Copilot Mar 11, 2026
2b5f05f
Deeper review: fix usemtl assignment, SIMD bare \r, basedir resolutio…
Copilot Mar 11, 2026
984530c
Add warning when mtllib file not found in optimized loader
Copilot Mar 11, 2026
b623062
Simplify optimized parser API: remove ArenaAllocator/arena_adapter/ba…
Copilot Mar 11, 2026
84cfae8
Revert API simplification: restore ArenaAllocator, arena_adapter, bas…
Copilot Mar 11, 2026
e4090bc
Fix LoadObjOpt correctness and add verifier coverage
syoyo Mar 12, 2026
531dc56
Add experimental stream parser and reduce opt allocations
syoyo Mar 12, 2026
8e9fdc7
Add fuzzing harnesses and harden OBJ parsers
syoyo Mar 12, 2026
001c36f
Harden parser parity for face index handling
syoyo Mar 13, 2026
337a29b
Fix LoadObjOpt merge ordering and tests
syoyo Mar 13, 2026
e46da78
Add TypedArray API, optimize OptCommand storage, fast_float/SIMD parsing
syoyo Mar 14, 2026
6d85131
Harden LoadObjOptTyped: fix cache overflow, clear moved-from state, a…
syoyo Mar 14, 2026
864e7ba
Add LoadObjOptTyped to fuzz harnesses
syoyo Mar 14, 2026
533b227
Fix UBSan float-to-int overflow in vw parser and fuzzer OOM
syoyo Mar 15, 2026
b91a990
Final polish: fix cache edge case, bare CR fallback, document OptAttrib
syoyo Mar 15, 2026
6df5849
Deep review fixes: multi-threaded merge gap compaction, nan/inf handl…
Copilot Mar 15, 2026
689b1ad
Fix vertex color parsing: use xyzw,rgb for 7 args and xyz,rgb for 6
syoyo Mar 15, 2026
dc2688f
Deep review: ArenaAllocator overflow guard, exponent parsing fix, tes…
Copilot Mar 16, 2026
12de488
Deep review: remove redundant saw_missing_color code in fast vertex path
Copilot Mar 16, 2026
19f8f03
Deep review: improve object name test comment clarity
Copilot Mar 16, 2026
1eac243
Fix signed integer overflow UB in opt_tryParseDouble exponent parsing
syoyo Mar 16, 2026
44b6270
Fix ArenaAllocator::new_block exception safety and TypedArray::alloca…
Copilot Mar 16, 2026
095bbd5
Simplify TypedArray overflow guard: remove unnecessary sizeof(T) > 1 …
Copilot Mar 16, 2026
459eb44
Make C++ exceptions opt-in via TINYOBJLOADER_ENABLE_EXCEPTION
syoyo Mar 16, 2026
4bb4e2b
Mitochondria-level review: std::align guard, overflow checks, dead co…
Copilot Mar 17, 2026
614cca0
Address code review: fix sizeof guard, improve comments
Copilot Mar 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions experimental/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Experimental code for .obj loader.

* Multi-threaded optimized parser : tinyobj_loader_opt.h
* Streaming experimental parser : stream/stream_obj_loader.h

## Requirements

Expand Down
52 changes: 52 additions & 0 deletions experimental/stream/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Experimental Stream OBJ Parser

This directory contains an experimental line-by-line OBJ parser intended to
reduce peak input buffering compared with the whole-buffer optimized parser.

The design is split into two layers:

- `StreamHandler`: callback-style incremental parser interface.
- `LoadObjStreamExperimental(...)`: convenience wrapper that builds
`tinyobj::attrib_t`, `tinyobj::shape_t`, and `tinyobj::material_t`.
- Ordered multithreaded chunk mode: read bounded batches of lines, parse those
chunks in parallel, then replay parsed events in original order.

## Goals

- Parse OBJ from `std::istream` without reading the whole file into one buffer.
- Preserve support for relative face indices.
- Allow applications to consume faces incrementally without materializing a
full mesh.

## Current Scope

Implemented records:

- `v`
- `vn`
- `vt`
- `f`
- `g`
- `o`
- `usemtl`
- `mtllib`
- `s`

Ignored for now:

- `l`
- `p`
- free-form curves/surfaces
- tags and skinning extensions
- advanced vertex color fallback behavior matching the legacy loader exactly

## Notes

This parser is intentionally separate from `LoadObjOpt`.
`LoadObjOpt` is built around random-access whole-buffer processing and
multithreaded partitioning, while this module is focused on low intermediate
buffer usage and incremental consumption.

The current multithreaded design uses a bounded in-flight chunk window rather
than a true LRU chunk cache. That matches OBJ's mostly sequential access
pattern better and keeps ordering/state management simple.
Loading