diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-08-25 16:05:28 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-08-25 16:11:56 +0300 |
commit | f1e68474e051667b85ac804bded8fa2c8e0ff374 (patch) | |
tree | 9e3470179f56bff64807d944ad8af32141fcbc45 /source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c | |
parent | 50917edad54d2be0f5e3a6630382e28ab1fd32e0 (diff) |
OpenSubdiv: Support for multiple materials in solid shading mode
Implementation is less optimal compared to non-opensubdiv drawing but
it is now as good as we can do it without affecting on how patches are
being created by OpenSubdiv.
Diffstat (limited to 'source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c')
-rw-r--r-- | source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c b/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c index eb7c3bf6ffd..fcc46308efa 100644 --- a/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c +++ b/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c @@ -308,6 +308,31 @@ void ccgSubSurf_drawGLMesh(CCGSubSurf *ss, bool fill_quads, } } +int ccgSubSurf_getNumGLMeshBaseFaces(CCGSubSurf *ss) +{ + const OpenSubdiv_TopologyRefinerDescr *topology_refiner; + if (ss->osd_topology_refiner != NULL) { + topology_refiner = ss->osd_topology_refiner; + } + else { + topology_refiner = openSubdiv_getGLMeshTopologyRefiner(ss->osd_mesh); + } + return openSubdiv_topologyRefinerGetNumFaces(topology_refiner); +} + +/* Get number of vertices in base faces in a particular GL mesh. */ +int ccgSubSurf_getNumGLMeshBaseFaceVerts(CCGSubSurf *ss, int face) +{ + const OpenSubdiv_TopologyRefinerDescr *topology_refiner; + if (ss->osd_topology_refiner != NULL) { + topology_refiner = ss->osd_topology_refiner; + } + else { + topology_refiner = openSubdiv_getGLMeshTopologyRefiner(ss->osd_mesh); + } + return openSubdiv_topologyRefinerGetNumFaceVerts(topology_refiner, face); +} + void ccgSubSurf_setSkipGrids(CCGSubSurf *ss, bool skip_grids) { ss->skip_grids = skip_grids; |