Revision: 18374
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18374
Author:   nicholasbishop
Date:     2009-01-06 19:59:03 +0100 (Tue, 06 Jan 2009)

Log Message:
-----------
Got rid of old multires code, brought in multires modifier from 
soc-2008-nicholasbishop branch.

Note: any old code with multires_test() or multires_level1_test() can 
just be deleted, not needed by the multires modifier.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_subsurf.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/DerivedMesh.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/customdata.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
    branches/blender2.5/blender/source/blender/editors/mesh/editface.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_customdata_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_meshdata_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_modifier_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_action.c
    
branches/blender2.5/blender/source/blender/render/intern/include/render_types.h
    
branches/blender2.5/blender/source/blender/render/intern/source/convertblender.c

Removed Paths:
-------------
    
branches/blender2.5/blender/source/blender/blenkernel/intern/multires-firstlevel.c
    branches/blender2.5/blender/source/blender/editors/include/ED_multires.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h        
2009-01-06 18:52:18 UTC (rev 18373)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h        
2009-01-06 18:59:03 UTC (rev 18374)
@@ -27,42 +27,58 @@
  * ***** END GPL LICENSE BLOCK *****
  */ 
 
-struct CustomData;
-struct EditMesh;
-struct Multires;
-struct MultiresLevel;
+struct DerivedMesh;
 struct Mesh;
+struct MFace;
+struct MultiresModifierData;
 struct Object;
 
-/* Level access */
-struct MultiresLevel *current_level(struct Multires *mr);
-struct MultiresLevel *multires_level_n(struct Multires *mr, int n);
+typedef struct MultiresSubsurf {
+       struct MultiresModifierData *mmd;
+       struct Mesh *me;
+} MultiresSubsurf;
 
-/* Level control */
-void multires_add_level(struct Object *ob, struct Mesh *me, const char 
subdiv_type);
-void multires_set_level(struct Object *ob, struct Mesh *me, const int render);
-void multires_free_level(struct MultiresLevel *lvl);
+typedef struct IndexNode {
+       struct IndexNode *next, *prev;
+       int index;
+} IndexNode;
 
-void multires_edge_level_update(struct Object *ob, struct Mesh *me);
+void create_vert_face_map(ListBase **map, IndexNode **mem, const struct MFace 
*mface,
+                         const int totvert, const int totface);
+void create_vert_edge_map(ListBase **map, IndexNode **mem, const struct MEdge 
*medge,
+                         const int totvert, const int totedge);
 
-void multires_free(struct Multires *mr);
-struct Multires *multires_copy(struct Multires *orig);
-void multires_create(struct Object *ob, struct Mesh *me);
+/* MultiresDM */
+struct Mesh *MultiresDM_get_mesh(struct DerivedMesh *dm);
+struct DerivedMesh *MultiresDM_new(struct MultiresSubsurf *, struct 
DerivedMesh*, int, int, int);
+void *MultiresDM_get_vertnorm(struct DerivedMesh *);
+void *MultiresDM_get_orco(struct DerivedMesh *);
+struct MVert *MultiresDM_get_subco(struct DerivedMesh *);
+struct ListBase *MultiresDM_get_vert_face_map(struct DerivedMesh *);
+struct ListBase *MultiresDM_get_vert_edge_map(struct DerivedMesh *);
+int *MultiresDM_get_face_offsets(struct DerivedMesh *);
+int MultiresDM_get_totlvl(struct DerivedMesh *);
+int MultiresDM_get_lvl(struct DerivedMesh *);
+void MultiresDM_set_update(struct DerivedMesh *, void (*)(struct 
DerivedMesh*));
+int *MultiresDM_get_flags(struct DerivedMesh *);
 
-/* CustomData */
-void multires_delete_layer(struct Object *ob, struct CustomData *cd, const int 
type, int n);
-void multires_add_layer(struct Object *ob, struct CustomData *cd, const int 
type, const int n);
-void multires_del_lower_customdata(struct Multires *mr, struct MultiresLevel 
*cr_lvl);
-void multires_to_mcol(struct MultiresColFace *f, MCol mcol[4]);
-/* After adding or removing vcolor layers, run this */
-void multires_load_cols(struct Mesh *me);
+#define MULTIRES_DM_UPDATE_BLOCK 1
+#define MULTIRES_DM_UPDATE_ALWAYS 2
 
-/* Private (used in multires-firstlevel.c) */
-void multires_level_to_mesh(struct Object *ob, struct Mesh *me, const int 
render);
-void multires_update_levels(struct Mesh *me, const int render);
-void multires_update_first_level(struct Mesh *me, struct EditMesh *em);
-void multires_update_customdata(struct MultiresLevel *lvl1, struct EditMesh 
*em, struct CustomData *src,
-                               struct CustomData *dst, const int type);
-void multires_customdata_to_mesh(struct Mesh *me, struct EditMesh *em,
-                                struct MultiresLevel *lvl, struct CustomData 
*src,
-                                 struct CustomData *dst, const int type);
+void multires_force_update(struct Object *ob);
+
+struct DerivedMesh *multires_dm_create_from_derived(struct 
MultiresModifierData*, struct DerivedMesh*,
+                                                   struct Mesh *, int, int);
+
+int multiresModifier_switch_level(struct Object *, const int);
+void multiresModifier_join(struct Object *);
+void multiresModifier_del_levels(struct MultiresModifierData *, struct Object 
*, int direction);
+void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct 
Object *ob, int distance,
+                               int updateblock, int simple);
+void multiresModifier_setLevel(void *mmd_v, void *ob_v);
+int multiresModifier_reshape(struct MultiresModifierData *mmd, struct Object 
*dst, struct Object *src);
+
+/* Related to the old multires */
+struct Multires;
+void multires_load_old(struct DerivedMesh *, struct Multires *);
+void multires_free(struct Multires*);

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h  
2009-01-06 18:52:18 UTC (rev 18373)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h  
2009-01-06 18:59:03 UTC (rev 18374)
@@ -30,6 +30,8 @@
 #ifndef BKE_SCULPT_H
 #define BKE_SCULPT_H
 
+struct MFace;
+struct MVert;
 struct NumInput;
 struct RadialControl;
 struct Scene;
@@ -40,6 +42,13 @@
        struct ProjVert *projverts;
 
        struct bglMats *mats;
+
+       int multires;
+       int totvert;
+       int totface;
+       struct MVert *mvert;
+       struct MFace *mface;
+       float *face_normals;
        
        /* An array of lists; array is sized as
           large as the number of verts in the mesh,

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_subsurf.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_subsurf.h 
2009-01-06 18:52:18 UTC (rev 18373)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_subsurf.h 
2009-01-06 18:59:03 UTC (rev 18374)
@@ -32,6 +32,7 @@
 struct Object;
 struct DerivedMesh;
 struct EditMesh;
+struct MultiresSubsurf;
 struct SubsurfModifierData;
 
 struct DerivedMesh *subsurf_make_derived_from_derived(
@@ -40,6 +41,13 @@
                         int useRenderParams, float (*vertCos)[3],
                         int isFinalCalc, int editMode);
 
+struct DerivedMesh *subsurf_make_derived_from_derived_with_multires(
+                        struct DerivedMesh *dm,
+                        struct SubsurfModifierData *smd,
+                       struct MultiresSubsurf *ms,
+                        int useRenderParams, float (*vertCos)[3],
+                        int isFinalCalc, int editMode);
+
 void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3]);
 
 #endif

Modified: 
branches/blender2.5/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/DerivedMesh.c  
2009-01-06 18:52:18 UTC (rev 18373)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/DerivedMesh.c  
2009-01-06 18:59:03 UTC (rev 18374)
@@ -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"
@@ -83,8 +82,6 @@
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
 
-//XXX #include "multires.h"
-//
 #include "GPU_draw.h"
 #include "GPU_extensions.h"
 #include "GPU_material.h"
@@ -1448,6 +1445,9 @@
        if(G.f & G_VERTEXPAINT || G.f & G_WEIGHTPAINT)
                mask |= CD_MASK_MCOL;
 
+       if(G.f & G_SCULPTMODE)
+               mask |= CD_MASK_MDISPS;
+
        return mask;
 #endif
        return 0;
@@ -2210,93 +2210,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*/
-               //XXX multires_update_levels(me, 1);
-       
-               /* Copy the highest level of multires verts */
-               *orig_lvl= me->mr->current;
-               //XXX 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;
-               //XXX 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) {
-                       //XXX 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;
-                       //XXX 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, NULL, *dm, NULL);
-
-                       /* Restore the original verts */
-                       me->mr->newlvl= BLI_countlist(&me->mr->levels);
-                       //XXX multires_set_level(ob, me, 1);
-                       //XXX for(i=0; i<lvl->totvert; ++i)
-                       //XXX   VecCopyf(me->mvert[i].co, &vert_copy[i*3]);
-               }
-               
-               if(vert_copy)
-                       MEM_freeN(vert_copy);
-                       
-               me->mr->newlvl= orig_lvl;
-               //XXX 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(Scene *scene, 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(scene, ob, NULL, NULL, &final, 1, 1, 0, dataMask, 
-1);
-       multires_render_final(ob, me, &final, vert_copy, orig_lvl, dataMask);
 
        return final;
 }
@@ -2304,13 +2222,8 @@
 DerivedMesh *mesh_create_derived_index_render(Scene *scene, Object *ob, 
CustomDataMask dataMask, int index)
 {

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to