diff options
author | Daniel Dunbar <daniel@zuster.org> | 2005-03-30 12:12:27 +0400 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2005-03-30 12:12:27 +0400 |
commit | fef6e0012e8057e4864391c73b190c3bc6972c5d (patch) | |
tree | 139ae4a53767770dfc51fcee9d298f1bdb4541ba /source/blender/blenkernel/intern/subsurf.c | |
parent | e5d14112837634fa2456e83ba6d6738f77aa08f5 (diff) |
- initial commit of a real (as in not just copying the DispListMesh)
DerivedMesh implementation of CCGSubSurf. Only used in editmode at
the moment, and does not draw smooth normals correctly.
- Just in its own this brings a rather large speedup for editing
subsurfs.
Diffstat (limited to 'source/blender/blenkernel/intern/subsurf.c')
-rw-r--r-- | source/blender/blenkernel/intern/subsurf.c | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/source/blender/blenkernel/intern/subsurf.c b/source/blender/blenkernel/intern/subsurf.c index 2c68ef16858..a2c2a9a637d 100644 --- a/source/blender/blenkernel/intern/subsurf.c +++ b/source/blender/blenkernel/intern/subsurf.c @@ -1089,42 +1089,34 @@ static DispListMesh *subsurf_subdivide_to_displistmesh(HyperMesh *hme, short sub return dlm; } -static DispListMesh *subsurf_make_dispListMesh_from_editmesh(EditMesh *em, int subdivLevels, short type) { +DerivedMesh *subsurf_make_derived_from_editmesh(EditMesh *em, int subdivLevels, short type) { if (subdivLevels<1) { - return displistmesh_from_editmesh(em); + return derivedmesh_from_displistmesh(em, displistmesh_from_editmesh(em)); #ifdef USE_CCGSUBSURFLIB } else if (type==ME_CCG_SUBSURF) { - return subsurf_ccg_make_dispListMesh_from_editmesh(em, subdivLevels); + return subsurf_ccg_make_derived_from_editmesh(em, subdivLevels); #endif } else { HyperMesh *hme= hypermesh_from_editmesh(em, subdivLevels); - return subsurf_subdivide_to_displistmesh(hme, subdivLevels, type); + return derivedmesh_from_displistmesh(em, subsurf_subdivide_to_displistmesh(hme, subdivLevels, type)); } } -DerivedMesh *subsurf_make_derived_from_editmesh(EditMesh *em, int subdivLevels, short type) { - return derivedmesh_from_displistmesh(em, subsurf_make_dispListMesh_from_editmesh(em, subdivLevels, type)); -} - -static DispListMesh *subsurf_make_dispListMesh_from_mesh(Mesh *me, int subdivLevels) { +DerivedMesh *subsurf_make_derived_from_mesh(Mesh *me, int subdivLevels) { if (subdivLevels<1) { - return displistmesh_from_mesh(me, NULL); + return derivedmesh_from_displistmesh(NULL, displistmesh_from_mesh(me, NULL)); #ifdef USE_CCGSUBSURFLIB } else if (me->subsurftype==ME_CCG_SUBSURF) { - return subsurf_ccg_make_dispListMesh_from_mesh(me, subdivLevels); + return subsurf_ccg_make_derived_from_mesh(me, subdivLevels); #endif } else { HyperMesh *hme= hypermesh_from_mesh(me, subdivLevels); - return subsurf_subdivide_to_displistmesh(hme, subdivLevels, me->subsurftype); + return derivedmesh_from_displistmesh(NULL, subsurf_subdivide_to_displistmesh(hme, subdivLevels, me->subsurftype)); } } -DerivedMesh *subsurf_make_derived_from_mesh(Mesh *me, int subdivLevels) { - return derivedmesh_from_displistmesh(NULL, subsurf_make_dispListMesh_from_mesh(me, subdivLevels)); -} - // editarmature.c void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3]) { |