Revision: 42826
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42826
Author:   mont29
Date:     2011-12-22 16:37:14 +0000 (Thu, 22 Dec 2011)
Log Message:
-----------
On second thought, also enable weight preview in object mode, like for 
DynamicPaint. This commit also generalizes/factorizes the way that feature 
(CD_WEIGHT_MCOL preview in object mode) is handled:
* Adding in BKE_modifier.h "int modifiers_isWMColPreview(struct Object *ob);", 
which checks whether there is a modifier in the object's stack that needs 
WEIGHT_MCOL preview. This higly simplifies the code in draw_mesh_fancy() 
(drawobject.c).
* Adding in BKE_modifier.h "int modifier_usesWMColPreview(struct ModifierData 
*md);", which checks whether that modifier needs WEIGHT_MCOL preview. Used 
among other places in mesh_calc_modifiers() (DerivedMesh.c) to make sure 
preview mask remains for following modifiers.
* Adding the new flag "eModifierTypeFlag_UsesWMColPreview" for those modifiers, 
used by above functions to make a first, quick check.

Modified Paths:
--------------
    branches/vgroup_modifiers/source/blender/blenkernel/BKE_modifier.h
    branches/vgroup_modifiers/source/blender/blenkernel/intern/DerivedMesh.c
    branches/vgroup_modifiers/source/blender/blenkernel/intern/modifier.c
    branches/vgroup_modifiers/source/blender/editors/space_view3d/drawobject.c
    branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_dynamicpaint.c
    
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvg_util.c
    branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgedit.c
    branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgmix.c
    
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgproximity.c

Modified: branches/vgroup_modifiers/source/blender/blenkernel/BKE_modifier.h
===================================================================
--- branches/vgroup_modifiers/source/blender/blenkernel/BKE_modifier.h  
2011-12-22 16:00:34 UTC (rev 42825)
+++ branches/vgroup_modifiers/source/blender/blenkernel/BKE_modifier.h  
2011-12-22 16:37:14 UTC (rev 42826)
@@ -99,7 +99,10 @@
        eModifierTypeFlag_Single = (1<<7),
 
        /* Some modifier can't be added manually by user */
-       eModifierTypeFlag_NoUserAdd = (1<<8)
+       eModifierTypeFlag_NoUserAdd = (1<<8),
+
+       /* For modifiers that use CD_WEIGHT_MCOL for preview. */
+       eModifierTypeFlag_UsesWMColPreview = (1<<9)
 } ModifierTypeFlag;
 
 typedef void (*ObjectWalkFunc)(void *userData, struct Object *ob, struct 
Object **obpoin);
@@ -308,14 +311,14 @@
 struct ModifierData  *modifier_new(int type);
 void          modifier_free(struct ModifierData *md);
 
-void             modifier_unique_name(struct ListBase *modifiers, struct 
ModifierData *md);
+void          modifier_unique_name(struct ListBase *modifiers, struct 
ModifierData *md);
 
 void          modifier_copyData(struct ModifierData *md, struct ModifierData 
*target);
 int           modifier_dependsOnTime(struct ModifierData *md);
 int           modifier_supportsMapping(struct ModifierData *md);
 int           modifier_couldBeCage(struct Scene *scene, struct ModifierData 
*md);
 int           modifier_isCorrectableDeformed(struct ModifierData *md);
-int                      modifier_sameTopology(ModifierData *md);
+int           modifier_sameTopology(ModifierData *md);
 int           modifier_nonGeometrical(ModifierData *md);
 int           modifier_isEnabled(struct Scene *scene, struct ModifierData *md, 
int required_mode);
 void          modifier_setError(struct ModifierData *md, const char *format, 
...)
@@ -323,6 +326,7 @@
 __attribute__ ((format (printf, 2, 3)))
 #endif
 ;
+int           modifier_usesWMColPreview(struct ModifierData *md);
 
 void          modifiers_foreachObjectLink(struct Object *ob,
                                                                                
  ObjectWalkFunc walk,
@@ -349,6 +353,7 @@
 int           modifiers_usesArmature(struct Object *ob, struct bArmature *arm);
 int           modifiers_isCorrectableDeformed(struct Object *ob);
 void          modifier_freeTemporaryData(struct ModifierData *md);
+int           modifiers_isWMColPreview(struct Object *ob);
 
 int           modifiers_indexInObject(struct Object *ob, struct ModifierData 
*md);
 

Modified: 
branches/vgroup_modifiers/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/vgroup_modifiers/source/blender/blenkernel/intern/DerivedMesh.c    
2011-12-22 16:00:34 UTC (rev 42825)
+++ branches/vgroup_modifiers/source/blender/blenkernel/intern/DerivedMesh.c    
2011-12-22 16:37:14 UTC (rev 42826)
@@ -1070,8 +1070,9 @@
                                }
                        }
 
-                       /* in case of dynamic paint, make sure preview mask 
remains for following modifiers */
-                       if (md->type == eModifierType_DynamicPaint)
+                       /* In case of dynamic paint or WeightVG with enabled 
preview, make sure
+                        * preview mask remains for following modifiers. */
+                       if (modifier_usesWMColPreview(md))
                                append_mask |= CD_MASK_WEIGHT_MCOL;
                }
 

Modified: branches/vgroup_modifiers/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/vgroup_modifiers/source/blender/blenkernel/intern/modifier.c       
2011-12-22 16:00:34 UTC (rev 42825)
+++ branches/vgroup_modifiers/source/blender/blenkernel/intern/modifier.c       
2011-12-22 16:37:14 UTC (rev 42826)
@@ -48,6 +48,7 @@
 #include "DNA_armature_types.h"
 #include "DNA_object_types.h"
 #include "DNA_meshdata_types.h"
+#include "DNA_dynamicpaint_types.h"
 
 #include "BLI_utildefines.h"
 #include "BLI_path_util.h"
@@ -142,6 +143,42 @@
                        (mti->flags & eModifierTypeFlag_SupportsMapping));
 }
 
+int modifier_usesWMColPreview(ModifierData *md)
+{
+       ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+
+       if (!(mti->flags & eModifierTypeFlag_UsesWMColPreview))
+               return FALSE;
+
+       if (md->type == eModifierType_DynamicPaint) {
+               DynamicPaintModifierData *pmd = (DynamicPaintModifierData*) md;
+               /* if canvas is ready to preview vertex colors */
+               if (pmd->canvas && pmd->canvas->flags & 
MOD_DPAINT_PREVIEW_READY)
+                       return TRUE;
+       }
+       else if (md->type == eModifierType_WeightVGEdit) {
+               WeightVGEditModifierData *wmd = (WeightVGEditModifierData*) md;
+               /* If preview of vertex weights is enabled... */
+               if (wmd->common_flags & MOD_WVG_CFLAG_WEIGHT_PREVIEW)
+                       return TRUE;
+       }
+       else if (md->type == eModifierType_WeightVGMix) {
+               WeightVGMixModifierData *wmd = (WeightVGMixModifierData*) md;
+               printf("A mix modifier…\n");
+               /* If preview of vertex weights is enabled... */
+               if (wmd->common_flags & MOD_WVG_CFLAG_WEIGHT_PREVIEW)
+                       return TRUE;
+       }
+       else if (md->type == eModifierType_WeightVGProximity) {
+               WeightVGProximityModifierData *wmd = 
(WeightVGProximityModifierData*) md;
+               /* If preview of vertex weights is enabled... */
+               if (wmd->common_flags & MOD_WVG_CFLAG_WEIGHT_PREVIEW)
+                       return TRUE;
+       }
+
+       return FALSE;
+}
+
 ModifierData *modifiers_findByType(Object *ob, ModifierType type)
 {
        ModifierData *md = ob->modifiers.first;
@@ -545,6 +582,20 @@
        return 0;
 }
 
+/* Check whether the given object has a modifier in its stack that uses 
WEIGHT_MCOL CD layer
+ * to preview something... Used by DynamicPaint and WeightVG currently. */
+int modifiers_isWMColPreview(Object *ob)
+{
+       ModifierData *md = ob->modifiers.first;
+
+       for (; md; md = md->next) {
+               if (md->mode & eModifierMode_Realtime && 
modifier_usesWMColPreview(md))
+                       return TRUE;
+       }
+
+       return FALSE;
+}
+
 int modifiers_indexInObject(Object *ob, ModifierData *md_seek)
 {
        int i= 0;

Modified: 
branches/vgroup_modifiers/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/vgroup_modifiers/source/blender/editors/space_view3d/drawobject.c  
2011-12-22 16:00:34 UTC (rev 42825)
+++ branches/vgroup_modifiers/source/blender/editors/space_view3d/drawobject.c  
2011-12-22 16:37:14 UTC (rev 42826)
@@ -36,7 +36,6 @@
 #include "DNA_camera_types.h"
 #include "DNA_curve_types.h"
 #include "DNA_constraint_types.h" // for drawing constraint
-#include "DNA_dynamicpaint_types.h"
 #include "DNA_lamp_types.h"
 #include "DNA_lattice_types.h"
 #include "DNA_material_types.h"
@@ -3039,27 +3038,16 @@
        eWireDrawMode draw_wire= OBDRAW_WIRE_OFF;
        int /* totvert,*/ totedge, totface;
        DerivedMesh *dm= mesh_get_derived_final(scene, ob, 
scene->customdata_mask);
-       ModifierData *md = NULL;
        const short is_obact= (ob == OBACT);
        int draw_flags = (is_obact && paint_facesel_test(ob)) ? 
DRAW_FACE_SELECT : 0;
 
        if(!dm)
                return;
 
-       /* check to draw dynamic paint colors */
-       if ((md = modifiers_findByType(ob, eModifierType_DynamicPaint)))
-       {
-               /* check if target has an active dpaint modifier        */
-               if(md && (md->mode & eModifierMode_Realtime))                   
                
-               {
-                       DynamicPaintModifierData *pmd = 
(DynamicPaintModifierData *)md;
-                       /* if canvas is ready to preview vertex colors */
-                       if (pmd->canvas && pmd->canvas->flags & 
MOD_DPAINT_PREVIEW_READY &&
-                               DM_get_face_data_layer(dm, CD_WEIGHT_MCOL)) {
-                               draw_flags |= DRAW_DYNAMIC_PAINT_PREVIEW;
-                       }
-               }
-       }
+       /* Check to draw dynamic paint colors (or weights from WeightVG 
modifiers).
+        * Note: Last "preview-active" modifier in stack will win! */
+       if(DM_get_face_data_layer(dm, CD_WEIGHT_MCOL) && 
modifiers_isWMColPreview(ob))
+               draw_flags |= DRAW_DYNAMIC_PAINT_PREVIEW;
 
        /* Unwanted combination */
        if (draw_flags & DRAW_FACE_SELECT) {

Modified: 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_dynamicpaint.c
===================================================================
--- 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_dynamicpaint.c    
    2011-12-22 16:00:34 UTC (rev 42825)
+++ 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_dynamicpaint.c    
    2011-12-22 16:37:14 UTC (rev 42826)
@@ -157,8 +157,9 @@
        /* structSize */        sizeof(DynamicPaintModifierData),
        /* type */              eModifierTypeType_Constructive,
        /* flags */             eModifierTypeFlag_AcceptsMesh
-                                                       | 
eModifierTypeFlag_UsesPointCache
-                                                       | 
eModifierTypeFlag_Single,
+                               |eModifierTypeFlag_UsesPointCache
+                               |eModifierTypeFlag_Single
+                               |eModifierTypeFlag_UsesWMColPreview,
 
        /* copyData */          copyData,
        /* deformVerts */       NULL,

Modified: 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvg_util.c
===================================================================
--- 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvg_util.c   
    2011-12-22 16:00:34 UTC (rev 42825)
+++ 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvg_util.c   
    2011-12-22 16:37:14 UTC (rev 42826)
@@ -290,7 +290,7 @@
                        float temp_color[3];
                        int j = mface[i].v4 ? 4 : 3;
                        while(j--) {
-                               int idx = (j==0)?mface[i].v1: 
(j==1)?mface[i].v2: (j==2)?mface[i].v3: mface[i].v4;
+                               int idx = *((&mface[i].v1)+j);
 
                                CLAMP(w[idx], 0.0f, 1.0f);
                                weight_to_rgb(temp_color, w[idx]);
@@ -300,7 +300,6 @@
                                col[i*4+j].a = 255;
                        }
                }
-//             pmd->canvas->flags |= MOD_DPAINT_PREVIEW_READY;
 
                if(indices)
                        MEM_freeN(w);

Modified: 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgedit.c
===================================================================
--- 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgedit.c    
    2011-12-22 16:00:34 UTC (rev 42825)
+++ 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgedit.c    
    2011-12-22 16:37:14 UTC (rev 42826)
@@ -266,7 +266,8 @@
        /* type */              eModifierTypeType_NonGeometrical,
        /* flags */             eModifierTypeFlag_AcceptsMesh
                               |eModifierTypeFlag_SupportsMapping
-                              |eModifierTypeFlag_SupportsEditmode,
+                              |eModifierTypeFlag_SupportsEditmode
+                              |eModifierTypeFlag_UsesWMColPreview,
 
        /* copyData */          copyData,
        /* deformVerts */       NULL,

Modified: 
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgmix.c
===================================================================
--- branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgmix.c 
2011-12-22 16:00:34 UTC (rev 42825)

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to