- updated Catmark builder to use edge-point boundary tags like Loop
- fixed Gregory face point reliance on boundary isolation assumptions
- added comments to PatchBuilder base class to clarify intention and usage
- identify the subrange of originating patch faces while assigning handles
- limit queries and memory allocation to the identified subrange of faces
- separate quadtree construction for quad and triangular patches
- added new PatchTable member to indicate uniform (linear) construction
- initialize new member in PatchTableFactory
- use new member to determine result of IsFeatureAdaptive() query
- added new TopologyRefiner member to detect presence of irregular faces
- added new Vtr::Level::VTag to indicate vertex incident an irregular face
- populated new VTag bit when irregular faces present
- updated refinement to clear new bit for refined faces
- branch adaptive refinement in linear cases to avoid testing features
- updated feature detection for irregular faces -- now a simple bit test
- updated PatchBuilder with now-trivial test for incident irregular faces
- individual basis functions now purely normalized with no PatchParam
- two new higher level functions deal with patch type and PatchParam
- updated Far::PatchTable and Osd evaluators that used old methods
- clarified handling of isolated/unisolated features in IsPatchRegular()
- simplified GetPatchBoundaryMask() to make use of bit masks
- removed private method supporting approx-smooth-corner-as-sharp option
- removed debugging tests verifying irregular patch points
- Far::PatchBuilder additions to identify spans around non-manifold corners
- re-organized patch regularity test to inspect individual corner features
- updated partial span gathering function to handle non-manifold cases
- ensure vertex tag xordinary bit remains unset when non-manifold
- added necessary options to struct LimitStencilTableFactory...::Options
- updated Create() to support creation of varying and face-varying stencils
- updated Create() to provide clarity and stricter compatibility checks for
the optional StencilTable and PatchTable arguments
- modified Doxygen comments for Create() to clarify requirements of the
optional table arguments
- added missing StencilTableFactory::AppendLocalPointStencilTableVarying()
- changed UpdateValues() use of *T to &T for consistency with PrimvarRefiner
- assigned unique types <T> and <U> to src and dst arguments for consistency
- kept the *T interfaces for backward compatibility
- extended patch construction in base PatchBuilder to support triangles
- added extraction of regular triangular patches to base PatchBuilder
- converted irregular patches to supported patch types in LoopPatchBuilder
- fixed missing PatchDescriptor functionality for Loop triangle
- add new PatchDescriptor::Type for Gregory triangle
- extended PatchParam boundary mask from 4 to 5 bits (!)
- added new PatchParam methods for parameterization of triangles
- extended PatchMap to support triangular patches
- added basis evaluation for triangular patch types
- extended Far::PatchTable's FVar channels with two descriptors and stride
- updated Far::PatchTableFactory to properly construct FVar patch arrays
- extended Osd::PatchArray with two descriptors and common stride
- updated Osd::CpuPatchTable and CpuEvaluator to use PatchArray extensions
- reverted original methods to operate in single precision instead of both
- removed overloads in favor of direct stencil table access and update
- updated precision related assertions with clearer condition
- updated far/tutorial_6 to use template stencil table access
- updated far/tutorial_9 to use conventional stencil table access
- replaced use of Append() with Assign(index) now that row size is clear
- added asserts for all row sizes to ensure assignment matches allocation
- simplified utility class for SparseMatrix point/row down to bare minimum
- overloaded PatchTableFactory::Create() to take subset of base faces
- overloaded TopologyRefiner::RefineAdaptive() to take subset of base faces
- added TopologyRefinerFactory::Create() to create new TopologyRefiner
that shares base level with another, allowing independent refinement
- overloaded PatchTable::ComputeLocalPointValues...() to accept split
buffers with separate base-level primvar values
- overloaded StencilTable::UpdateValues() to accept split buffers as above
- address indexing inconsistencies with Uniform PatchTables (#737)
- suppress generation of Varying patches and/or their local point stencils
- added suppression of Varying patches to far/tutorial_6
- converted classes for stencils, tables and factories to templates
- added backward compatible class wrappers around new templates
- extended PatchTable to support variable precision stencil tables
- extended PatchTableBuilder to manage PatchTable's new stencil tables
- templated PatchTableBuilder conversion from SparseMatrix to stencils
- extended public PatchTableFactory interface to specify precision
- converted PrimvarRefiner class to template and added wrapper class
Fixed the method signature of the internal limitFVar method to make
the dst argument a reference rather than a pointer to be more consistent
with earlier changes for other primvar classes. This also makes it
easier to use the public template LimitFaceVarying method to operate
on a wider range of primvar container types.
- retained precision of constants in Sdc Catmark scheme
- improved precision of constants & intermediate values in Sdc Loop scheme
- improved precision of constants & intermediate values CatmarkPatchBuilder
- converted all internal Far patch basis evaluation to templates
The issue is that FeatureMask structure has size of an integer, but only
first 11 bytes are initialized, the rest is left non-initialized to a
stack memory of RefineAdaptive(). This will cause issues with IsEmpty()
which check whether any of integer's bits are set, effectively causing
jumps dependent on a non-initialized memory.