Commit Graph

1353 Commits

Author SHA1 Message Date
barry
d95f49b5ca Fixed bug in adaptive refinement related to irregular faces:
- reject irregular faces before combining and testing the composite tag
2018-11-08 12:36:43 -08:00
David G Yu
bf570cd019
Merge pull request #1017 from barfowl/patch_table_query
Fixed Far::PatchTable::IsFeatureAdaptive() to work for all schemes
2018-11-07 19:14:09 -08:00
David G Yu
2520bed85f
Merge pull request #1016 from barfowl/far_irregular_faces
Extended Far topology tagging to better handle irregular faces
2018-11-07 19:13:12 -08:00
barry
78e5badc72 Fixed Far::PatchTable::IsFeatureAdaptive() to work with all schemes:
- added new PatchTable member to indicate uniform (linear) construction
    - initialize new member in PatchTableFactory
    - use new member to determine result of IsFeatureAdaptive() query
2018-11-07 16:51:10 -08:00
barry
662dccfe4d Extended vertex tagging to improve handling of irregular faces:
- 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
2018-11-07 13:16:03 -08:00
David G Yu
92a12edcb0
Merge pull request #1015 from barfowl/far_patch_eval
Minor refactoring of Far patch basis evaluation methods
2018-11-07 09:38:49 -08:00
barry
484c2746d1 Minor refactoring of internal functions in far/patchBasis.*:
- 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
2018-11-06 13:29:16 -08:00
barry
ff9d936ee8 Fixed MSVC warning/error regarding use of bool in expression 2018-11-06 12:38:57 -08:00
barry
cd3faaf33c Improved Far::PatchBuilder's determination of patch properties:
- 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
2018-11-06 12:11:43 -08:00
David G Yu
3dbcc32a28
Merge pull request #1013 from barfowl/nonmanifold_patches
Improve patch construction around non-manifold vertices to close gaps
2018-11-05 11:40:43 -08:00
barry
0520fc53ff Extended non-manifold patches to irregular to prevent gaps:
- 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
2018-11-01 10:17:40 -07:00
David G Yu
a1c7b8c87f
Merge pull request #1012 from barfowl/fvar_limit_stencil_table
Added support for creation of face-varying Far::LimitStencilTables
2018-10-29 19:04:47 -07:00
barry
c59c801e9c Added support for creation of face-varying Far::LimitStencilTables:
- 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()
2018-10-29 10:46:03 -07:00
barry
313f27295b Extended Far::StencilTable data interpolation interfaces:
- 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
2018-10-29 10:30:05 -07:00
David G Yu
968f6e001c
Merge pull request #1010 from barfowl/varying_patch_descriptor
Fix initialization of PatchTable's varying patch descriptor
2018-10-20 13:32:37 -07:00
barry
8fef4d6930 Fix initialization of PatchTable's varying patch descriptor:
- initialize on construction, regardless of whether varying patches present
2018-10-19 13:17:41 -07:00
barry
2910970021 Fixed naming of function parameters to suppress Doxygen warning 2018-10-19 13:15:45 -07:00
barry
d84666c829 Populate Far::PatchTable with triangular patches for Loop scheme:
- 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
2018-10-11 17:51:56 -07:00
David G Yu
c5c9704b90
Merge pull request #1003 from barfowl/tri_patch_support
Added low-level support in Far for triangular patches
2018-10-03 17:44:01 -07:00
David G Yu
2fe36033d5
Merge pull request #1002 from barfowl/vtr_level_tag_bits
Simplify Vtr bitfield operations to avoid issues with older versions of GCC
2018-10-01 13:05:17 -07:00
David G Yu
521fc52e70
Merge pull request #1001 from barfowl/osd_cpu_patch_table
Corrected initialization of patch arrays in Osd::CpuPatchTable
2018-10-01 13:04:20 -07:00
barry
d6572ab226 Updated Osd evaluators to deal with changes to PatchParam boundary:
- updated evaluators to extract the extended 5-bit mask from PatchParam
2018-09-27 20:13:01 -07:00
barry
e96bf355e0 Added low-level support in Far for triangular patches:
- 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
2018-09-27 20:09:59 -07:00
David G Yu
54346afaa9
Merge pull request #999 from barfowl/tri_adaptive_refinement
Remove Catmark-only restriction on adpative refinement in Far
2018-09-26 14:39:59 -07:00
barry
99f6a27604 Simplified access to Vtr::Level tag bits for integer operations:
- added alternate/explicit constructor to initialize from integer bits
    - added accessor to retrieve collections of bits as an integer
    - replaced pointer aliasing in bitwise combinations with use of new methods
2018-09-25 15:51:01 -07:00
barry
89c4ce78b7 Corrected initialization of patch arrays in Osd::CpuPatchTable
- assigned appropriate patch count and base offsets to varying arrays
    - assigned appropriate patch count and base offsets to face-varying arrays
    - fixed append to face-varying PatchParam buffer for each array
2018-09-25 15:13:55 -07:00
barry
fe0b397e2f Removed assertion restricting adaptive refinement to Catmark scheme:
- split face tag analysis into functions for face and individual corner
    - avoided forced boundary isolation of triangles, preserved for quads
2018-09-25 14:29:35 -07:00
David G Yu
91478f149a
Merge pull request #995 from barfowl/fvar_patch_array_dev
Extended face-varying patch arrays to properly support two types
2018-09-19 17:29:01 -07:00
David G Yu
c732ff346a
Merge pull request #994 from barfowl/compute_local_points
Reverted PatchTable local point methods to address template issues
2018-09-17 17:54:47 -07:00
barry
b542bc78c3 Added missing include of <algorithm> for std::max with stricter compilers 2018-09-17 11:46:41 -07:00
barry
86e3712564 Fixed oversight deriving Far::LimitStencil from new template class:
- added the "public" keyword that was inadvertantly omitted
2018-09-17 09:33:08 -07:00
barry
45928c1b81 Extended face-varying patch arrays to properly support two 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
2018-09-13 16:51:53 -07:00
barry
5c9f77d83e Reverted PatchTable::ComputeLocalPointVaues...() to avoid template issues:
- 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
2018-09-13 12:50:00 -07:00
David G Yu
79476c87cb
Merge pull request #991 from barfowl/val2_gregory_simplify
Simplify construction of Gregory patches with val-2 interior corners
2018-09-13 12:29:06 -07:00
barry
725d3c585b Simplified Gregory point initialization with more direct assignment:
- 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
2018-09-12 16:01:03 -07:00
barry
e0457241e8 Simplified Catmark->Gregory conversion with val-2 interior corner:
- replaced the invasive valence-2 conditions with a post-process
    - removed inefficient and now unnecessary Point::AddOrAppend()
2018-09-12 15:52:59 -07:00
barry
f58330fdee Minor extensions to Far classes to help manage large PatchTables:
- 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
2018-09-11 16:13:06 -07:00
David G Yu
c566e8f2ab
Merge pull request #988 from barfowl/sparse_matrix_additions
Minor improvements to internal Far::SparseMatrix class
2018-08-29 18:22:35 -07:00
David G Yu
bb826b0f7d
Merge pull request #987 from barfowl/vtr_indexing_bug
Fix rare non-manifold topology indexing issue in Vtr::Level
2018-08-29 18:22:18 -07:00
barry
86dd8cc912 Bug fix and method addition to Far::internal::SparseMatrix:
- fixed error in Copy() causing compilation failure on instantiation
    - added new Swap() method analogous to std::vector::swap()
2018-08-27 11:02:36 -07:00
barry
a79a12269b Fixed rare non-manifold topology construction bug in Vtr::Level:
- use address arithmetic instead of std::vector[] to determine vector end
2018-08-27 11:00:37 -07:00
barry
a154426d33 Added new flags to Far::PatchTableFactory::Options to:
- 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
2018-08-27 10:58:46 -07:00
barry
0f63aa997d Added bilinear end-cap option to Osd::MeshBits 2018-08-06 16:29:07 -07:00
David G Yu
148d3005d3
Merge pull request #982 from barfowl/stencil_table_append
fix Far::StencilTable append when base StencilTable empty
2018-08-06 12:10:48 -07:00
barry
af4b1e3fec Fixed StencilTableFactory::append() when base stencils empty:
- duplicate the local point StencilTable when no base stencils
2018-08-05 22:06:56 -07:00
barry
5b9e986d62 Fix a couple oversights in recent changes supporting double precision:
- corrected Far::LimitStencilTableFactory wrapper to use StencilTable
    - promoted constants in Far::CatmarkPatchBuilder to double precision
2018-08-05 21:31:45 -07:00
barry
647039a8ee Major public addition of class templates for multiple precision:
- 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
2018-07-28 14:56:43 -07:00
barry
f6172f9608 Minor public extensions to support multi-precision evaluation of patches:
- templated PatchParam normalization methods for multiple precision
    - instantiated double precision basis evaluation templates
    - converted PatchTable::EvaluateBasis...() methods to templates
        - added overloaded versions to assist template parameter resolution
    - extended PatchMap::FindPatch() to double precision
2018-07-28 14:43:32 -07:00
David G Yu
cdcec73088 Fixed Far::PrimvarRefiner::limitFVar prototype
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.
2018-07-28 13:37:03 -07:00
barry
a0fcfb54f9 Reordered #includes in far/catmarkPatchBuilder.cpp to match convention 2018-07-27 12:07:31 -07:00
barry
9b2d161c4e Internal numerical extensions to retain double precision:
- 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
2018-07-23 11:10:56 -07:00
barry
f15d4ae02f Internal refactoring to support multiple precision:
- overloaded PatchBuilder to populate SparseMatrix as float or double
    - simplified PatchTableBuilder handling of matrices and Varying stencils
2018-07-23 11:00:35 -07:00
barfowl
7a4fe81351
Merge pull request #975 from Nazg-Gul/fix_topology_refiner_stack_memory
Thanks again!
2018-07-20 13:35:18 -07:00
David G Yu
3b5c3d99d2 Release 3.3.3 2018-07-17 19:17:49 -07:00
barry
13b36490a7 Fixed PatchTable's ordering of varying patches when multiple arrays present:
- added new member to PatchArrayBuilder for varying patch points
    - assign varying patch points similar to vertex and fvar patches
2018-07-17 09:29:45 -07:00
Sergey Sharybin
d6f68b17e8 Fix uninitialized stack memory used in topology refiner
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.
2018-07-14 15:57:16 +02:00
David G Yu
74601558e3
Merge pull request #972 from barfowl/fvar_patch_fix
Fixed regression in PatchTable construction with face-varying patches
2018-07-03 17:46:41 -07:00
barry
365ba36d6f Fixed regression in PatchTable construction for face-varying patches:
- fixed stencil table size estimate when no adaptive refinement occurs
2018-07-03 12:06:23 -07:00
Sergey Sharybin
80cee207b6 Fix wrong argument order for memset 2018-07-03 14:40:33 +02:00
David G Yu
70e3c5f300 Release 3.3.2 2018-06-27 14:29:08 -07:00
barry
02602e7abf Fixed misuse of vector::capacity() in Far::SparseMatrix:
- replaced use of capacity() with size()
    - added missing initializer
2018-06-26 17:42:13 -07:00
barry
5e8e123d73 Major refactor of the construction of Far::PatchTable:
- 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
2018-05-08 17:24:14 -07:00
David G Yu
171629fbd8 Release 3.3.1 2018-02-07 15:09:46 -08:00
David G Yu
fe47db273c Fixed computation of PatchParam for tri refinement
Previously, Far::PatchTableFactory::computePatchParam() was
considering all faces with a face vertex count != 4 as
irregular.  This was incorrect for triangle refinement as
was the calculation of the UV subface parametric offsets for
triangle subfaces.

This is foundational work for implementing full support
for Loop scheme patch tables. This fix also allows correct
decoding of the parameter mapping for triangles resulting
from uniform refinement of Loop scheme meshes.
2018-02-06 16:51:17 -08:00
barfowl
9c9108c3db
Merge pull request #959 from davidgyu/hlsl_patch_normals
Thanks David
2018-01-16 15:31:33 -08:00
barfowl
dcd82f4137
Merge pull request #960 from davidgyu/mtl_patch_normals
Metal patch shader changes for degenerate normals
2018-01-16 15:31:11 -08:00
David G Yu
dc4948fa75
Merge pull request #957 from barfowl/reserve_overflow_bugs
Fixed integer overflow bugs for large meshes in PatchTable factories
2017-12-15 14:59:47 -08:00
David G Yu
226f1a27fd
Merge pull request #948 from barfowl/glsl_patch_normals
Improved GLSL patch shaders to compute normals in common degenerate cases
2017-12-12 08:50:30 -08:00
David G Yu
6e02082bd7 Metal patch shader changes for degenerate normals
Updated Metal patch shaders to resolve degenerate normals.
This fix was ported from the GLSL patch shader source.

Also, added missing inf sharp test cases to mtlViewer.
2017-12-12 08:46:00 -08:00
David G Yu
917fc36dde HLSL patch shader changes for degenerate normals
Updated HLSL patch shaders to resolve degenerate normals.
This fix was ported from the GLSL patch shader source.

Also, added missing inf sharp test cases to dxViewer.
2017-11-21 18:01:57 -08:00
barry
1b03b1ef09 Fixed integer overflow bugs for large meshes in PatchTable factories 2017-11-20 16:09:40 -08:00
barry
d31c913532 Fixed a few more minor issues with face-varying patches in uniform PatchTables:
- corrected assertion to use face-varying index offset instead of vertex
    - added missing face-varying conditional when generateAllLevels set
    - factored base-level index offsets into local options for clarity
    - added Doxygen comments to describe overall indexing behavior
2017-09-22 15:43:16 -07:00
barry
0c2dd830b0 Updated GLSL patch shaders to resolve degenerate normals:
- modified Gregory patch shader to use existing Bezier patch evaluation
    - rewrote Bezier patch evaluation to use intermediate bilinear points
    - added detection and resolution of degenerate normal
    - eval normal partials no longer uses Weingarten eqns (requires N != 0)
    - updated normal partials to use differentiation/projection
2017-09-13 11:03:03 -07:00
barry
d376944dd1 Fixed bug in face-varying patches of uniformly refined Far::PatchTable:
- added missing initialization of face-varying PatchParams
2017-09-13 10:50:58 -07:00
David G Yu
195111a8e1 Release 3.3.0 2017-07-25 13:58:09 -07:00
David G Yu
58d867feea Fixed a typo in MTLPatchShaderSource
This fixes a shader compile error when enabling
the OPENSUBDIV_GREGORY_EVAL_TRUE_DERIVATIVES option.
2017-07-25 12:15:31 -07:00
David G Yu
2bcdedf0cc Fixed MtlComputeEvaluator docs and overloads
Updated MtlComputeEvaluator documentation to be
consistent with the documentation for other compute
evaluator implementations and fixed missing or
incorrect doxygen tags.

Also, updated the overloads for the EvalStencils
and EvalPatches methods to account for 1st and
2nd derivative evaluation.
2017-07-17 18:12:49 -07:00
Nicholas Blasingame
bdca520459 Added fvar support for metla as well as a ui for fvar. 2017-06-05 15:06:47 -07:00
David G Yu
8e426be369 Merge pull request #932 from barfowl/wshadow_far
Removed shadowing warnings from source for core libraries
2017-04-20 22:39:34 -07:00
barry
e651027beb Changes to eliminate shadowing warnings in core libraries:
- renamed shadowing variables and arguments in Far factory classes
2017-04-19 18:48:15 -07:00
David G Yu
dc950cf5fb Removed duplicate mtlVertexBuffer build config 2017-04-19 17:25:23 -07:00
Michael Harris
30cd2df37c Added Metal support 2017-04-19 16:49:53 -07:00
David G Yu
62e1a62842 Release 3.2.0 2017-01-31 13:43:21 -08:00
David G Yu
a725188081 Fixed Cpu Omp and GLXFB EvalStencils w/ deriv
Fixed a few bugs uncovered during testing.
2017-01-31 10:23:55 -08:00
David G Yu
63fdb39912 Improved XFB Evaluation of 1st and 2nd derivatives
Most GL implementations support a maximum of 4 transform
feedback buffer bindings. With the addition of 1st and 2nd
derivative evaluation up to 6 bindings might be required,
i.e. dst, du, dv, duu, duv, dvv.

This change extends the GLXFB Evaluator interface to allow
a client to specialize the evaluator when it is known that
(at least) the 1st derivative and 2nd derivative outputs
are interleaved together into shared buffers.

When this option is used, the maximum number of transform
feedback buffer bindings can be reduced to 3 instead of 6.
2017-01-30 12:12:00 -08:00
George ElKoura
a410a52f4e Merge pull request #924 from davidgyu/dev_osd_eval_deriv
Updated Osd Evaluator methods for derivative eval
2017-01-27 18:38:41 -08:00
David G Yu
8d3ba7372a Updated OsdMesh for 2nd partial deriv buffers 2017-01-27 17:14:27 -08:00
David G Yu
fe38ad8cda Added missing Osd Evaluator methods for deriv eval
Now that Far::LimitStencilTable and Far::PatchTable
support evaluation of 1st and 2nd derivatives the
Osd Evaluator API for evaluating stencils and patches
has been updated to match.
2017-01-27 17:14:18 -08:00
David G Yu
432b6b235f Updated doxygen comments for Osd Evaluator classes 2017-01-27 16:53:39 -08:00
barry
e3dd0f1798 Publicly exposed choice for smooth boundary patches at smooth corners:
- added Far::PatchTableFactory::Options::generateLegacySharpCornerPatches
    - legacy behavior of sharp patches at smooth corners preserved by default
    - added corresponding option bit to Osd::MeshBits
    - updated examples/glViewer with option
2017-01-27 16:22:04 -08:00
Takahito Tejima
044b25e818 Merge pull request #918 from davidgyu/dev_fix_spelling_731
Fixed spelling errors and typos in comments
2017-01-26 13:18:01 -08:00
David G Yu
66e8592ac6 Fixed program delete in Osd::GLComputeEvaluator
This fixes an inadvertant double delete of the previous GL progam
when compiling a compute kernel.
2017-01-25 17:00:33 -08:00
Thomas Thomassen
05352272b1 Fixed some typos in comments. 2017-01-24 22:48:48 -08:00
Mike Erwin
fc19cd2604 spelling phase 2
For completeness, ran files through an automated spell checker (Visual
Studio plugin) which caught several things missed while reading.
2017-01-24 22:48:44 -08:00
David G Yu
0dae7601d9 Merge branch 'release/v3_1_1' into dev 2017-01-11 17:04:45 -08:00
Mike Erwin
0beb654f0b spelling
Noticed a few typos when browsing comments. Proceeded with a "manual
spell check", reading all comments and tweaking spelling, grammar,
punctuation.

Didn't bother with Hbr library.

Comments only, no functional changes.
2017-01-11 12:40:49 -08:00
David G Yu
df0ac0c34f Release 3.1.1 2017-01-09 16:33:08 -08:00
barry
e80d4bedcf Fixed bug with non-manifold face-varying topology causing crash:
- corrected the regular patch assembly in Far::PatchTableFactory
    - updated regression shapes to include the problematic topology
2017-01-06 18:37:15 -08:00
barry
796a2f40a7 Fixed bug with non-manifold face-varying topology causing crash:
- corrected the regular patch assembly in Far::PatchTableFactory
    - updated regression shapes to include the problematic topology
2016-12-15 12:33:36 -08:00
David G Yu
5e77907e24 Support creation of Face-Varying stencil tables
Extended Far::StencilTableFactory to support the creation
of stencil tables for face-varying channels. We already
use stencil tables to compute local point face-varying values.
These changes allow a stencil table to be created which
refines face-varying primvar data for all refined points.
2016-11-22 20:04:56 -08:00
David G Yu
3e6febdfb9 Release 3.1.0 2016-10-21 16:03:40 -07:00
David G Yu
675db39cd1 Fixed recent regression in Far::PatchParam
Fixed an incorrect type cast in Far::PatchParam
which could result in truncated FaceId values.
2016-10-19 11:57:08 -07:00
barry
1db24844c6 Minor Doxygen additions and corrections to Far class headers 2016-10-17 17:52:20 -07:00
David G Yu
552e308266 Added OsdGetPatchIsRegular() for GLSL and HLSL 2016-10-17 15:25:17 -07:00
barfowl
86bd917c97 Merge pull request #892 from davidgyu/release_api_review
Addressed some FVar PatchTable API review notes
2016-10-14 21:21:53 -07:00
David G Yu
8c04d5a0be Addressed 2nd Derivative API review notes
Renamed the StencilTable method Update2ndPartials()
to Update2ndDerivs() for consistency with existing API.
2016-10-14 20:13:59 -07:00
David G Yu
5ad64bc33e Addressed some FVar PatchTable API review notes
Fixed some inconsistencies with the methods added
to support face-varying patches.
2016-10-14 20:11:17 -07:00
David G Yu
9c1ae306ea Release 3.1.0 RC2 2016-10-13 21:43:22 -07:00
barry
d83aae9dea Fixed bug failing to sharpen corners of under-isolated irregular patches
- updated PatchTableFactory to always inspect irregular patch corners
2016-10-13 20:28:13 -07:00
David G Yu
8ca33ee1a6 Merge pull request #885 from barfowl/gregory_corners
Restore sharp approximation to smooth corners of irregular patches
2016-10-13 15:31:41 -07:00
barry
460e90db0c Preserve sharp approximation to smooth corners of irregular patches
- PatchTableFactory now sharpens smooth corners if legacy behavior enabled
2016-10-13 15:00:34 -07:00
David G Yu
a0ca583751 Fixed LimitStencilTable.h doc for 2nd derivatives 2016-10-13 09:25:13 -07:00
David G Yu
8309f289a6 Merge pull request #882 from barfowl/fvar_and_inf_sharp_bugs
Bug fixes and improvements for face-varying and inf-sharp patches:
2016-10-12 15:19:12 -07:00
barry
d45b8c68a2 Bug fixes and improvements for face-varying and inf-sharp patches:
- 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
2016-10-12 13:08:35 -07:00
barry
154f29c7fe Fixed adaptive refinement of sharp corners with edge-only boundaries
- updated base level tagging to ignore the boundary interpolation option
    - updated regression shape for edge-only to illustrate behavior
    - updated regression shapes to favor default viewng direction of examples
2016-10-12 11:42:37 -07:00
barfowl
532013f5df Merge pull request #879 from davidgyu/patch_table_api_fixes
Fixed naming inconsistencies in Far::PatchTable
2016-10-11 22:12:08 -07:00
David G Yu
838fce27ab Exposed control for Gregory derivative weight eval
The symbol OPENSUBDIV_GREGORY_EVAL_TRUE_DERIVATIVES
determines the method used to compute derivative weights
for Gregory basis patches.

Setting this symbol during CMake configuration (and
hence during C++ and shader compilation) will enable
the use of true derivative weights.

The default behavior is to use a simpler approximation
for consistency with earlier releases.
2016-10-11 18:50:25 -07:00
David G Yu
df5d01ad3c Fixed naming inconsistencies in Far::PatchTable
The methods which return arrays of FVarPatchParam have
been made plural, e.g. GetFVarPatchParams(), for consistency
with the other methods in PatchTable.

Also fixed a missing doxygen tag.
2016-10-11 17:07:14 -07:00
barfowl
56ddd31e8f Merge pull request #876 from davidgyu/inf_sharp_limit_stencil
Updated LimitStencilTableFactory for InfSharpPatch
2016-10-10 16:43:25 -07:00
David G Yu
3d1cd8c632 Fixed FVar patch evaluation with Gregory basis
This fixes evaluation of face-varying patches when
the patch table has been created using Gregory basis
end caps.
2016-10-10 14:38:26 -07:00
David G Yu
2b371f0aff Updated LimitStencilTableFactory for InfSharpPatch
Far::LimitStencilTableFactory computes limit stencils using
patches from a Far::PatchTable, creating one temporarily if
necessary. This change propagates the useInfSharpPatch option
from adaptively refined topologies.
2016-10-07 16:41:08 -07:00
David G Yu
0034966af4 Release 3.1.0 RC1 2016-09-30 18:29:51 -07:00
David G. Yu
8257516427 Updated Osd mesh util classes for InfSharp patches
This adds some support to the Osd::*Mesh classes for
refining and populating infinitely sharp patches.
2016-09-30 10:56:22 -07:00
barry
4e0c2dc763 Fixed overly aggressive adaptive refinement of face-varying channels:
- added Vtr::Level method to combine VTags for all FVar values of a vertex
    - updated adaptive refinement of FVar data to use combined VTags of corners
2016-09-29 22:54:05 -07:00
barfowl
39c53b234a Merge pull request #869 from davidgyu/cuda_build_fix
Fixed CUDA build with newer SDKs
2016-09-29 21:15:49 -07:00
David G Yu
c824dc34e0 Fixed CUDA build with newer SDKs
Recent CUDA SDKs no longer support the "compute_11"
gpu architecture. We now fallback to "compute_20"
instead for newer SDK versions. Additionally, this
behavior can be overriden using the new CMake list
variable OSD_CUDA_NVCC_FLAGS so that it is easier
for clients to target newer architectures and specify
additional arguments.
2016-09-29 21:04:42 -07:00
David G Yu
710da328f9 Fixed Osd::CudaEvaluator
- Fixed the size of a cudaMemcpy
- Fixed the use of local "static" storage
2016-09-29 20:27:43 -07:00
David G Yu
8929b3062b Merge pull request #867 from barfowl/patch_param_rename
Added inverse of Far::PatchParam::Normalize()
2016-09-29 20:13:36 -07:00
barry
4314e46eb5 Added inverse of Far::PatchParam::Normalize()
- added Far::PatchParam::Unnormalize()
    - removed the now redundant MapBaseToRefined and MapRefinedToBase()
2016-09-29 19:18:16 -07:00
barry
1cb6b1aee1 Fixed regressions introduced in legacy Gregory boundary patches 2016-09-29 19:10:28 -07:00
barry
c8522854d7 Added inf-sharp patch detection intended in previous commit:
- detect patch as irregular when inf-sharp vertex but no inf-sharp edges
2016-09-29 16:59:33 -07:00
barry
05a3fdf036 Exposed option to enable use of inf-sharp patches:
- added new public member to PatchTableFactory::Options
    - replaced internal option with new public option
    - updated tagging and Gregory conversion for sharp patches
2016-09-29 15:05:59 -07:00
David G. Yu
6575a6e326 Updated Osd mesh util classes for FVar refinement
This adds some support to the Osd::*Mesh classes for
refining and populating face-varying patches.
2016-09-29 09:58:47 -07:00
David G. Yu
236afb2c06 Osd Varying and FaceVarying Patch Evaluation
Implemented EvalPatchesVarying and EvalPatchesFaceVarying
methods for Osd::*Evaluator classes, i.e. cpu, omp, tbb,
GLXFB, GLSLCompute, OpenCL, and CUDA.

Also, the GPU Kernel implementations have been updated to use
the common patchBasis implementation instead of re-implementing
methods to compute patch basis weights locally.
2016-09-29 09:56:15 -07:00
David G. Yu
552331f6d9 Added a common patchBasis implementation for Osd
This is used to compute patch basis weights for
the Osd::*Evaluator classes that are unable to
use the C++ implementation from far/patchBasis.h,
e.g. the GLSL, HLSL, OpenCL, and CUDA kernels.

Instead of duplicating this code for each different
kernel language, we share a single implementation
which is minimally adapted to accommodate specific
language restrictions and syntax.

This implementation can also be used by client
shader code executed while drawing, e.g. to
compute patch basis weights for evaluating varying
and face-varying patches.
2016-09-29 09:53:40 -07:00
David G. Yu
5e83b995d1 Added Far::PatchTable::GetVaryingPatchDescriptor()
Also, added guards against empty containers to the
varying data accessors.
2016-09-29 09:51:19 -07:00
David G. Yu
df0cd7ac2f Removed bitfield size from Far::PatchDescriptor
This was an obsolete relic from when PatchDescriptor
was more than a single enum value, but it can cause
problems when sharing patch descriptor values between
devices.

Also, marked the GetNumFVarControlVertices() method as
deprecated.
2016-09-29 09:44:11 -07:00
David G. Yu
4e97cb2aba Reverted recent Far::PatchParam refactoring
This reverts most of the recent changes to the
organization of Far::PatchParam. In particular,
the core parameterization is no longer exposed
as a speparate PatchParamBase class.

We'll revisit this again in a later release, but
for now we will stick with a more straight
forward implementation.
2016-09-29 09:38:32 -07:00
David G Yu
3e34c6031d Added Derivative Options to LimitStencilFactory
This change updates the Far::LimitStencilFactory to
to support options to generate 1st and 2nd derivative
limit stencil weights.

For backward compatibility, the option to generate 1st
derivatives defaults to true.  While for efficiency,
the option to generate 2nd derivatives defaults to false.

Also, updated the Far::LimitStencil class to expose
computed 1st and 2nd derivative limit stencil weights.
2016-09-28 11:56:55 -07:00
David G Yu
5f220e6d0c Merge pull request #855 from barfowl/fvar_tag_bug
Fixed topology tagging bug affecting face-varying patches
2016-09-27 21:51:19 -07:00
barry
b3b0a93a9d Fixed face-varying tagging bug affecting refinement for patches:
- correctly tag sharpened boundaries as irregular
    - distinguish the single-value case between dart and boundary
2016-09-27 19:42:10 -07:00
barry
98451db803 Added new public members to Far::TopologyRefiner::AdaptiveOptions:
- 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
2016-09-27 19:30:27 -07:00
barry
9832e11939 A few bug fixes and minor improvements for inf-sharp patches:
- 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
2016-09-26 19:14:42 -07:00
barry
bbd857f52d Revised adaptive refinement to use inf-sharp tags and feature masks:
- 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
2016-09-23 08:20:36 -07:00
barry
c17b241293 Improved internal span types for better non-manifold support:
- changed Level::VSpan start member from edge to face local index
    - added additional Level::VSpan members for non-manifold cases
    - updated existing usage of Level::VSpan for new members and methods
    - moved and updated definition of FVarLevel::ValueSpan for clarity
2016-09-19 14:18:51 -07:00
barry
89c1765c73 Minor updates to tags for face-varying and inf-sharp topology:
- 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
2016-09-15 23:03:48 -07:00
barry
d2b6505867 Updated Far::PatchTableFactory to recognize patches along inf-sharp edges:
- updated core patch construction methods to recognize inf-sharp option:
        - updated patch regularity test
        - updated regular patch boundary mask query
        - updated irregular patch corner span query
    - added irregular patch corner query when populating patches
2016-09-08 21:18:11 -07:00
barry
2983f1dc2e Enabled point sharing for face-varying Gregory patches:
- added detection of face-varying boundaries in Gregory patch factory
    - re-enabled the "share points" option in PatchTableFactory
2016-09-03 17:27:50 -07:00
barry
653801588e Improved topology inspection and construction of face-varying patches:
- changes mainly involve Far::PatchTableFactory
    - treatment of patches more clearly separated into regular and irregular
    - patch identification now determines regularity and defers classification
    - topology inspection specialized for regular vs irregular patches
    - face-verying patches re-use patch information when topology matches
    - added Vtr::Level methods to improve access to tags for face-varying values
    - improved initial tagging of face-varying values in Vtr::FVarLevel
2016-09-02 20:53:24 -07:00
David G Yu
ab36c3b64f Improved PatchTableFactory for mixed FVar patches
The patches generated for a face-varying channel can be a
mix of regular patches and patches in an alternate basis
for faces that are irregular in face-varying space.

This mix of patches is packed into a single fvar value array
in the patch table using a consistent stride with the individual
patch type determined by the fvar patch param encoding.

- Added Far::PatchParamBase::IsRegular() to designate which
patches are regular.

- Updated Far::PatchTableFactory to gather mixed basis
patches when using the Gregory basis approximation for
irregular patches.

- Fixed Far::PatchTable::EvaluateBasisFaceVarying() to
use the fvar patch param encoding to determine the type
of face-varying patches.
2016-08-31 13:05:55 -07:00
David G Yu
7b85c6b7ef PatchTableFactory changes for smooth FVar patches
Updated Far::PatchTableFactory to be able to populate patches
for smooth evaluation of face-varying data channels.

- Moved computePatchTag() method to BuilderContext
- Added computeFVarPatchTag() method to BuilderContext
- Use Vtr::Level::VSpan to represent the partial ring
  around vertices for face-varying patches.
- Added the option generateFVarLinearPatches (defaults
  to true) to support the legacy behavior of generating
  linear patches for face-varying data channels regardless
  of the underlying face-varying linear interpolation modes.
2016-08-25 00:14:10 -07:00
David G Yu
30c19bea2c Fixed a typo in TopologyRefiner::RefineAdaptive 2016-08-24 23:57:18 -07:00
David G Yu
da5cf5f7ae Updated EndCapBsplineBasis conversion for fvar
For now, face-varying patch conversion to BSpline
basis for irregular patches will always use the
Gregory basis conversion.
2016-08-24 23:57:11 -07:00
David G Yu
6ae049e79c Updated Far internal patch basis methods
These methods now compute the patch basis in terms
of Far::PatchParamBase instead of Far::PatchParam
This allows these methods to be more easily reused
for evaluating patches for face-varying data.
2016-08-24 23:55:49 -07:00
David G Yu
9d787d9af5 Refactored Far::PatchParam for better reuse
This refactoring of Far::PatchParam maintains source
compatibility with earlier releases while allowing the
core patch parameterization to be reused for patches
from face-varying channels.

This introduces a new internal interface class named
Far::PatchParamInterface which provides an interface to
the core patch parameterization and which is implemented
by both Far::PatchParamBase and Far::PatchParam.

Added significant documentation detail to this new
interface class as well as two new methods
MapRefinedToCoarse() and MapCoarseToRefined()
in favor of the now deprecated Normalize().
2016-08-24 23:55:43 -07:00
David G Yu
8b302f652e Cleaned up Far::PatchParam initialization
The parameterization of irregular faces is offset by one level
of refinement from the parameterization of regular faces. This
matches the parameterization used for Ptex texture mapping onto
irregular faces.

This was expressed awkwardly during the assigment of values to
Far::PatchParam, where we pre-decremented the refinement level
for non-quad patches in order to compensate for the incorrect
pre-increment of the refinement depth value stored for non-quad
patches.
2016-08-24 19:51:35 -07:00
David G Yu
aad523a4d7 Populate varying vertices in Far::PatchTable
In order to support a consistent API for refinement and
evaluation of varying primvar data, Far::PatchTable needs
to provide indices for varying data. This adds support to
Far::PatchTableFactory for generating these indices.
2016-08-24 19:48:03 -07:00
barry
60df0a9bdb Fixed int-to-float conversion warning for MSVC 2016-08-23 17:19:55 -07:00
barry
6d5f8fb6b3 Clean up Gregory patch conversion in preparation for further refactoring:
- removed obsolete and unused code from GregoryBasis and ProtoBasis
    - reorganized computation in ProtoBasis to clarify interdependencies
    - separated topological inspection from computation
    - made a clearer distinction between interior and boundary cases
    - improved clarity/consistency of formulae, particularly wrt sin/cos usage
    - added comments, including concerns over consistency and efficiency
2016-08-22 10:55:20 -07:00
David G Yu
53d80e0d2f Updated Far::EndCap*PatchFactory for fvar patches
Added support for gathering face-varying patch points to
the Far::EndCap*PatchFactory classes. Also, changed these classes
to compute varying stencils optionally, since separate varying
stencils are not needed for face-varying patches.

Also, removed a no longer used stateless factory method from
the EndCapGregoryBasisPatchFactory.
2016-08-05 19:08:04 -07:00
David G Yu
4c558d34a4 Fixed packing of regular patches
The case where refinement produces no regular
patches was not being accounted for correctly.

Also, fixed the spelling of PatchTupleVector.
2016-08-05 19:03:52 -07:00
David G Yu
35d8519895 Refactored Far::PatchTableFactory
Re-organized the implementation of the patch table factory
in advance of adding support for bicubic face-varying patches.

- Renamed the AdaptiveContext internal class to BuilderContext
  since this can be used (eventually) to build patch tables for
  uniformly refined topology as well as adaptively refined
  topology.
- Added utility methods to gather patch vertices from the
  levels (and eventually fvarLevels) of a refiner.
- Replaced the FVarChannelCursor with a simpler array of integer
  face-varying channel indices.
- Extracted the topology inspection needed to identify
  patches into a computePatchTag() method.
- Simplified the two-pass traversal of the topology into a
  single pass traversal of the refined topology followed by
  an iteration over the patches that have been identified.
- Replaced internal templated PatchTypes class with simpler
  and more direct accounting and patch array building facilities.
- Changed the API of the end cap patch factories to no longer
  depend on the patch table factory's PatchFaceTag. This has
  been superseded by the specification of appropriate
  VSpans at the corners of the end patch.
2016-08-05 12:38:05 -07:00
David G Yu
4da88a8503 Merge pull request #826 from barfowl/inf_sharp_tags
Added new vertex tags to identify infinitely sharp features
2016-07-21 09:02:34 -07:00
barry
a9ecd79c32 Added new VTags for inf-sharp features:
- added new Vtr::Level::VTag members for inf-sharp features
    - updated Vtr::Level::print() to recognize new tags
    - explicitly initialized tags for new edge-verts in Vtr::Refinement
    - initialized tags for base level verts in Far::TopologyRefinerFactory
2016-07-20 16:16:52 -07:00
barry
47934add68 Update BSpline end cap factory to inspect partial neighborhoods at corners
- any partial neighborhood at a corner warrants use of Gregory patch
    - make use of corner tags for other tests rather than revisiting topology
2016-07-20 15:55:17 -07:00
Takahito Tejima
1e625e690e Merge pull request #824 from davidgyu/patch_table_api
Updated PatchTable for Varying and Face-Varying
2016-07-20 11:40:24 -07:00
David G Yu
fc12816d97 Updated PatchTable for Varying and Face-Varying
This change updates Far::PatchTable to include support for
evaluating varying and face-varying data on patches.

This adds to existing API and follows the existing patterns
used for vertex patches.

This includes data and methods to evaluate varying and
face-varying basis functions as well as methods to compute
local point values for varying and face-varying primvar data.

This is the foundation for updating Far::PatchTableFactory
to generate bicubic patches for face-varying channels.
2016-07-20 10:44:45 -07:00
barry
20d7ed5d79 Fixed MSVC warning regarding int to bool conversion 2016-07-19 10:53:17 -07:00
barry
61aedddd3e Added support for separate isolation levels of 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
2016-07-19 10:05:15 -07:00
Dave Clyde
653c9b7e76 Fix additional instances of 'and' 2016-07-16 21:29:05 -07:00
Dave Clyde
61d0c66531 Merge current github/dev into pull request 760 2016-07-16 20:52:54 -07:00
David G Yu
5aff46607d Merge pull request #821 from barfowl/single_crease_test
Improved Vtr::Level::isSingleCreasePatch() test
2016-07-14 15:15:13 -07:00
barry
da204a2d2d Improved Vtr::Level::isSingleCreasePatch() test:
- make greater use of the VTags of the face corners
    - results in quicker rejection and reduced iteration
2016-07-14 13:46:13 -07:00
barry
dc1ed8a296 Fixed bug in Far::PatchTableFactory to correct sharpness assignment:
- sharpness pointers specific to the patch type now used instead of
      the pointer for regular patches
2016-07-14 13:06:18 -07:00
barry
2d33a6ebf4 Adding VSpan to standardize representation of partial rings around vertices:
- added definition and gathering method to Vtr::Level
    - extended Far::EndCap...PatchFactories with VSpan[4] for patch corners
    - extended Far::EndCapGregoryPatchFactory to avoid last level assumption
    - adapted Far::PatchTableFactory to use above extensions
    - extended Far::GregoryBasis to recognize VSpan corners
    - simplified Far::GregoryBasis treatement of boundaries
    - fixed bug in Far::GregoryBasis related to smooth corners
2016-07-13 18:16:11 -07:00
David G. Yu
3e3695652f iso-646 fix for CUDA / CL / TBB 2016-06-25 14:23:55 -07:00
David G Yu
3d08e0ac27 Merge pull request #810 from thomthom/dev-iso646-fix-dx
iso-646 fix for DirectX project
2016-06-25 13:55:54 -07:00
Thomas Thomassen
b1e1ff31b4 Clean up DX, example and tutorials. 2016-06-25 10:30:50 +02:00
Thomas Thomassen
72610a3043 Glean up GLEW and GLFW. 2016-06-25 10:29:59 +02:00
Thomas Thomassen
aa0599b4bc Merge branch 'dev'
Conflicts:
	opensubdiv/far/patchTableFactory.cpp
2016-06-24 23:30:44 +02:00
George ElKoura
923d60ca74 Use cmake's folder feature on platforms that support it.
We now make use of folders where they are supported.  In particular, on Visual Studio, this produces much nicer solutions to navigate.
2016-06-09 17:04:26 -07:00
barfowl
4808b50785 Fixed Chaikin-related bug subdividing edge sharpness:
- child sharpness should retain parent sharpness when not semi-sharp
2016-03-30 18:32:55 -07:00
David G Yu
799b26bba3 Release 3.0.5 2016-03-25 15:15:29 -07:00
David G Yu
841f573224 Fixed residual memory consumed by end cap stencils
An earlier change improved transient memory used during the construction
of end cap stencil tables but could leave unused capacity in the internal
containers of the resulting stencil tables. This change adds an additional
internal factory helper method which trims this storage.
2016-03-16 14:44:47 -07:00
Thomas Thomassen
c422a79031 Rename and, or and not to &&, || and ! to address compilers that don't support them out of the box without extra headers. 2016-02-21 15:47:11 +01:00
David G Yu
4690519424 Release 3.0.4 2016-02-10 16:50:43 -08:00
Takahito Tejima
72bd9f00ad Merge pull request #777 from davidgyu/refineLevelsFix
Fixed tutorial use of refined levels.
2016-02-05 17:01:31 -08:00
Takahito Tejima
2adef0d2fd Merge pull request #782 from davidgyu/vs2015Fix1
Fixed build warnings (VS2015)
2016-02-05 17:00:48 -08:00
Takahito Tejima
4edcdbc1b7 Merge pull request #781 from davidgyu/perfFix
Tess shader performance fix
2016-02-05 17:00:26 -08:00
David G Yu
108c3a86cc Merge pull request #772 from xiao-deng/dev
Add events control to clVertexBuffer and clEvaluator
2016-02-05 16:56:56 -08:00
manuelk
20b6dd2aa3 Fix a minor build warning (trips MSVC 2015) 2016-02-05 15:30:59 -08:00
David G. Yu
301496bd3b Additional tess control/hull shader perf fixes
This change make the bspline patch tess control/hull shader revert to
control vertex mirroring for boundary edges when the patch sharpness is
zero. This change helps improve some shader codegen optimization and
L1 cache behavior on (at least) Kepler GPUs with recent drivers.
2016-02-05 14:53:13 -08:00
David G. Yu
71fcb67509 Tessellation shader performance improvement
Re-organized the single-crease patch code path in the tessellation
control/hull shaders to improve performance in the case where no patches
have non-zero crease sharpnesses.
2016-01-29 15:31:48 -08:00
David G. Yu
86026a9fe8 Shader performance workaround
Changed a couple of local 4x4 matrices to global uniforms to
work around a performance problem on recent GL drivers.

There are two local 4x4 float matrices with constant initializers
in the function OsdComputePerPatchVertexBSpline(...). Changing
these from local variables to global initialized uniforms improves
performance dramatically on recent NVIDIA drivers (e.g. 361.48 windows).

There is no such difference with Direct3D, but this change updates
the shader code for both implementations for consistency.
2016-01-29 15:31:38 -08:00
David G Yu
3aaf491dda Fixed Far::TopologyRefiner::GetNumLevels()
This method now returns the number of _farLevels where previously
it returned the number of _levels. This is primarily a semantic
difference, as the two containers should have equal size. But this
method is intended to accompany Far::TopologyRefiner::GetLevel()
which returns a reference to an element in _farLevels;
2016-01-22 17:38:58 -08:00
manuelk
4746ab4bc9 Surround D3D10_SHADER_RESOURCES_MAY_ALIAS with #ifdef to avoid build errors with some versions of D3D SDK
Fixes #773
2016-01-13 11:33:38 -08:00
David G. Yu
67a07044d7 Improved fix for stencil table construction
My previous fix added some defensive logic in case the
local point stencil table was empty when attempting to
append local point stencils to an existing stencil table.

This change fixes Far::PatchTableFactory to not return
empty local point stencil tables when there are no local
point stencils. This behavior is now more consistent with
earlier releases.

We will leave the earlier defensive logic in place as well.
2015-12-11 14:37:39 -08:00
Jeremy Cowles
b3213df0a1 Merge pull request #761 from davidgyu/stencilFactoryFix
Fixed potential crash in Far::StencilTableFactory
2015-12-11 10:56:29 -08:00
xiao-deng
73b5883d02 Add events control to clVertexBuffer and clEvaluator 2015-11-23 17:54:03 +08:00
David G. Yu
d1b9e45c13 Fixed potential crash in Far::StencilTableFactory
Now StencilTableFactory::AppendLocalPointStencilTable() does
nothing when the localPointStencilTable is empty. This avoids
a potential crash (failed assertion) when both the baseStencilTable
and the localPointStencilTable are empty, as is the case for
simple geometry like the all-quads torus regression test shape.
2015-11-18 18:57:47 -08:00