Revision: 15699
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15699
Author:   nicholasbishop
Date:     2008-07-22 19:54:21 +0200 (Tue, 22 Jul 2008)

Log Message:
-----------
Fixed rendering multires meshes. Also removed some more old multires code 
formerly used in rendering.

Modified Paths:
--------------
    
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/DerivedMesh.c
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c

Modified: 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/DerivedMesh.c 
    2008-07-22 17:49:15 UTC (rev 15698)
+++ 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/DerivedMesh.c 
    2008-07-22 17:54:21 UTC (rev 15699)
@@ -71,7 +71,6 @@
 #include "BKE_material.h"
 #include "BKE_modifier.h"
 #include "BKE_mesh.h"
-#include "BKE_multires.h"
 #include "BKE_object.h"
 #include "BKE_subsurf.h"
 #include "BKE_texture.h"
@@ -2575,93 +2574,11 @@
        return ob->derivedDeform;
 }
 
-/* Move to multires Pin level, returns a copy of the original vertex coords. */
-float *multires_render_pin(Object *ob, Mesh *me, int *orig_lvl)
-{
-       float *vert_copy= NULL;
-
-       if(me->mr && !(me->mr->flag & MULTIRES_NO_RENDER)) {
-               MultiresLevel *lvl= NULL;
-               int i;
-               
-               /* Make sure all mesh edits are properly stored in the multires 
data*/
-               multires_update_levels(me, 1);
-       
-               /* Copy the highest level of multires verts */
-               *orig_lvl= me->mr->current;
-               lvl= multires_level_n(me->mr, BLI_countlist(&me->mr->levels));
-               vert_copy= MEM_callocN(sizeof(float)*3*lvl->totvert, "multires 
vert_copy");
-               for(i=0; i<lvl->totvert; ++i)
-                       VecCopyf(&vert_copy[i*3], me->mr->verts[i].co);
-       
-               /* Goto the pin level for multires */
-               me->mr->newlvl= me->mr->pinlvl;
-               multires_set_level(ob, me, 1);
-       }
-       
-       return vert_copy;
-}
-
-/* Propagate the changes to render level - fails if mesh topology changed */
-void multires_render_final(Object *ob, Mesh *me, DerivedMesh **dm, float 
*vert_copy,
-                          const int orig_lvl, CustomDataMask dataMask)
-{
-       if(me->mr && !(me->mr->flag & MULTIRES_NO_RENDER)) {
-               if((*dm)->getNumVerts(*dm) == me->totvert &&
-                  (*dm)->getNumFaces(*dm) == me->totface) {
-                       MultiresLevel *lvl= multires_level_n(me->mr, 
BLI_countlist(&me->mr->levels));
-                       DerivedMesh *old= NULL;
-                       MVert *vertdup= NULL;
-                       int i;
-
-                       /* Copy the verts into the mesh */
-                       vertdup= (*dm)->dupVertArray(*dm);
-                       (*dm)->release(*dm);
-                       for(i=0; i<me->totvert; ++i)
-                               me->mvert[i]= vertdup[i];
-                       /* Free vertdup after use*/
-                       MEM_freeN(vertdup);
-                       /* Go to the render level */
-                       me->mr->newlvl= me->mr->renderlvl;
-                       multires_set_level(ob, me, 1);
-                       (*dm)= getMeshDerivedMesh(me, ob, NULL);
-
-                       /* Some of the data in dm is referenced externally, so 
make a copy */
-                       old= *dm;
-                       (*dm)= CDDM_copy(old);
-                       old->release(old);
-
-                       if(dataMask & CD_MASK_ORCO)
-                               add_orco_dm(ob, *dm, NULL);
-
-                       /* Restore the original verts */
-                       me->mr->newlvl= BLI_countlist(&me->mr->levels);
-                       multires_set_level(ob, me, 1);
-                       for(i=0; i<lvl->totvert; ++i)
-                               VecCopyf(me->mvert[i].co, &vert_copy[i*3]);
-               }
-               
-               if(vert_copy)
-                       MEM_freeN(vert_copy);
-                       
-               me->mr->newlvl= orig_lvl;
-               multires_set_level(ob, me, 1);
-       }
-}
-
-/* Multires note - if mesh has multires enabled, mesh is first set to the Pin 
level,
-   where all modifiers are applied, then if the topology hasn't changed, the 
changes
-   from modifiers are propagated up to the Render level. */
 DerivedMesh *mesh_create_derived_render(Object *ob, CustomDataMask dataMask)
 {
        DerivedMesh *final;
-       Mesh *me= get_mesh(ob);
-       float *vert_copy= NULL;
-       int orig_lvl= 0;
        
-       vert_copy= multires_render_pin(ob, me, &orig_lvl);
        mesh_calc_modifiers(ob, NULL, NULL, &final, 1, 1, 0, dataMask);
-       multires_render_final(ob, me, &final, vert_copy, orig_lvl, dataMask);
 
        return final;
 }
@@ -2690,13 +2607,8 @@
                                                   CustomDataMask dataMask)
 {
        DerivedMesh *final;
-       Mesh *me= get_mesh(ob);
-       float *vert_copy= NULL;
-       int orig_lvl= 0;
 
-       vert_copy= multires_render_pin(ob, me, &orig_lvl);
        mesh_calc_modifiers(ob, vertCos, NULL, &final, 1, 0, 0, dataMask);
-       multires_render_final(ob, me, &final, vert_copy, orig_lvl, dataMask);
 
        return final;
 }

Modified: 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c    
    2008-07-22 17:49:15 UTC (rev 15698)
+++ 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c    
    2008-07-22 17:54:21 UTC (rev 15699)
@@ -1537,7 +1537,7 @@
        DerivedMesh *result;
 
        memset(&smd, 0, sizeof(SubsurfModifierData));
-       smd.levels = mmd->lvl - 1;
+       smd.levels = smd.renderLevels = mmd->lvl - 1;
 
        result = subsurf_make_derived_from_derived_with_multires(dm, &smd, mmd, 
useRenderParams, NULL, isFinalCalc, 0);
        MultiresDM_set_update(result, multiresModifier_update);


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to