fix for armature specular material color overriding the wire color when instanced...
authorCampbell Barton <ideasman42@gmail.com>
Thu, 7 Jun 2012 09:04:45 +0000 (09:04 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 7 Jun 2012 09:04:45 +0000 (09:04 +0000)
source/blender/editors/space_view3d/drawarmature.c
source/blender/editors/space_view3d/drawmesh.c
source/blender/editors/space_view3d/drawobject.c

index 7d0faabaff29ee71495b3e9bf852e9e3ff7e5fcc..7edf18136d2592015559e6c3fff5a81fbdffa482 100644 (file)
@@ -1753,8 +1753,13 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
                                        if (bone == arm->act_bone)
                                                flag |= BONE_DRAW_ACTIVE;
                                        
-                                       /* set color-set to use */
-                                       set_pchan_colorset(ob, pchan);
+                                       if (do_const_color) {
+                                               /* keep color */
+                                       }
+                                       else {
+                                               /* set color-set to use */
+                                               set_pchan_colorset(ob, pchan);
+                                       }
                                        
                                        if (use_custom) {
                                                /* if drawwire, don't try to draw in solid */
@@ -1950,7 +1955,12 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
                                        /* extra draw service for pose mode */
 
                                        /* set color-set to use */
-                                       set_pchan_colorset(ob, pchan);
+                                       if (do_const_color) {
+                                               /* keep color */
+                                       }
+                                       else {
+                                               set_pchan_colorset(ob, pchan);
+                                       }
                                        
                                        if ((pchan->custom) && !(arm->flag & ARM_NO_CUSTOM)) {
                                                /* custom bone shapes should not be drawn here! */
@@ -2001,7 +2011,6 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
                        float vec[3];
 
                        unsigned char col[4];
-
                        if (do_const_color) {
                                /* so we can draw bone names in current const color */
                                float tcol[4];
@@ -2562,11 +2571,8 @@ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
        
        if (dt > OB_WIRE && !ELEM(arm->drawtype, ARM_LINE, ARM_WIRE)) {
                /* we use color for solid lighting */
-               glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
-               glEnable(GL_COLOR_MATERIAL);
-               glColor3ub(255, 255, 255);    // clear spec
-               glDisable(GL_COLOR_MATERIAL);
-               
+               const float white[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+               glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white);
                glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
                glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); // only for lighting...
        }
index de1d9f2266754d4aa6820ee728e22e82e4b64294..19696b2b0e0e3b58438a31bca4d469d3f1ba4de5 100644 (file)
@@ -1015,14 +1015,14 @@ void draw_mesh_paint(View3D *v3d, RegionView3D *rv3d, Object *ob, DerivedMesh *d
        if (ob && ob->mode & OB_MODE_WEIGHT_PAINT) {
 
                if (do_light) {
+                       const float spec[4] = {0.47f, 0.47f, 0.47f, 0.47f};
+
                        /* enforce default material settings */
                        GPU_enable_material(0, NULL);
                
                        /* but set default spec */
                        glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
-                       glEnable(GL_COLOR_MATERIAL);    /* according manpages needed */
-                       glColor3ub(120, 120, 120);
-                       glDisable(GL_COLOR_MATERIAL);
+                       glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec);
 
                        /* diffuse */
                        glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
index 51985a2860f05bcc89bbc579a3e68afc5f8f7e02..63780ebbd20988683bcc3a02b5a64e457ef50fab 100644 (file)
@@ -3434,6 +3434,8 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
                                dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material);
                        }
                        else {
+                               const float spec[4] = {0.47f, 0.47f, 0.47f, 0.47f};
+
                                /* draw outline */
                                if ( (v3d->flag & V3D_SELECT_OUTLINE) &&
                                     ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) &&
@@ -3451,9 +3453,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
                                
                                /* set default spec */
                                glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
-                               glEnable(GL_COLOR_MATERIAL);    /* according manpages needed */
-                               glColor3ub(120, 120, 120);
-                               glDisable(GL_COLOR_MATERIAL);
+                               glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec);
                                /* diffuse */
                                glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
                                glEnable(GL_LIGHTING);