Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-08-01 16:43:57 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-08-01 19:42:59 +0300
commit4fe14d6a26e101a32e6a0ec9722248d215287a9d (patch)
treef8ace27ca928a36f2e1fad8d2603324878772b0a /source/blender/blenkernel/intern/subdiv.c
parent63058490a3da932d2c9224aa4555f23eebb77264 (diff)
Subsurf: Support subdivision of mesh with just loose elements
Diffstat (limited to 'source/blender/blenkernel/intern/subdiv.c')
-rw-r--r--source/blender/blenkernel/intern/subdiv.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/subdiv.c b/source/blender/blenkernel/intern/subdiv.c
index d8e0c517d91..bae5491c079 100644
--- a/source/blender/blenkernel/intern/subdiv.c
+++ b/source/blender/blenkernel/intern/subdiv.c
@@ -29,6 +29,8 @@
#include "BKE_subdiv.h"
+#include "DNA_mesh_types.h"
+
#include "BLI_utildefines.h"
#include "MEM_guardedalloc.h"
@@ -52,11 +54,18 @@ Subdiv *BKE_subdiv_new_from_converter(const SubdivSettings *settings,
OpenSubdiv_TopologyRefinerSettings topology_refiner_settings;
topology_refiner_settings.level = settings->level;
topology_refiner_settings.is_adaptive = settings->is_adaptive;
- struct OpenSubdiv_TopologyRefiner *osd_topology_refiner =
- openSubdiv_createTopologyRefinerFromConverter(
- converter, &topology_refiner_settings);
- if (osd_topology_refiner == NULL) {
- return NULL;
+ struct OpenSubdiv_TopologyRefiner *osd_topology_refiner = NULL;
+ if (converter->getNumVertices(converter) != 0) {
+ osd_topology_refiner =
+ openSubdiv_createTopologyRefinerFromConverter(
+ converter, &topology_refiner_settings);
+
+ }
+ else {
+ /* TODO(sergey): Check whether original geometry had any vertices.
+ * The thing here is: OpenSubdiv can only deal with faces, but our
+ * side of subdiv also deals with loose vertices and edges.
+ */
}
Subdiv *subdiv = MEM_callocN(sizeof(Subdiv), "subdiv from converetr");
subdiv->settings = *settings;
@@ -75,6 +84,9 @@ Subdiv *BKE_subdiv_new_from_mesh(const SubdivSettings *settings,
struct Mesh *mesh)
{
#ifdef WITH_OPENSUBDIV
+ if (mesh->totvert == 0) {
+ return NULL;
+ }
OpenSubdiv_Converter converter;
BKE_subdiv_converter_init_for_mesh(&converter, settings, mesh);
Subdiv *subdiv = BKE_subdiv_new_from_converter(settings, &converter);