diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-08-03 17:44:46 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-08-03 17:44:46 +0300 |
commit | e5f7b0f330c09d6944969a0cc1e496ca112f0711 (patch) | |
tree | 94302281fda57fea1121ae39ca9b33dc471aa838 /source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c | |
parent | 4a0f3bece31be4997dd19c8ee8faa5ae6a1914e3 (diff) |
OpenSubdiv: Avoid crashes when GPU subsurf is tried to be used on CPU
The issue was caused by CCG code being confused by number of geometry returned
by utility functions in the case of the skipped grids.
Made it so that code is always only working with CCG data and handled drawing
code in a bit special way now.
This solves such crashes as i.e. snapping.
Diffstat (limited to 'source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c')
-rw-r--r-- | source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c | 42 |
1 files changed, 0 insertions, 42 deletions
diff --git a/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c b/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c index c6c8f14dd2c..c7526521963 100644 --- a/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c +++ b/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c @@ -863,46 +863,4 @@ void ccgSubSurf__sync_opensubdiv(CCGSubSurf *ss) #endif } -static const OpenSubdiv_TopologyRefinerDescr *get_effective_refiner( - const CCGSubSurf *ss) -{ - if (ss->osd_topology_refiner != NULL) { - return ss->osd_topology_refiner; - } - if (ss->osd_mesh != NULL) { - return openSubdiv_getGLMeshTopologyRefiner(ss->osd_mesh); - } - return 0; -} - -int ccgSubSurf__getNumOsdBaseVerts(const CCGSubSurf *ss) -{ - const OpenSubdiv_TopologyRefinerDescr *topology_refiner = - get_effective_refiner(ss); - if (topology_refiner == NULL) { - return 0; - } - return openSubdiv_topologyRefinerGetNumVerts(topology_refiner); -} - -int ccgSubSurf__getNumOsdBaseEdges(const CCGSubSurf *ss) -{ - const OpenSubdiv_TopologyRefinerDescr *topology_refiner = - get_effective_refiner(ss); - if (topology_refiner == NULL) { - return 0; - } - return openSubdiv_topologyRefinerGetNumEdges(topology_refiner); -} - -int ccgSubSurf__getNumOsdBaseFaces(const CCGSubSurf *ss) -{ - const OpenSubdiv_TopologyRefinerDescr *topology_refiner = - get_effective_refiner(ss); - if (topology_refiner == NULL) { - return 0; - } - return openSubdiv_topologyRefinerGetNumFaces(topology_refiner); -} - #endif /* WITH_OPENSUBDIV */ |