Ignore vertex color when doing texture paint
authorSergey Sharybin <sergey.vfx@gmail.com>
Thu, 19 May 2016 09:11:21 +0000 (11:11 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Thu, 19 May 2016 09:11:21 +0000 (11:11 +0200)
It was totally useless to multiply diffuse color with the vertex color
when doing texture painting. It was masking actual texture and only was
forcing artists to create an empty vertex color layer to work this around.

source/blender/blenkernel/intern/cdderivedmesh.c
source/blender/blenkernel/intern/subsurf_ccg.c

index e6741657f47dd959940130cdd6297d79e3a230a2..af1ad4900b3dda85f3931736bb759b839207b36e 100644 (file)
@@ -495,11 +495,12 @@ static void cdDM_drawFacesTex_common(
        CDDerivedMesh *cddm = (CDDerivedMesh *) dm;
        const MPoly *mpoly = cddm->mpoly;
        MTexPoly *mtexpoly = DM_get_poly_data_layer(dm, CD_MTEXPOLY);
-       const  MLoopCol *mloopcol;
+       const  MLoopCol *mloopcol = NULL;
        int i;
        int colType, start_element, tot_drawn;
        const bool use_hide = (flag & DM_DRAW_SKIP_HIDDEN) != 0;
        const bool use_tface = (flag & DM_DRAW_USE_ACTIVE_UV) != 0;
+       const bool use_colors = (flag & DM_DRAW_USE_COLORS) != 0;
        int totpoly;
        int next_actualFace;
        int mat_index;
@@ -529,15 +530,17 @@ static void cdDM_drawFacesTex_common(
                }
        }
 
-       colType = CD_TEXTURE_MLOOPCOL;
-       mloopcol = dm->getLoopDataArray(dm, colType);
-       if (!mloopcol) {
-               colType = CD_PREVIEW_MLOOPCOL;
-               mloopcol = dm->getLoopDataArray(dm, colType);
-       }
-       if (!mloopcol) {
-               colType = CD_MLOOPCOL;
+       if (use_colors) {
+               colType = CD_TEXTURE_MLOOPCOL;
                mloopcol = dm->getLoopDataArray(dm, colType);
+               if (!mloopcol) {
+                       colType = CD_PREVIEW_MLOOPCOL;
+                       mloopcol = dm->getLoopDataArray(dm, colType);
+               }
+               if (!mloopcol) {
+                       colType = CD_MLOOPCOL;
+                       mloopcol = dm->getLoopDataArray(dm, colType);
+               }
        }
 
        GPU_vertex_setup(dm);
index a84b83524172d68daaad807915f4fe0f2bdec6fb..5fd418fadfca677d4e44a27fd8aaa73f3b3e8a5f 100644 (file)
@@ -3370,13 +3370,14 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
        CCGSubSurf *ss = ccgdm->ss;
        CCGKey key;
        int colType;
-       const  MLoopCol *mloopcol;
+       const MLoopCol *mloopcol = NULL;
        MTexPoly *mtexpoly = DM_get_poly_data_layer(dm, CD_MTEXPOLY);
        DMFlagMat *faceFlags = ccgdm->faceFlags;
        DMDrawOption draw_option;
        int i, totpoly;
        bool flush;
-       bool use_tface = (flag & DM_DRAW_USE_ACTIVE_UV) != 0;
+       const bool use_tface = (flag & DM_DRAW_USE_ACTIVE_UV) != 0;
+       const bool use_colors = (flag & DM_DRAW_USE_COLORS) != 0;
        unsigned int next_actualFace;
        unsigned int gridFaces = ccgSubSurf_getGridSize(ss) - 1;
        int mat_index;
@@ -3395,15 +3396,17 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
        CCG_key_top_level(&key, ss);
        ccgdm_pbvh_update(ccgdm);
 
-       colType = CD_TEXTURE_MLOOPCOL;
-       mloopcol = dm->getLoopDataArray(dm, colType);
-       if (!mloopcol) {
-               colType = CD_PREVIEW_MLOOPCOL;
-               mloopcol = dm->getLoopDataArray(dm, colType);
-       }
-       if (!mloopcol) {
-               colType = CD_MLOOPCOL;
+       if (use_colors) {
+               colType = CD_TEXTURE_MLOOPCOL;
                mloopcol = dm->getLoopDataArray(dm, colType);
+               if (!mloopcol) {
+                       colType = CD_PREVIEW_MLOOPCOL;
+                       mloopcol = dm->getLoopDataArray(dm, colType);
+               }
+               if (!mloopcol) {
+                       colType = CD_MLOOPCOL;
+                       mloopcol = dm->getLoopDataArray(dm, colType);
+               }
        }
 
        GPU_vertex_setup(dm);