Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/subsurf_ccg.c
| Show First 20 Lines • Show All 3,822 Lines • ▼ Show 20 Lines | struct DerivedMesh *subsurf_make_derived_from_derived( | ||||
| CCGFlags useAging = smd->flags & eSubsurfModifierFlag_DebugIncr ? CCG_USE_AGING : 0; | CCGFlags useAging = smd->flags & eSubsurfModifierFlag_DebugIncr ? CCG_USE_AGING : 0; | ||||
| int useSubsurfUv = smd->flags & eSubsurfModifierFlag_SubsurfUv; | int useSubsurfUv = smd->flags & eSubsurfModifierFlag_SubsurfUv; | ||||
| int drawInteriorEdges = !(smd->flags & eSubsurfModifierFlag_ControlEdges); | int drawInteriorEdges = !(smd->flags & eSubsurfModifierFlag_ControlEdges); | ||||
| CCGDerivedMesh *result; | CCGDerivedMesh *result; | ||||
| /* note: editmode calculation can only run once per | /* note: editmode calculation can only run once per | ||||
| * modifier stack evaluation (uses freed cache) [#36299] */ | * modifier stack evaluation (uses freed cache) [#36299] */ | ||||
| if (flags & SUBSURF_FOR_EDIT_MODE) { | if (flags & SUBSURF_FOR_EDIT_MODE) { | ||||
| int levels = (smd->modifier.scene) ? get_render_subsurf_level(&smd->modifier.scene->r, smd->levels) : smd->levels; | int levels = (smd->modifier.scene) ? get_render_subsurf_level(&smd->modifier.scene->r, smd->levels, false) : smd->levels; | ||||
| smd->emCache = _getSubSurf(smd->emCache, levels, 3, useSimple | useAging | CCG_CALC_NORMALS); | smd->emCache = _getSubSurf(smd->emCache, levels, 3, useSimple | useAging | CCG_CALC_NORMALS); | ||||
| ss_sync_from_derivedmesh(smd->emCache, dm, vertCos, useSimple); | ss_sync_from_derivedmesh(smd->emCache, dm, vertCos, useSimple); | ||||
| result = getCCGDerivedMesh(smd->emCache, | result = getCCGDerivedMesh(smd->emCache, | ||||
| drawInteriorEdges, | drawInteriorEdges, | ||||
| useSubsurfUv, dm); | useSubsurfUv, dm); | ||||
| } | } | ||||
| else if (flags & SUBSURF_USE_RENDER_PARAMS) { | else if (flags & SUBSURF_USE_RENDER_PARAMS) { | ||||
| /* Do not use cache in render mode. */ | /* Do not use cache in render mode. */ | ||||
| CCGSubSurf *ss; | CCGSubSurf *ss; | ||||
| int levels = (smd->modifier.scene) ? get_render_subsurf_level(&smd->modifier.scene->r, smd->renderLevels) : smd->renderLevels; | int levels = (smd->modifier.scene) ? get_render_subsurf_level(&smd->modifier.scene->r, smd->renderLevels, true) : smd->renderLevels; | ||||
| if (levels == 0) | if (levels == 0) | ||||
| return dm; | return dm; | ||||
| ss = _getSubSurf(NULL, levels, 3, useSimple | CCG_USE_ARENA | CCG_CALC_NORMALS); | ss = _getSubSurf(NULL, levels, 3, useSimple | CCG_USE_ARENA | CCG_CALC_NORMALS); | ||||
| ss_sync_from_derivedmesh(ss, dm, vertCos, useSimple); | ss_sync_from_derivedmesh(ss, dm, vertCos, useSimple); | ||||
| result = getCCGDerivedMesh(ss, | result = getCCGDerivedMesh(ss, | ||||
| drawInteriorEdges, useSubsurfUv, dm); | drawInteriorEdges, useSubsurfUv, dm); | ||||
| result->freeSS = 1; | result->freeSS = 1; | ||||
| } | } | ||||
| else { | else { | ||||
| int useIncremental = (smd->flags & eSubsurfModifierFlag_Incremental); | int useIncremental = (smd->flags & eSubsurfModifierFlag_Incremental); | ||||
| int levels = (smd->modifier.scene) ? get_render_subsurf_level(&smd->modifier.scene->r, smd->levels) : smd->levels; | int levels = (smd->modifier.scene) ? get_render_subsurf_level(&smd->modifier.scene->r, smd->levels, false) : smd->levels; | ||||
| CCGSubSurf *ss; | CCGSubSurf *ss; | ||||
| /* It is quite possible there is a much better place to do this. It | /* It is quite possible there is a much better place to do this. It | ||||
| * depends a bit on how rigorously we expect this function to never | * depends a bit on how rigorously we expect this function to never | ||||
| * be called in editmode. In semi-theory we could share a single | * be called in editmode. In semi-theory we could share a single | ||||
| * cache, but the handles used inside and outside editmode are not | * cache, but the handles used inside and outside editmode are not | ||||
| * the same so we would need some way of converting them. Its probably | * the same so we would need some way of converting them. Its probably | ||||
| * not worth the effort. But then why am I even writing this long | * not worth the effort. But then why am I even writing this long | ||||
| ▲ Show 20 Lines • Show All 97 Lines • Show Last 20 Lines | |||||