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