[Bf-blender-cvs] [284a352] master: Vertex Paint: use solid shading, shadeless in wire (like wpaint)

Campbell Barton noreply at git.blender.org
Thu Mar 20 01:46:22 CET 2014


Commit: 284a3521203a27054dc80df8aefdedcf28dc3ecb
Author: Campbell Barton
Date:   Thu Mar 20 11:33:33 2014 +1100
https://developer.blender.org/rB284a3521203a27054dc80df8aefdedcf28dc3ecb

Vertex Paint: use solid shading, shadeless in wire (like wpaint)

===================================================================

M	source/blender/editors/space_view3d/drawmesh.c
M	source/blender/editors/space_view3d/view3d_intern.h

===================================================================

diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index cfc3cfc..5f93aa4 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -1020,30 +1020,64 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d,
 }
 
 /* Vertex Paint and Weight Paint */
+static void draw_mesh_paint_light_begin(void)
+{
+	const float spec[4] = {0.47f, 0.47f, 0.47f, 0.47f};
+
+	GPU_enable_material(0, NULL);
+
+	/* but set default spec */
+	glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
+	glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec);
+
+	/* diffuse */
+	glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
+	glEnable(GL_LIGHTING);
+	glEnable(GL_COLOR_MATERIAL);
+}
+static void draw_mesh_paint_light_end(void)
+{
+	glDisable(GL_COLOR_MATERIAL);
+	glDisable(GL_LIGHTING);
+
+	GPU_disable_material();
+}
+
 void draw_mesh_paint_weight_faces(DerivedMesh *dm, const bool use_light,
                                   void *facemask_cb, void *user_data)
 {
 	if (use_light) {
-		const float spec[4] = {0.47f, 0.47f, 0.47f, 0.47f};
-
-		/* but set default spec */
-		glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
-		glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec);
-
-		/* diffuse */
-		glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
-		glEnable(GL_LIGHTING);
-		glEnable(GL_COLOR_MATERIAL);
+		draw_mesh_paint_light_begin();
 	}
 
 	dm->drawMappedFaces(dm, (DMSetDrawOptions)facemask_cb, GPU_enable_material, NULL, user_data,
 	                    DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH);
 
 	if (use_light) {
-		glDisable(GL_COLOR_MATERIAL);
-		glDisable(GL_LIGHTING);
+		draw_mesh_paint_light_end();
+	}
+}
 
-		GPU_disable_material();
+void draw_mesh_paint_vcolor_faces(DerivedMesh *dm, const bool use_light,
+                                  void *facemask_cb, void *user_data,
+                                  const Mesh *me)
+{
+	if (use_light) {
+		draw_mesh_paint_light_begin();
+	}
+
+	if (me->mloopcol) {
+		dm->drawMappedFaces(dm, facemask_cb, GPU_enable_material, NULL, user_data,
+		                    DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH);
+	}
+	else {
+		glColor3f(1.0f, 1.0f, 1.0f);
+		dm->drawMappedFaces(dm, facemask_cb, GPU_enable_material, NULL, user_data,
+		                    DM_DRAW_ALWAYS_SMOOTH);
+	}
+
+	if (use_light) {
+		draw_mesh_paint_light_end();
 	}
 }
 
@@ -1092,22 +1126,10 @@ void draw_mesh_paint(View3D *v3d, RegionView3D *rv3d,
 		facemask = wpaint__setSolidDrawOptions_facemask;
 
 	if (ob->mode & OB_MODE_WEIGHT_PAINT) {
-		if (use_light) {
-			GPU_enable_material(0, NULL);
-		}
-
 		draw_mesh_paint_weight_faces(dm, use_light, facemask, me);
 	}
 	else if (ob->mode & OB_MODE_VERTEX_PAINT) {
-		if (me->mloopcol) {
-			dm->drawMappedFaces(dm, facemask, GPU_enable_material, NULL, me,
-			                    DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH);
-		}
-		else {
-			glColor3f(1.0f, 1.0f, 1.0f);
-			dm->drawMappedFaces(dm, facemask, GPU_enable_material, NULL, me,
-			                    DM_DRAW_ALWAYS_SMOOTH);
-		}
+		draw_mesh_paint_vcolor_faces(dm, use_light, facemask, me, me);
 	}
 
 	/* draw face selection on top */
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 71bef91..65a5495 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -164,6 +164,9 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d,
 void draw_mesh_face_select(struct RegionView3D *rv3d, struct Mesh *me, struct DerivedMesh *dm);
 void draw_mesh_paint_weight_faces(struct DerivedMesh *dm, const bool do_light,
                                   void *facemask_cb, void *user_data);
+void draw_mesh_paint_vcolor_faces(struct DerivedMesh *dm, const bool use_light,
+                                  void *facemask_cb, void *user_data,
+                                  const struct Mesh *me);
 void draw_mesh_paint_weight_edges(RegionView3D *rv3d, struct DerivedMesh *dm, const bool use_depth,
                                   void *edgemask_cb, void *user_data);
 void draw_mesh_paint(View3D *v3d, RegionView3D *rv3d,




More information about the Bf-blender-cvs mailing list