Unconnected vertices are non-manifold topology and trigger asserts in the
subdivision table factory. The code has been hardened to not assert out and
return the proper subdivision depth. The fix appears to be workin on our test
cases, but the odds are fairly high that non-manifolds will still break
something else...
GetValence() cannot be called on singular vertices. Singular vertices can be introduced
in an Hbr mesh as a result of hole tags, so we have to check for that when ranking
vertices for the subdivision table.
note 1 : this fix is somewhat delicate and may trigger other problems that
i did not notice with superficial testing
note 2 : extraordinary faces surrounded by holes still break in adaptive mode
* assembler kernels are based on the C implementation in neonKernel.cpp
* enable assembler kernel functions in neonComputeController.cpp with #define USE_ASM_KERNELS 1
* added public functions to `FarMeshFactory` that duplicate, rearrange, and split vertices
* added supporting protected functions to `FarCatmarkSubdivisionTablesFactory` and `FarPatchTablesFactory`
This makes it possible to use use bilinear subdivisions which
corresponds to Blender's simple subdivisions.
Most of the changes doesn't break any existing API because of
using default values. it's only C-API function which now expects
an extra argument.
This doesn't entirely work because it uses adaptive evaluator
which gives some unwanted curvatures when using bilinear scheme.
Basically title says it all, now it's possible to pass
subdivision scheme to the OsdUtilMesh::Initialize().
It's a last argument with default to CATMARK so it doesn't
break existing code.
Unused argument `pass` was defined in the CUDA kernel and it was never
passed to this function from the C++ code. This argument is also wasn't
used by the function itself.
Solved by checking on run-time whether texture buffer objects
are supported.
When building with GLEW library doing compile-time check is
not enough, because actual information about existing features
is only known on runtime.
This only makes ti so CPU backend works, GLSL backends still
requires some work if we want them to make working. Not sure
it worth doing this now.
* added `OsdMeshInterface::GetFarMesh` and `OsdMesh::GetFarMesh` to match `OsdGLMesh` and `OsdD3D11Mesh`
* added `interleaved` argument to `OsdMesh::Refine` to match `OsdMeshInterface::Refine`