Fix T59395: Subdivision modifier with quality 1 crashes blender
authorSergey Sharybin <sergey.vfx@gmail.com>
Mon, 21 Jan 2019 15:43:30 +0000 (16:43 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 22 Jan 2019 10:57:20 +0000 (11:57 +0100)
commitd6d101feca09ae17af00f080a76acbc4d6785c3e
tree3c49f73009307eb3aa3c4b5ec75216b64dbb38bc
parentfef20d987c1f01a732526616766953dec4e8ac60
Fix T59395: Subdivision modifier with quality 1 crashes blender

This is actually a workaround for the crash in OpenSubdiv.
Topology refiner will have a crash when special conditions
are met:

- Refiner is configured to use infinitely sharp patches.
- Refinement happens for the level 1 (which we call Quality 1 on
  Blender side).
- Mesh has non-quad faces.

The workaround is to force refinement to happen to level 2 (or
quality 2 on Blender side) when those conditions are met.

Later on with the next OpenSubdiv update we can remove this
workaround, since there was work done on OpenSubdiv side to
deal better with such configurations.

The modifier will now be somewhat slower, but this will be
compensated with upcoming topology cache enabled by default.

The workaround is done when initializing settings, so the
comparison of topology refiner settings is happening without
any extra workarounds there.
source/blender/blenkernel/BKE_subdiv.h
source/blender/blenkernel/intern/subdiv.c
source/blender/modifiers/intern/MOD_multires.c
source/blender/modifiers/intern/MOD_subsurf.c