Update all CMakeLists.txt, Makefiles, meson.build, setup.py,
and documentation files to use C++17 standard.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add use_grouped_parameters option to ThreeJSMaterialExporter to support both flattened (base_color) and grouped (base.color) parameter naming for JSON export. Includes setJsonParameter helper for automatic name transformation and test suite for validation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Relocated skelanim-complete-*.usda test files from models/ to tests/feat/skinning/
to organize feature-specific test files separately from general model assets.
Updated test-synthetic-anims.js to load files from the new location.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Resolved merge conflicts and fixed compilation errors introduced by animation system refactoring and API changes:
- Updated AnimationClip API usage in threejs-exporter (channels/samplers)
- Fixed PropertyMap const-correctness in MaterialX shader reconstructors
- Fixed 32-bit build warnings (sign conversion, variable shadowing)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix XML parser bug preventing nested tag parsing:
* Added pending token mechanism to handle non-attribute tokens
* Parser now correctly processes child elements and text nodes
* Fixes mismatched end tag errors that blocked all parsing
- Add MaterialX math and procedural nodes:
* Implement constant, multiply, add, subtract, mix nodes
* Add noise variants (noise2d/3d, cellnoise, worleynoise, fractal3d)
* All nodes properly convert to USD shader representations
- Implement connection serialization for MaterialX export:
* Parse shader input connections (nodegraph/output/nodename attributes)
* Store connections in MtlxModel.shader_connections map
* Serialize connections back to MaterialX XML on export
* Support for all three shader types (UsdPreviewSurface, StandardSurface, OpenPBR)
- Fix string value parsing:
* Add template specialization for std::string in ParseMaterialXValue
* MaterialX XML attributes are already unquoted, no ASCII parser needed
* Fixes "Failed to parse a value of type string" errors
- Add lowercase shader tag support:
* Support both "OpenPBRSurface" and "open_pbr_surface" tag variants
* Ensures compatibility with different MaterialX authoring tools
- Set primary shader value when parsing:
* Populate mtlx->shader in addition to mtlx->shaders map
* Enables proper export functionality
- Add comprehensive test suite:
* test_mtlx_export.cc - Tests MaterialX export with connections
* test_parser_debug.cc - XML parser validation tests
* Updated Makefile with new test targets
- Fix compiler warnings:
* Add GCC pragma guards for unused function in threejs-exporter.cc
* Complements existing clang pragma guards
Tested: All MaterialX import/export tests pass, builds cleanly with C++14
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix C++14 compatibility issues in threejs-exporter.cc:
* Replace structured bindings with iterator loops
* Fix template parsing with reinterpret_cast
* Fix const correctness in unordered_map access
* Fix type mismatches in shader parameter access
- Add MaterialX export test infrastructure:
* New test in tests/feat/mtlx/ directory
* Standalone Makefile for easy compilation
* Example demonstrating ExportMaterialX API
* Complete README documentation
Tested: Builds successfully with C++14, exports valid MaterialX 1.38 XML
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Refactor ValueView to use a more memory-efficient 16-byte representation that
stores type information inline, eliminating dereferencing overhead for type_id
access.
Key changes to ValueView class:
- Replace simple pointer with compact 16-byte structure:
* const void* ptr (8 bytes) - pointer to data
* uint32_t type_id (4 bytes) - inline type identifier
* uint8_t flags (1 byte) - storage type flags (vector/TypedArray)
* uint8_t padding[3] (3 bytes) - alignment padding to 16 bytes
New features:
- template<typename T> ValueView(const T* ptr) - direct construction from
concrete type pointers
- template<typename T> const T* view() - direct typed access method without
Value indirection
- Specialized constructors for std::vector<T>* and TypedArray<T>*
- Storage type tracking via FLAG_IS_VECTOR and FLAG_IS_TYPED_ARRAY
- Inline role type mapping (point3f <-> float3) in underlying_type_id()
Benefits:
- Exactly 16 bytes (2 cache words) for better cache efficiency
- Type information available without pointer dereferencing
- Zero-cost abstraction for typed data access
- Compatible with existing Value interface through as() method
Add comprehensive test suite in tests/feat/value-view/ verifying:
- 16-byte size guarantee
- Direct construction and access functionality
- Role type conversions
- Storage type detection
- Array view creation for containers
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add get_typed_array_view_at() and get_typed_array_view_at_time() to PODTimeSamples
- Add corresponding methods to TimeSamples class for both TypedArray and std::vector storage
- Return const-qualified TypedArrayView for safe, zero-copy access to array data
- Handle blocked samples (ValueBlock) by returning empty views
- Add comprehensive test suite in tests/feat/typed-array-view/
These methods enable lightweight, non-owning views over time-sampled array data
without copying, improving performance when accessing array values from TimeSamples.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add 15 factory functions to typed-array.hh that provide self-documenting,
type-safe alternatives to boolean flag constructors.
Factory Functions Added:
- MakeOwnedTypedArray() - Owned array (will delete)
- MakeDedupTypedArray() - Deduplicated array (won't delete)
- MakeSharedTypedArray() - Shared array (won't delete)
- MakeMmapTypedArray() - Memory-mapped array (won't delete)
- MakeTypedArrayCopy() - Copy data into owned storage
- MakeTypedArrayView() - Non-owning view over external memory
- MakeTypedArrayMmap() - Non-owning view for mmap data
- MakeTypedArrayReserved() - Empty array with reserved capacity
- CreateOwnedTypedArray() - 3 overloads for creating owned arrays
- CreateDedupTypedArray() - Wrap as deduplicated
- CreateMmapTypedArray() - Create mmap in one call
- DuplicateTypedArray() - Deep copy TypedArray
- DuplicateTypedArrayImpl() - Deep copy TypedArrayImpl
Benefits:
- Self-documenting: Function names clearly indicate intent
- Type-safe: No confusing boolean flags (true/false)
- Zero overhead: All inline, same performance as direct constructors
- Backward compatible: Existing code continues to work
Before (confusing):
TypedArray<T>(ptr, true); // What does 'true' mean?
After (clear):
MakeDedupTypedArray(ptr); // Clear: deduplicated array
Test Suite:
- Added comprehensive test suite in tests/feat/typed-array-factories/
- 16 tests covering all factory functions
- Standalone Makefile for easy testing
- All tests passing (16/16)
Documentation:
- Complete documentation suite (~43.5K)
- API summary, migration examples, architecture guide
- Before/after examples for all use cases
Feature test added in tests/feat/typed-array-factories/ with standalone Makefile.
All tests pass (16/16).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update dedup cache maps in CrateReader to use TypedArray<T> for POD array types
(int32/uint32/int64/uint64/half/float/double arrays)
- Add TypedArray<T> overloads for add_array_sample_pod and add_matrix_array_sample_pod
- Update UnpackTimeSampleValue_* functions to use TypedArray with ReadIntArrayTyped,
ReadFloatArrayTyped, and ReadDoubleArrayTyped
- Maintain backward compatibility with std::vector<T> overloads
- Composite types (half2, float2, double2, quat*, matrix*) still use std::vector
since they use ReadArray which returns std::vector
Benefits:
- Memory efficiency through ValueRep-based deduplication
- Reduced file I/O for repeated array values in TimeSamples
- TypedArray supports future mmap views for zero-copy access
Feature test added in tests/feat/typed-array-timesamples/ with standalone Makefile.
All tests pass (12/12).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>