Commit: 8def551763565d7154599550f33075e0b0cc659b
Author: Sergey Sharybin
Date:   Mon Jul 14 20:31:09 2014 +0600
https://developer.blender.org/rB8def551763565d7154599550f33075e0b0cc659b

OpenSubdiv: Support matcap viewport drawing

Matcap display is a part of more generic drawMappedFacesGLSL(),
but this doesn't mean GLSL viewport materials are working.

For now stuff is only tested and verified for matcap materials,
BI/Cycles materials and textures are still not supported.

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

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 122ed54..45c0b63 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -2019,6 +2019,57 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm,
        short (*lnors)[4][3] = dm->getTessFaceDataArray(dm, CD_TESSLOOPNORMAL);
        int a, i, do_draw, numVerts, matnr, new_matnr, totface;
 
+#ifdef WITH_OPENSUBDIV
+       {
+               int i, matnr = -1, shademodel = -1;
+               CCGFaceIterator *fi;
+               ccgSubSurf_prepareGLMesh(ss);
+               do_draw = 0;
+               for (fi = ccgSubSurf_getFaceIterator(ss), i = 0;
+                    !ccgFaceIterator_isStopped(fi);
+                    ccgFaceIterator_next(fi), ++i)
+               {
+                       CCGFace *f = ccgFaceIterator_getCurrent(fi);
+                       int index = 
GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(f));
+                       int origIndex = ccgDM_getFaceMapIndex(ss, f);
+                       int new_matnr, new_shademodel;
+
+                       if (faceFlags) {
+                               new_shademodel = (lnors || 
(faceFlags[index].flag & ME_SMOOTH))
+                                       ? GL_SMOOTH
+                                       : GL_FLAT;
+                               new_matnr = faceFlags[index].mat_nr;
+                       }
+                       else {
+                               new_shademodel = GL_SMOOTH;
+                               new_matnr = 0;
+                       }
+
+                       if (new_shademodel != shademodel) {
+                               glShadeModel(new_shademodel);
+                               shademodel = new_shademodel;
+                       }
+
+                       if (new_matnr != matnr) {
+                               do_draw = setMaterial(matnr = new_matnr, 
&gattribs);
+                               matnr = new_matnr;
+                       }
+
+                       if (!do_draw || (setDrawOptions && (origIndex != 
ORIGINDEX_NONE) &&
+                                       (setDrawOptions(userData, origIndex) == 
DM_DRAW_OPTION_SKIP)))
+                       {
+                               continue;
+                       }
+
+                       ccgSubSurf_drawGLMesh(ss, true, i);
+               }
+               ccgFaceIterator_free(fi);
+
+               /* We're done with drawing if drawing happens using OpenSubdiv. 
*/
+               return;
+       }
+#endif
+
        CCG_key_top_level(&key, ss);
        ccgdm_pbvh_update(ccgdm);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to