- 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
- 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
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.
- new PatchTableBuilder class now implements PatchTableFactory::Create()
- population of tables now independent of scheme or patch type
- nested LocalPointHelper handles local point sharing and stencils
- new PatchBuilder class encapsulates patch queries and conversions:
- provides patch types associated with schemes and client options
- handles all topological queries about patches in the base class
- subclasses for the three subdivision schemes to support conversions
- conversions encapsulated in new SparseMatrix class for re-use
- removed Far end-cap factory classes and Far::GregoryBasis
- extended adaptive refinement to support Bilinear scheme (not enabled)
- extended Vtr::StackBuffer to avoid compiler inefficiencies
- extended smooth corner patch approximation to fvar and inf-sharp patches
- fixed assignment and refinement bugs for inf-sharp tags in fvar space
- fixed interpolation bug with Bilinear scheme and LINEAR_NONE option
- added public methods for fvar topology to Far::TopologyRefiner
- added flag to consider features in face-varying channels
- added flag to reduce refinement for infinitely sharp patches
- added secondary isolation level to reduce refinement of smooth features
- updated face-varying VTag conversion to set VTag::_corner correctly
- updated adaptive refinement to prevent over-isolation of inf-sharp features
- fixed patch regularity test when inf-sharp and xord features not separated
at level 0 or 1
- generalized BSpline end-cap factory boundary test to defer to Gregory patch
for any non-smooth corner
- extended FeatureMask class with more extensive set of features
- added FeatureMask methods to convert AdaptiveOptions to features
- updated RefineAdaptive() with simplified FeatureMask creation
- extracted core face selection to simple local functions using FeatureMasks
- created separate face selection for face-varying channels
- extracted inf-sharp feature selection for use by vertex and FVar selection
- removed unused tag for inf-sharp features from Vtr::Level::VTag
- added tags for inf-sharp features to Vtr::FVarLevel::ValueTag
- updated the conversion from ValueTag to VTag
- removed awkward and little used tagging methods from Vtr::FVarLevel
- replaced obsolete methods in face-varying adaptive refinement
- removed PatchTableFactory assert that irreg patches exist at last level
- fixed Gregory end cap Factory to accomodate irreg patches at any level
- parameterized adaptive refinement for differing feature sets per level
In one case, we were comparing int and unsigned int.
In primvarRefiner, some values were safely uninitialized, but older compilers
(GCC 4.1) were complaining.
- removed TopologyRefiner options to propagate base face in Refinememt
- removed all Vtr storage and management of base face
- added PrimvarRefiner methods to "interpolate" per-face primvar data
- added new class to far/topologyLevel.h
- updated TopologyRefiner to manage set of TopologyLevels internally
- added TopologyRefiner method to retrieve TopologyLevel
- redefined obsolete TopologyRefiner methods in terms of TopologyLevel
Remove the ptex-specific code from the Far::TopologyRefiner and instead provide it in a separate class Far::PtexIndices. Clients who need to use the Ptex API need to first build a Far::PtexIndices object by providing it with a refiner.
This has the advantage of keeping the API on the TopologyRefiner a little cleaner. The ptex methods were const but were mutating state with const_casts. The new mechanism still achieves the same lazy initialization behavior by forcing clients to instantiate them exactly when needed.
A disadvantage of this approach is that the PatchTablesFactory creates its own PtexIndices and throws it out after the patch tables are created. This is great if you're never going to need the ptex indices again, but not so great if you will need them again.
- new Options for Refine() methods for base face and vertex ordering
- removed ignored/unused "full topology" choice from AdaptiveOptions
- added base face and vertex ordering logic to Refinement
- addition of TopologyRefiner members for component counts and max valence
- refactoring of Level additions to update all new member totals
- addition of GetMaxValence() to TopologyRefiner
- updated PatchTablesFactory to user new GetMaxValence() method
- renaming of "Hole" methods for TopologyRefiner and Vtr::Level
- added new tag for sharp corner, now used in isolation
- split single semi-sharp tag in two for vertex and edge sharpness
- updated tag propagation and all tests of previous semi-sharp tag
- added clear() methods for all tags and simplified initialization
- added Vtr::FVarLevel method to resolve correct index in level 0 case
- updated tag retrieval methods that used face-value array as input
- changed signatures to accept face-verts when needed and updated usage
- added methods to FVarLevel to combine FVar tags with vertex tags
- use composite of combined tag to find FVar features needing isolation
- added more tagging related to the "linear borders" interpolation case
- added FVar channel consideration to TopologyRefiner's feature selection
- added more simple access methods to FVarLevel
- added _xordinary tag to FVarLevel::ValueTag; initialize and refine
- added composite tag method for FVarLevel::ValueTag similar to Level::VTag
- parameterize FVar topology initialization with regular valence
- renamed Sdc::Type to SchemeType and TypeTraits to SchemeTypeTraits
- renamed TYPE_ prefix to SCHEME_
- updated all usage within core library
- updated all usage in examples, tutorials, etc.
- changed template parameter to runtime method parameter
- added traits as static methods of all schemes
- constructed internal table of traits from all schemes
- move level of refinement / isolation into the Options structs
- fix splash damage in rest of the code
note 1: this is less than ideal, because most compilers accept the previous
call to these functions with an incorrect parameter list (ie. passing
the level instead of the struct issues no warnings and compiles...)
caveat emptor...
note 2: the level parameter names may not be final for adaptive modes
as we will likely want independent controls over crease vs.
extraordinary vertex isolation.