Commit Graph

688 Commits

Author SHA1 Message Date
Barry Fowler
c49a0c2e44
Merge pull request #1130 from davidgyu/mtl_viewer_tess_fix
Thanks, David
2019-06-18 16:23:31 -07:00
David G Yu
cdbeac560f Fixed mtlViewer transition patch tessellation
Patches with transition edges were not being tessellated
correctly when drawing multiple patch types, e.g. with
Gregory or Legacy Gregory approximation at irregular features,
because the per-patch tess factors buffer was not being
offset correctly for the draw command for each patch type.

Fixed this to be consistent with other patch drawing by
recording and applying offsets when binding this buffer
for each patch type, and making sure that attributes for
the tess factors buffer are bound when drawing Legacy Gregory
patch types.
2019-06-18 13:36:49 -07:00
David G Yu
58a71672a7 Update glFVarViewer option defaults
Enabled smooth corner, inf sharp and single crease patch
options by default.
2019-06-18 10:28:54 -07:00
George ElKoura
3c4081aac3
Merge pull request #1126 from davidgyu/examples_shaders
Minor improvements to examples for Loop
2019-06-17 21:11:02 -07:00
David G Yu
ed3fa312e5 Removed obsolete LOOP define from example shaders
Removed the use of the LOOP preprocessor symbol from
the remaining example shader code. The shader code is now
configured according to the types of the resulting patches
without depending on the subdivision scheme of the mesh
topology.
2019-06-17 17:59:15 -07:00
David G Yu
9fe1284ae3 improved glViewer shaders for Loop
Removed the use of the LOOP preprocessor symbol from
the glFVarViewer shaders code. The shader code is now
configured according to the types of the resulting patches
without depending on the subdivision scheme of the mesh
topology.

Improved the implementation of face-varying interpolation
similar to the glFVarViewer. Now the face-varying patch
type is obtained from the face-varying patch array
descriptor instead of being hard-coded by subdivison scheme.
2019-06-17 17:59:15 -07:00
David G Yu
5d33f7c28e Improved glFVarViewer shaders for Loop
Removed the use of the LOOP preprocessor symbol from
the glFVarViewer shaders code. The shader code is now
configured according to the types of the resulting patches
without depending on the subdivision scheme of the mesh
topology.

This allows the implementation of face-varying interpolation
to be improved and simplifies both the shader code and
application code.

Also, fixed a couple of incorrect buffer/texture bindings
that were raising GL errors.
2019-06-17 17:59:15 -07:00
David G Yu
d8abffc976 Updated more example viewer shape lists
Updated the shape lists in the glEvalLimit, glImaging,
and glStencilViewer examples to match recent updates
to the other example viewers.
2019-06-17 17:36:48 -07:00
David G Yu
62195753a9 Updated default options for examples
Changed several default options in the example viewers to the
preferred settings for improved shape fidelity and to improve
consistency between the different viewers:
 - enabled smooth corner, and inf sharp patch options by default
 - disabled screenspace tess and fractional tess by default
 - changed the default approximation to Gregory in the mtlViewer
2019-06-17 17:33:40 -07:00
David G Yu
973b7fe7a5 Fixed glViewer triangle normal calculation
The normal computed for primitive triangles had a flipped
orientation in the glViewer, This caused linear approximating
patches to be shaded incorrectly for adaptively refined Loop
meshes, and similarly triangles resulting from uniformly refined
Loop meshes.
2019-06-17 16:56:10 -07:00
barry
4a198ace66 Added new Loop tetrahedron shape to main example viewers:
- added to the main geometry viewers: glViewer, dxViewer, mtlViewer
    - added to glFVarViewer for viewing face-varying UVs
2019-06-14 15:24:00 -07:00
David G Yu
d8619b2997
Merge pull request #1115 from barfowl/examples_fvar_shapes
Updated shape list for GL face-varying viewer
2019-06-06 09:47:13 -07:00
barry
347eb033d5 Update shape list for examples/glFVarViewer:
- included shapes added in recent pull requests
    - removed redundant shapes
2019-06-05 16:16:45 -07:00
barry
cf9573cdc5 Updated shape lists for example viewers:
- included shapes added in recent pull requests
    - removed old shapes made redundant by recent additions
    - ordered Catmark and Loop sets for consistency
2019-06-04 19:14:38 -07:00
David G Yu
4789df9522 Mtl implementation mtlViewer support for Loop
Updated mtlViewer to support drawing of tessellated
Loop scheme meshes.
2019-05-30 10:04:02 -07:00
David G Yu
2e175ff52b Mtl implementation mtlViewer organization
Refactored computation and drawing code used
for tessellated patches to improve readability
and extensibility.

- Updated mtlViewer.metal computation kernel to express
  data indexing using familiar semantic concepts: i.e.
  primitiveID, vertexID, etc. instead of threadgroup
  semantics.
- Updated mtlViewer.mm to consolidate patch type
  dispatch. Now, the configuration and execution
  of the compute and drawing passes is controlled
  by a PipelineConfig descriptor.
2019-05-30 10:00:55 -07:00
David G Yu
4d84b6ff9b Mtl implementation fixed mtlViewer fractional tess
Fixed mtlViewer to be more consistent with the other
example viewers and allow screen space tessellation
to be enabled independently from fractional tessellation.
2019-05-30 00:47:50 -07:00
David G Yu
232d50c231 Mtl implementation cleanup thread dispatch
Moved some of the boiler-plate code related to
thread group dispatching and configuration from
the osd shader source to the example shader source.
2019-05-30 00:47:50 -07:00
David G Yu
ed8ecd84d1 Mtl implementation example options
Updated the Metal viewer runtime options to more
closely match the other viewers:

- default to adaptive tessellation
- default to patch type coloring
- present end cap options as: Linear/Regular/Gregory
- exposed switches for patch refinement options:
  smooth corner, single crease, inf sharp
- updated fvar linear interpolation labels
  and methods to match glFVarViewer
- updated iOS Main.storyboard GUI to match
2019-05-30 00:47:50 -07:00
David G Yu
ebf2917dc7 Mtl implementation fixed example fvar interp
Refactored the Metal viewer's implementation of
smooth face-varying uv interpolation so that the
face-varying patch basis is correctly determined
by inspecting the face-varying patch array type
descriptors.
2019-05-30 00:47:45 -07:00
David G Yu
8912b3f3d3 Mtl implementation screenspace fvar interp
Fixed smooth face-varying interpolation for the Metal viewer
when using screen-space tessellation. The location to evaluate
the face-varying value needs to match the computed tess location
instead of the intrinsic position_in_patch.
2019-05-28 10:02:08 -07:00
David G Yu
291eff0bed Mtl implementation whitespace fixes
Fixed numerous whitespace inconsistencies and violations
in the core osd metal implementation and examples.
2019-05-22 18:00:36 -07:00
barry
239eb28fcd Minor improvements to examples/glFVarViewer:
- added checkboxes for Control Edges and Vertices as used elsewhere
    - added checkbox for UV Backface Culling specific to this example
    - relabeled the Boundaries pulldown to Linear Interpolation
    - renamed variables in source to better reflect the affected enum
2019-05-15 15:22:18 -07:00
Pol
1844d620f4
Merge pull request #1098 from davidgyu/loop_patches_dx11_drawing
Drawing Loop patches with HLSL tessellation shaders
2019-04-26 16:54:26 -07:00
David G Yu
944f98a9ea Updated dxViewer for Loop patches
Along with other changes to improve consistency with the glViewer
2019-04-26 11:08:01 -07:00
barry
329fd509a1 Updated GL examples for common command line arguments:
- updated all examples/gl* to make use of common/argOptions.h
    - implemented -yup where user-supplied geometry is imported
    - updated glPtexViewer to use ObjAnim class for animated geometry
2019-04-24 19:39:18 -07:00
barry
b7470bb26f Moved definition of struct ShapeDesc into same header file as Shape:
- added definition to regression/common/shape_utils.h
    - removed examples/common/shapeDesc.h and all references to it
    - removed local definitions of ShapeDesc from examples, regressions, etc.
    - overloaded Shape::parseObj() with ShapeDesc
    - updated examples to use Shape::parseObj(ShapeDesc const&);
    - removed axis argument to Shape::ParseObj() and ObjAnim::Create()
2019-04-23 12:05:14 -07:00
barry
48a557abeb Replaced -axis with -yup in common args and examples:
- replaced -axis with -yup in examples/common/argOptions
    - updated clients of ArgOptions: glViewer, glFVarViewer, dxViewer
    - updated documentation for common arguments and usage of examples
2019-04-16 18:59:24 -07:00
George ElKoura
d02cad1e65 Use the new common ArgOptions in dxViewer 2019-04-09 21:06:06 -07:00
George ElKoura
091c84650c Fix build with gcc by including the headers we need 2019-04-09 13:30:35 -07:00
George ElKoura
61f5ceabde Factored viewer args parsing for into common place
Started refactoring how we parse arguments for sample viewer
applications into a common place.  This will make it easier
to keep args consistent between applications.
2019-04-08 17:59:46 -07:00
barry
949dc1dd0d Pruned the overly long list of shapes in example viewers:
- removed redundant, trivial or otherwise poor shapes from viewer lists
    - copied init_shapes.h to glViewer, dxViewer and mtlViewer for consistency
2019-03-22 16:55:30 -07:00
Barry Fowler
9c41e8610a
Merge pull request #1078 from c64kernal/dev_mtlmenu
Mostly cosmetic clean up to the Metal example apps
2019-03-13 13:03:40 -07:00
Barry Fowler
a254073a87
Merge pull request #1077 from c64kernal/dev_mtlcmakefix
Fix build of Metal examples when also building GL
2019-03-13 13:03:12 -07:00
George ElKoura
39844f807b Mostly cosmetic clean up to the Metal example apps
- Renamed the default "NewApplication" in menus to the real name of the app
- Fixed copyright information in the "About" dialog.
2019-03-09 23:17:23 -08:00
George ElKoura
0f2dd41f0a Fix build of Metal examples when also building GL
This fixes the build when trying to build both the Metal examples
and the GL examples in the same build. The change is an unfortunate
consequence of how dependencies are bundled together in
examples/common and a future task is needed to split up these
dependencies.  The same workaround exists in the DirectX examples as
well and would also benefit from splitting up the dependencies.
2019-03-09 22:58:34 -08:00
George ElKoura
f64b87de28 Fix up incorrect include path 2019-03-09 22:52:42 -08:00
barry
aa46fd3d6d Added UI options to examples/glFVarViewer consistent with glViewer:
- added the smooth corner, single crease and inf-sharp patch options
    - added a missing shape illustrating inf-sharp patches
2019-02-06 18:45:02 -08:00
barry
5595255858 Several minor updates to the GL examples:
- addition of new shapes -- mainly Loop and Bilinear
    - removal of redundant shapes and those not suited to a particular example
    - enforced consistent "Patch Type" coloring where provided
    - enforced consistent command line usage for common options and Obj input
    - enforced consistent default settings on initialization
    - added errors and/or assertions where legitimate limitations remain
    - improved error handling (OSD errors not being flushed before termination)
2019-02-05 17:22:10 -08:00
barry
20dcd24b9d Updated all example source for consistent inclusion of header files:
- prepend the opensubdiv directory to all library headers included
    - removed the opensubdiv directory from all declared include paths
2019-01-31 10:49:02 -08:00
David G Yu
c37bb51736 Fixed glViewer and glStencilViewer arg parsing
- Fixed an indexing bug in command line argument processing.
- Changed glStencilViewer mesh initialization to be more consistent
with other viewers.
2019-01-25 19:40:43 -08:00
David G Yu
6ba1d9fcc2 Updated glEvalLimit viewer for Loop patches
- Removed restriction on adaptive refinement for Loop meshes
- Updated internal class used to manage eval locations for triangle patches
- Added command line options to specifiy the Scheme for .obj input files
2019-01-25 19:31:26 -08:00
David G Yu
3757eb120b Updated glStencilViewer for Loop patches
Also, changed sample initialization for triangle refinement to keep sample
locations within base triangles.
2019-01-18 18:21:13 -08:00
David G Yu
06f4a60939 Updated glViewer and glFVarViewer for Loop patches
- Removed Catmark restrictions in the application code and shaders
- Added command line options to specifiy the Scheme for .obj input files
- Added support for Linear end-cap approximation
- Updated GUI labels for end-cap types, i.e. "Linear" instead of "Bilinear"
  and "Regular" instead of "BSpline".
- Added new shading color to glViewer for "Patch Depth"
- Disabled screen-space and fractional tessellation by default
2019-01-18 18:20:21 -08:00
David G Yu
ed97ce1b26 Updated glEvalLimitViewer for uniform refinement
Previously, the glEvalLimitViewer was hard coded to
use only adaptive refinement, but this change demostrates
how to evaluate patch locations on the linear patches
resulting from a uniform refinement.

By default, in a patch table created from a uniform refinement,
the patch indices for vertex patches account for base level indices,
while the patch indices for face-varying patches do not account for base
level indices.

This change also updates the example to set the patch table factory options
so that both kinds of patch indices account for base level indices.
2019-01-07 13:45:20 -08:00
David G Yu
ff34c514f5 Improved patch basis eval for Osd to match Far
This updates the patch basis evaluation functions in Osd
to match recent changes to far/patchBasis.

This also exposes a common facility for dealing with PatchCoord,
PatchArray, and PatchParam. These are exposed as global functions
operating on struct data, since C++ style class methods are not
supported by all of the Osd shader and kernel execution envirionments.

Changes:
    - Merged far/patchBasis.cpp to osd/patchBasisCommon{,Types,Eval}.h
    - Exposed PatchCoord, PatchArray, and PatchParam to Osd kernels
    - exposed OsdEvaluatePatchBasis and OsdEvaluatePatchBasisNormalized
    - Updated CPU, TBB, Omp, CUDA, OpenCL, GLSL, HLSL, and Metal evaluators
    - Updated glFVarViewer
2018-11-15 17:11:50 -08:00
barry
5c2191f89c Added more common utilities to support Shapes with non-Catmark schemes:
- added conversions Shape and Sdc scheme types
    - extended ObjAnim to take a scheme type on construction
    - updated far/tutorial_9 to make use of new functionality
2018-10-19 13:05:23 -07:00
barry
c424594625 Major step towards consistent use of include paths in source files:
- changed the main OPENSUBDIV_INCLUDE_DIR to exclude ./opensubdiv
    - updated CMakeLists.txt files in non-examples to use only this path
    - updated CMakeLists.txt files in examples to append ./opensubdiv to path
    - updated source in regression/common to use #include <opensubdiv/...>
    - updated source in examples/common to use #include <opensubdiv/...>
    - deferred source in examples to be updated on a case-by-case basis
2018-10-09 10:51:31 -07:00
Sergey Sharybin
ded704f72a Fix missing break statements in glStencilViewer
Changing adaptive subdivision option was affecting on
infinite sharp path option.
2018-07-04 11:46:04 +02:00
barfowl
9c9108c3db
Merge pull request #959 from davidgyu/hlsl_patch_normals
Thanks David
2018-01-16 15:31:33 -08:00