Commit: 1b442ac7e2360531f73271f0930c4ca5a8f8cee8
Author: Antony Riakiotakis
Date:   Sun Apr 27 23:23:51 2014 +0300
https://developer.blender.org/rB1b442ac7e2360531f73271f0930c4ca5a8f8cee8

Add missing mask display support from subsurf.

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

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

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

diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c 
b/source/blender/blenkernel/intern/subsurf_ccg.c
index 8063b0c..c3a4b36 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -2291,6 +2291,9 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
        CCGKey key;
        MCol *mcol = dm->getTessFaceDataArray(dm, CD_PREVIEW_MCOL);
        MTFace *tf = DM_get_tessface_data_layer(dm, CD_MTFACE);
+       int stencil = CustomData_get_stencil_layer(&dm->faceData, CD_MTFACE);
+       MTFace *tf_stencil_base = CustomData_get_layer_n(&dm->faceData, 
CD_MTFACE, stencil);
+       MTFace *tf_stencil = NULL;
        MTFace *tf_base;
        short (*lnors)[4][3] = dm->getTessFaceDataArray(dm, CD_TESSLOOPNORMAL);
        DMFlagMat *faceFlags = ccgdm->faceFlags;
@@ -2349,6 +2352,7 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
                                mat_nr_cache = mat_nr;
                        }
                        tf = tf_base + gridOffset;
+                       tf_stencil = tf_stencil_base + gridOffset;
                        gridOffset += gridFaces * gridFaces * numVerts;
                }
 
@@ -2392,26 +2396,31 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
                                                float *d_co = 
CCG_grid_elem_co(&key, faceGridData, x, y + 1);
 
                                                if (tf) 
glTexCoord2fv(tf->uv[1]);
+                                               if (tf_stencil) 
glMultiTexCoord2fv(GL_TEXTURE1, tf_stencil->uv[1]);
                                                if (cp) glColor3ub(cp[7], 
cp[6], cp[5]);
                                                glNormal3sv(ln[0][1]);
                                                glVertex3fv(d_co);
 
                                                if (tf) 
glTexCoord2fv(tf->uv[2]);
+                                               if (tf_stencil) 
glMultiTexCoord2fv(GL_TEXTURE1, tf_stencil->uv[2]);
                                                if (cp) glColor3ub(cp[11], 
cp[10], cp[9]);
                                                glNormal3sv(ln[0][2]);
                                                glVertex3fv(c_co);
 
                                                if (tf) 
glTexCoord2fv(tf->uv[3]);
+                                               if (tf_stencil) 
glMultiTexCoord2fv(GL_TEXTURE1, tf_stencil->uv[3]);
                                                if (cp) glColor3ub(cp[15], 
cp[14], cp[13]);
                                                glNormal3sv(ln[0][3]);
                                                glVertex3fv(b_co);
 
                                                if (tf) 
glTexCoord2fv(tf->uv[0]);
+                                               if (tf_stencil) 
glMultiTexCoord2fv(GL_TEXTURE1, tf_stencil->uv[0]);
                                                if (cp) glColor3ub(cp[3], 
cp[2], cp[1]);
                                                glNormal3sv(ln[0][0]);
                                                glVertex3fv(a_co);
 
                                                if (tf) tf++;
+                                               if (tf_stencil) tf_stencil++;
                                                if (cp) cp += 16;
                                                ln++;
                                        }
@@ -2427,17 +2436,20 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
                                                b = CCG_grid_elem(&key, 
faceGridData, x, y + 1);
 
                                                if (tf) 
glTexCoord2fv(tf->uv[0]);
+                                               if (tf_stencil) 
glMultiTexCoord2fv(GL_TEXTURE1, tf_stencil->uv[0]);
                                                if (cp) glColor3ub(cp[3], 
cp[2], cp[1]);
                                                glNormal3fv(CCG_elem_no(&key, 
a));
                                                glVertex3fv(CCG_elem_co(&key, 
a));
 
                                                if (tf) 
glTexCoord2fv(tf->uv[1]);
+                                               if (tf_stencil) 
glMultiTexCoord2fv(GL_TEXTURE1, tf_stencil->uv[1]);
                                                if (cp) glColor3ub(cp[7], 
cp[6], cp[5]);
                                                glNormal3fv(CCG_elem_no(&key, 
b));
                                                glVertex3fv(CCG_elem_co(&key, 
b));
                                                
                                                if (x != gridFaces - 1) {
                                                        if (tf) tf++;
+                                                       if (tf_stencil) 
tf_stencil++;
                                                        if (cp) cp += 16;
                                                }
                                        }
@@ -2446,16 +2458,19 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
                                        b = CCG_grid_elem(&key, faceGridData, 
x, y + 1);
 
                                        if (tf) glTexCoord2fv(tf->uv[3]);
+                                       if (tf_stencil) 
glMultiTexCoord2fv(GL_TEXTURE1, tf_stencil->uv[3]);
                                        if (cp) glColor3ub(cp[15], cp[14], 
cp[13]);
                                        glNormal3fv(CCG_elem_no(&key, a));
                                        glVertex3fv(CCG_elem_co(&key, a));
 
                                        if (tf) glTexCoord2fv(tf->uv[2]);
+                                       if (tf_stencil) 
glMultiTexCoord2fv(GL_TEXTURE1, tf_stencil->uv[2]);
                                        if (cp) glColor3ub(cp[11], cp[10], 
cp[9]);
                                        glNormal3fv(CCG_elem_no(&key, b));
                                        glVertex3fv(CCG_elem_co(&key, b));
 
                                        if (tf) tf++;
+                                       if (tf_stencil) tf_stencil++;
                                        if (cp) cp += 16;
 
                                        glEnd();
@@ -2474,22 +2489,27 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
                                                ccgDM_glNormalFast(a_co, b_co, 
c_co, d_co);
 
                                                if (tf) 
glTexCoord2fv(tf->uv[1]);
+                                               if (tf_stencil) 
glMultiTexCoord2fv(GL_TEXTURE1, tf_stencil->uv[1]);
                                                if (cp) glColor3ub(cp[7], 
cp[6], cp[5]);
                                                glVertex3fv(d_co);
 
                                                if (tf) 
glTexCoord2fv(tf->uv[2]);
+                                               if (tf_stencil) 
glMultiTexCoord2fv(GL_TEXTURE1, tf_stencil->uv[2]);
                                                if (cp) glColor3ub(cp[11], 
cp[10], cp[9]);
                                                glVertex3fv(c_co);
 
                                                if (tf) 
glTexCoord2fv(tf->uv[3]);
+                                               if (tf_stencil) 
glMultiTexCoord2fv(GL_TEXTURE1, tf_stencil->uv[3]);
                                                if (cp) glColor3ub(cp[15], 
cp[14], cp[13]);
                                                glVertex3fv(b_co);
 
                                                if (tf) 
glTexCoord2fv(tf->uv[0]);
+                                               if (tf_stencil) 
glMultiTexCoord2fv(GL_TEXTURE1, tf_stencil->uv[0]);
                                                if (cp) glColor3ub(cp[3], 
cp[2], cp[1]);
                                                glVertex3fv(a_co);
 
                                                if (tf) tf++;
+                                               if (tf_stencil) tf_stencil++;
                                                if (cp) cp += 16;
                                        }
                                }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to