[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51510] trunk/blender: Fix #32522: Object' s diffuse color not showing in Sculpt Mode

Sergey Sharybin sergey.vfx at gmail.com
Mon Oct 22 19:33:53 CEST 2012


Revision: 51510
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51510
Author:   nazgul
Date:     2012-10-22 17:33:53 +0000 (Mon, 22 Oct 2012)
Log Message:
-----------
Fix #32522: Object's diffuse color not showing in Sculpt Mode

Added option to display object's diffuse color multiplied by sculpting
mask. This option could be found in Options panel of toolshelf when in
sculpting mode.

Thanks to Nicholas and Brecht for reviewing the patch!

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
    trunk/blender/release/scripts/startup/bl_ui/space_view3d_toolbar.py
    trunk/blender/source/blender/blenkernel/BKE_paint.h
    trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    trunk/blender/source/blender/blenlib/BLI_pbvh.h
    trunk/blender/source/blender/blenlib/intern/pbvh.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
    trunk/blender/source/blender/gpu/GPU_buffers.h
    trunk/blender/source/blender/gpu/GPU_draw.h
    trunk/blender/source/blender/gpu/intern/gpu_buffers.c
    trunk/blender/source/blender/gpu/intern/gpu_draw.c
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesrna/intern/rna_material.c
    trunk/blender/source/blender/makesrna/intern/rna_sculpt_paint.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_view3d.py	2012-10-22 17:33:11 UTC (rev 51509)
+++ trunk/blender/release/scripts/startup/bl_ui/space_view3d.py	2012-10-22 17:33:53 UTC (rev 51510)
@@ -1285,6 +1285,7 @@
         layout.prop(sculpt, "show_low_resolution")
         layout.prop(sculpt, "show_brush")
         layout.prop(sculpt, "use_deform_only")
+        layout.prop(sculpt, "show_diffuse_color")
 
 
 class VIEW3D_MT_hide_mask(Menu):

Modified: trunk/blender/release/scripts/startup/bl_ui/space_view3d_toolbar.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_view3d_toolbar.py	2012-10-22 17:33:11 UTC (rev 51509)
+++ trunk/blender/release/scripts/startup/bl_ui/space_view3d_toolbar.py	2012-10-22 17:33:53 UTC (rev 51510)
@@ -878,6 +878,7 @@
         layout.prop(sculpt, "show_low_resolution")
         layout.prop(sculpt, "show_brush")
         layout.prop(sculpt, "use_deform_only")
+        layout.prop(sculpt, "show_diffuse_color")
 
         layout.prop(sculpt, "input_samples")
 

Modified: trunk/blender/source/blender/blenkernel/BKE_paint.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_paint.h	2012-10-22 17:33:11 UTC (rev 51509)
+++ trunk/blender/source/blender/blenkernel/BKE_paint.h	2012-10-22 17:33:53 UTC (rev 51510)
@@ -94,6 +94,7 @@
 
 	/* PBVH acceleration structure */
 	struct PBVH *pbvh;
+	int show_diffuse_color;
 
 	/* Paiting on deformed mesh */
 	int modifiers_active; /* object is deformed with some modifiers */

Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-10-22 17:33:11 UTC (rev 51509)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-10-22 17:33:53 UTC (rev 51510)
@@ -273,6 +273,8 @@
 		cddm->pbvh = BLI_pbvh_new();
 		cddm->pbvh_draw = can_pbvh_draw(ob, dm);
 
+		pbvh_show_diffuse_color_set(cddm->pbvh, ob->sculpt->show_diffuse_color);
+
 		BKE_mesh_tessface_ensure(me);
 		
 		BLI_pbvh_build_mesh(cddm->pbvh, me->mface, me->mvert,

Modified: trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2012-10-22 17:33:11 UTC (rev 51509)
+++ trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2012-10-22 17:33:53 UTC (rev 51510)
@@ -3020,6 +3020,9 @@
 		                    me->totface, me->totvert, &me->vdata);
 	}
 
+	if (ccgdm->pbvh)
+		pbvh_show_diffuse_color_set(ccgdm->pbvh, ob->sculpt->show_diffuse_color);
+
 	return ccgdm->pbvh;
 }
 

Modified: trunk/blender/source/blender/blenlib/BLI_pbvh.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_pbvh.h	2012-10-22 17:33:11 UTC (rev 51509)
+++ trunk/blender/source/blender/blenlib/BLI_pbvh.h	2012-10-22 17:33:53 UTC (rev 51510)
@@ -263,5 +263,7 @@
 //void BLI_pbvh_node_BB_reset(PBVHNode *node);
 //void BLI_pbvh_node_BB_expand(PBVHNode *node, float co[3]);
 
+void pbvh_show_diffuse_color_set(PBVH *bvh, int show_diffuse_color);
+
 #endif /* __BLI_PBVH_H__ */
 

Modified: trunk/blender/source/blender/blenlib/intern/pbvh.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/pbvh.c	2012-10-22 17:33:11 UTC (rev 51509)
+++ trunk/blender/source/blender/blenlib/intern/pbvh.c	2012-10-22 17:33:53 UTC (rev 51510)
@@ -157,6 +157,8 @@
 
 	/* flag are verts/faces deformed */
 	int deformed;
+
+	int show_diffuse_color;
 };
 
 #define STACK_FIXED_DEPTH   100
@@ -1001,7 +1003,7 @@
 
 	if (node->flag & PBVH_Leaf)
 		return (node->flag & flag);
-	
+
 	return 1;
 }
 
@@ -1165,7 +1167,8 @@
 					                        bvh->grid_flag_mats,
 					                        node->prim_indices,
 					                        node->totprim,
-					                        &bvh->gridkey);
+					                        &bvh->gridkey,
+					                        bvh->show_diffuse_color);
 					break;
 				case PBVH_FACES:
 					GPU_update_mesh_buffers(node->draw_buffers,
@@ -1174,7 +1177,9 @@
 					                        node->uniq_verts +
 					                        node->face_verts,
 					                        CustomData_get_layer(bvh->vdata,
-					                                             CD_PAINT_MASK));
+					                                             CD_PAINT_MASK),
+					                        node->face_vert_indices,
+					                        bvh->show_diffuse_color);
 					break;
 			}
 
@@ -1667,12 +1672,24 @@
 	return test_planes_aabb(bb_min, bb_max, data) != ISECT_INSIDE;
 }
 
+static void pbvh_node_check_diffuse_changed(PBVH *bvh, PBVHNode *node)
+{
+	if (!node->draw_buffers)
+		return;
+
+	if (GPU_buffers_diffuse_changed(node->draw_buffers, bvh->show_diffuse_color))
+		node->flag |= PBVH_UpdateDrawBuffers;
+}
+
 void BLI_pbvh_draw(PBVH *bvh, float (*planes)[4], float (*face_nors)[3],
                    DMSetMaterial setMaterial)
 {
 	PBVHNode **nodes;
-	int totnode;
+	int a, totnode;
 
+	for (a = 0; a < bvh->totnode; a++)
+		pbvh_node_check_diffuse_changed(bvh, &bvh->nodes[a]);
+
 	BLI_pbvh_search_gather(bvh, update_search_cb, SET_INT_IN_POINTER(PBVH_UpdateNormals | PBVH_UpdateDrawBuffers),
 	                       &nodes, &totnode);
 
@@ -1876,3 +1893,8 @@
 	if (!vi->grids)
 		vi->vmask = CustomData_get_layer(bvh->vdata, CD_PAINT_MASK);
 }
+
+void pbvh_show_diffuse_color_set(PBVH *bvh, int show_diffuse_color)
+{
+	bvh->show_diffuse_color = show_diffuse_color;
+}

Modified: trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2012-10-22 17:33:11 UTC (rev 51509)
+++ trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2012-10-22 17:33:53 UTC (rev 51510)
@@ -3076,6 +3076,7 @@
 	MultiresModifierData *mmd = sculpt_multires_active(scene, ob);
 
 	ss->modifiers_active = sculpt_modifiers_active(scene, sd, ob);
+	ss->show_diffuse_color = sd->flags & SCULPT_SHOW_DIFFUSE;
 
 	if (need_mask) {
 		if (mmd == NULL) {
@@ -3130,6 +3131,8 @@
 	ss->pbvh = dm->getPBVH(ob, dm);
 	ss->pmap = (need_pmap && dm->getPolyMap) ? dm->getPolyMap(ob, dm) : NULL;
 
+	pbvh_show_diffuse_color_set(ss->pbvh, ss->show_diffuse_color);
+
 	if (ss->modifiers_active) {
 		if (!ss->orig_cos) {
 			int a;

Modified: trunk/blender/source/blender/gpu/GPU_buffers.h
===================================================================
--- trunk/blender/source/blender/gpu/GPU_buffers.h	2012-10-22 17:33:11 UTC (rev 51509)
+++ trunk/blender/source/blender/gpu/GPU_buffers.h	2012-10-22 17:33:53 UTC (rev 51510)
@@ -162,18 +162,22 @@
                                     struct MFace *mface, struct MVert *mvert,
                                     int *face_indices, int totface);
 
-void GPU_update_mesh_buffers(GPU_Buffers *buffers, struct MVert *mvert,
-                             int *vert_indices, int totvert, const float *vmask);
+void GPU_update_mesh_buffers(GPU_Buffers *buffers, MVert *mvert,
+                             int *vert_indices, int totvert, const float *vmask,
+                             int (*face_vert_indices)[4], int show_diffuse_color);
 
 GPU_Buffers *GPU_build_grid_buffers(int *grid_indices, int totgrid,
                                     unsigned int **grid_hidden, int gridsize);
 
 void GPU_update_grid_buffers(GPU_Buffers *buffers, struct CCGElem **grids,
                              const struct DMFlagMat *grid_flag_mats,
-                             int *grid_indices, int totgrid, const struct CCGKey *key);
+                             int *grid_indices, int totgrid, const struct CCGKey *key,
+                             int show_diffuse_color);
 
 void GPU_draw_buffers(GPU_Buffers *buffers, DMSetMaterial setMaterial);
 
+int GPU_buffers_diffuse_changed(GPU_Buffers *buffers, int show_diffuse_color);
+
 void GPU_free_buffers(GPU_Buffers *buffers);
 
 #endif

Modified: trunk/blender/source/blender/gpu/GPU_draw.h
===================================================================
--- trunk/blender/source/blender/gpu/GPU_draw.h	2012-10-22 17:33:11 UTC (rev 51509)
+++ trunk/blender/source/blender/gpu/GPU_draw.h	2012-10-22 17:33:53 UTC (rev 51510)
@@ -75,6 +75,8 @@
 int GPU_enable_material(int nr, void *attribs);
 void GPU_disable_material(void);
 
+void GPU_material_diffuse_get(int nr, float diff[4]);
+
 void GPU_set_material_alpha_blend(int alphablend);
 int GPU_get_material_alpha_blend(void);
 

Modified: trunk/blender/source/blender/gpu/intern/gpu_buffers.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_buffers.c	2012-10-22 17:33:11 UTC (rev 51509)
+++ trunk/blender/source/blender/gpu/intern/gpu_buffers.c	2012-10-22 17:33:53 UTC (rev 51510)
@@ -54,6 +54,7 @@
 #include "DNA_userdef_types.h"
 
 #include "GPU_buffers.h"
+#include "GPU_draw.h"
 
 typedef enum {
 	GPU_BUFFER_VERTEX_STATE = 1,
@@ -1316,6 +1317,9 @@
 	/* The PBVH ensures that either all faces in the node are
 	   smooth-shaded or all faces are flat-shaded */
 	int smooth;
+
+	int show_diffuse_color;
+	float diffuse_color[4];
 };
 typedef enum {
 	VBO_ENABLED,
@@ -1339,24 +1343,24 @@
 
 static float gpu_color_from_mask(float mask)
 {
-	return (1.0f - mask) * 0.5f + 0.25f;
+	return 1.0f - mask * 0.75f;
 }
 
-static void gpu_color_from_mask_copy(float mask, unsigned char out[3])
+static void gpu_color_from_mask_copy(float mask, const float diffuse_color[4], unsigned char out[3])
 {
-	unsigned char color;
-	
-	color = gpu_color_from_mask(mask) * 255.0f;
+	float mask_color;
 
-	out[0] = color;
-	out[1] = color;
-	out[2] = color;
+	mask_color = gpu_color_from_mask(mask) * 255.0f;
+
+	out[0] = diffuse_color[0] * mask_color;
+	out[1] = diffuse_color[1] * mask_color;
+	out[2] = diffuse_color[2] * mask_color;
 }
 
-static void gpu_color_from_mask_set(float mask)
+static void gpu_color_from_mask_set(float mask, float diffuse_color[4])
 {
 	float color = gpu_color_from_mask(mask);
-	glColor3f(color, color, color);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list