From bcac081ad5ced938d1056e0f9f08f220a9bc7e25 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 28 Feb 2020 14:18:50 +0100 Subject: OpenSubdiv: Allow less topology callbacks assigned Useful for cases when topology does not need to have any crease or UV layers. Now instead of assigning callbacks which returns zero data is possible to simply assign the callback itself to NULL. --- intern/opensubdiv/internal/opensubdiv_converter_factory.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'intern/opensubdiv/internal') diff --git a/intern/opensubdiv/internal/opensubdiv_converter_factory.cc b/intern/opensubdiv/internal/opensubdiv_converter_factory.cc index 0c1514f2fea..a42adf72c49 100644 --- a/intern/opensubdiv/internal/opensubdiv_converter_factory.cc +++ b/intern/opensubdiv/internal/opensubdiv_converter_factory.cc @@ -140,6 +140,12 @@ inline bool TopologyRefinerFactory::assignComponentTags( using OpenSubdiv::Sdc::Crease; const OpenSubdiv_Converter *converter = cb_data.converter; const bool full_topology_specified = converter->specifiesFullTopology(converter); + if (!full_topology_specified && converter->getNumEdges == NULL) { + assert(converter->getEdgeSharpness == NULL); + assert(converter->getVertexSharpness == NULL); + assert(converter->isInfiniteSharpVertex == NULL); + return true; + } const int num_edges = converter->getNumEdges(converter); for (int edge_index = 0; edge_index < num_edges; ++edge_index) { const float sharpness = converter->getEdgeSharpness(converter, edge_index); @@ -190,6 +196,13 @@ inline bool TopologyRefinerFactory::assignFaceVaryingTopolo TopologyRefiner &refiner, const TopologyRefinerData &cb_data) { const OpenSubdiv_Converter *converter = cb_data.converter; + if (converter->getNumUVLayers == NULL) { + assert(converter->precalcUVLayer == NULL); + assert(converter->getNumUVCoordinates == NULL); + assert(converter->getFaceCornerUVIndex == NULL); + assert(converter->finishUVLayer == NULL); + return true; + } const int num_layers = converter->getNumUVLayers(converter); if (num_layers <= 0) { // No UV maps, we can skip any face-varying data. -- cgit v1.2.3