diff options
author | Mai Lavelle <mai.lavelle@gmail.com> | 2016-04-12 00:46:00 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2016-04-12 00:50:15 +0300 |
commit | 665467e51eb4af3203418568a597cec0eed47d79 (patch) | |
tree | aac68c3f450bf0276c9e73ed209a67793a0f21f4 /intern/cycles/blender | |
parent | d456458e06cfdccf7c874df63faf9ffca4812555 (diff) |
Cycles microdisplacement: refactor to move some tesselation code from SubdMesh to Mesh
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D1915
Diffstat (limited to 'intern/cycles/blender')
-rw-r--r-- | intern/cycles/blender/blender_mesh.cpp | 46 |
1 files changed, 10 insertions, 36 deletions
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp index baff3c206b7..24c2c57082f 100644 --- a/intern/cycles/blender/blender_mesh.cpp +++ b/intern/cycles/blender/blender_mesh.cpp @@ -618,18 +618,19 @@ static void create_mesh(Scene *scene, if(is_zero(cross(mesh->verts[vi[1]] - mesh->verts[vi[0]], mesh->verts[vi[2]] - mesh->verts[vi[0]])) || is_zero(cross(mesh->verts[vi[2]] - mesh->verts[vi[0]], mesh->verts[vi[3]] - mesh->verts[vi[0]]))) { - mesh->set_triangle(ti++, vi[0], vi[1], vi[3], shader, smooth); - mesh->set_triangle(ti++, vi[2], vi[3], vi[1], shader, smooth); + // TODO(mai): order here is probably wrong + mesh->set_triangle(ti++, vi[0], vi[1], vi[3], shader, smooth, true); + mesh->set_triangle(ti++, vi[2], vi[3], vi[1], shader, smooth, true); face_flags[fi] |= FACE_FLAG_DIVIDE_24; } else { - mesh->set_triangle(ti++, vi[0], vi[1], vi[2], shader, smooth); - mesh->set_triangle(ti++, vi[0], vi[2], vi[3], shader, smooth); + mesh->set_triangle(ti++, vi[0], vi[1], vi[2], shader, smooth, true); + mesh->set_triangle(ti++, vi[0], vi[2], vi[3], shader, smooth, true); face_flags[fi] |= FACE_FLAG_DIVIDE_13; } } else - mesh->set_triangle(ti++, vi[0], vi[1], vi[2], shader, smooth); + mesh->set_triangle(ti++, vi[0], vi[1], vi[2], shader, smooth, false); nverts[fi] = n; } @@ -661,37 +662,10 @@ static void create_subd_mesh(Scene *scene, PointerRNA *cmesh, const vector<uint>& used_shaders) { - /* create subd mesh */ - SubdMesh sdmesh; + Mesh basemesh; + create_mesh(scene, &basemesh, b_mesh, used_shaders); - /* create vertices */ - BL::Mesh::vertices_iterator v; - - for(b_mesh.vertices.begin(v); v != b_mesh.vertices.end(); ++v) - sdmesh.add_vert(get_float3(v->co())); - - /* create faces */ - BL::Mesh::tessfaces_iterator f; - - for(b_mesh.tessfaces.begin(f); f != b_mesh.tessfaces.end(); ++f) { - int4 vi = get_int4(f->vertices_raw()); - int n = (vi[3] == 0) ? 3: 4; - //int shader = used_shaders[f->material_index()]; - - if(n == 4) - sdmesh.add_face(vi[0], vi[1], vi[2], vi[3]); - else - sdmesh.add_face(vi[0], vi[1], vi[2]); - } - - /* finalize subd mesh */ - sdmesh.finish(); - - /* parameters */ - bool need_ptex = mesh->need_attribute(scene, ATTR_STD_PTEX_FACE_ID) || - mesh->need_attribute(scene, ATTR_STD_PTEX_UV); - - SubdParams sdparams(mesh, used_shaders[0], true, need_ptex); + SubdParams sdparams(mesh, used_shaders[0], true, false); sdparams.dicing_rate = RNA_float_get(cmesh, "dicing_rate"); scene->camera->update(); @@ -700,7 +674,7 @@ static void create_subd_mesh(Scene *scene, /* tesselate */ DiagSplit dsplit(sdparams); - sdmesh.tessellate(&dsplit); + basemesh.tessellate(&dsplit); } /* Sync */ |