[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18374] branches/blender2.5/blender/source /blender: Got rid of old multires code, brought in multires modifier from
Nicholas Bishop
nicholasbishop at gmail.com
Tue Jan 6 19:59:04 CET 2009
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. @@
More information about the Bf-blender-cvs
mailing list