[Bf-blender-cvs] [8def551] opensubdiv-modifier: OpenSubdiv: Support matcap viewport drawing
Sergey Sharybin
noreply at git.blender.org
Mon Jul 14 17:14:33 CEST 2014
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);
More information about the Bf-blender-cvs
mailing list