[Bf-blender-cvs] [444ef8f] temp-cycles-microdisplacement: Fix multiple shaders on subdivision meshes

Mai Lavelle noreply at git.blender.org
Sat Jul 16 23:35:34 CEST 2016


Commit: 444ef8f19691b1987972295e1a4b22efa15a01ae
Author: Mai Lavelle
Date:   Sat Jul 16 16:52:04 2016 -0400
Branches: temp-cycles-microdisplacement
https://developer.blender.org/rB444ef8f19691b1987972295e1a4b22efa15a01ae

Fix multiple shaders on subdivision meshes

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

M	intern/cycles/blender/blender_mesh.cpp
M	intern/cycles/render/mesh_subdivision.cpp
M	intern/cycles/subd/subd_dice.cpp
M	intern/cycles/subd/subd_dice.h
M	intern/cycles/subd/subd_patch.h

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

diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index 4f81789..bda7639 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -805,7 +805,7 @@ static void create_subd_mesh(Scene *scene,
 	}
 
 	/* set subd params */
-	SubdParams sdparams(mesh, 0, true, false);
+	SubdParams sdparams(mesh);
 
 	PointerRNA cobj = RNA_pointer_get(&b_ob.ptr, "cycles");
 
diff --git a/intern/cycles/render/mesh_subdivision.cpp b/intern/cycles/render/mesh_subdivision.cpp
index eb292e7..5ae7efe 100644
--- a/intern/cycles/render/mesh_subdivision.cpp
+++ b/intern/cycles/render/mesh_subdivision.cpp
@@ -355,6 +355,8 @@ void Mesh::tessellate(DiagSplit *split)
 				subpatch.patch = &quad_patch;
 			}
 
+			subpatch.patch->shader = face.shader;
+
 			/* Quad faces need to be split at least once to line up with split ngons, we do this
 			 * here in this manner because if we do it later edge factors may end up slightly off.
 			 */
@@ -388,6 +390,8 @@ void Mesh::tessellate(DiagSplit *split)
 			if(subdivision_type == SUBDIVISION_CATMULL_CLARK) {
 				OsdPatch patch(&osd_data);
 
+				patch.shader = face.shader;
+
 				for(int corner = 0; corner < face.num_corners; corner++) {
 					patch.patch_index = face.ptex_offset + corner;
 
@@ -413,6 +417,8 @@ void Mesh::tessellate(DiagSplit *split)
 
 					patch.patch_index = face.ptex_offset + corner;
 
+					patch.shader = face.shader;
+
 					hull[0] = verts[subd_face_corners[face.start_corner + mod(corner + 0, face.num_corners)]];
 					hull[1] = verts[subd_face_corners[face.start_corner + mod(corner + 1, face.num_corners)]];
 					hull[2] = verts[subd_face_corners[face.start_corner + mod(corner - 1, face.num_corners)]];
diff --git a/intern/cycles/subd/subd_dice.cpp b/intern/cycles/subd/subd_dice.cpp
index f2d44d7..36981a2 100644
--- a/intern/cycles/subd/subd_dice.cpp
+++ b/intern/cycles/subd/subd_dice.cpp
@@ -94,7 +94,7 @@ void EdgeDice::add_triangle(Patch *patch, int v0, int v1, int v2)
 	if(mesh->triangles.size() == mesh->triangles.capacity())
 		mesh->reserve_mesh(mesh->verts.size(), size_t(max(mesh->num_triangles() + 1, 1) * 1.2));
 
-	mesh->add_triangle(v0, v1, v2, params.shader, params.smooth);
+	mesh->add_triangle(v0, v1, v2, patch->shader, true);
 	params.mesh->triangle_patch[params.mesh->num_triangles()-1] = patch->patch_index;
 
 	if(params.ptex) {
diff --git a/intern/cycles/subd/subd_dice.h b/intern/cycles/subd/subd_dice.h
index a051f7e..3002ec7 100644
--- a/intern/cycles/subd/subd_dice.h
+++ b/intern/cycles/subd/subd_dice.h
@@ -33,8 +33,6 @@ class Patch;
 
 struct SubdParams {
 	Mesh *mesh;
-	int shader;
-	bool smooth;
 	bool ptex;
 
 	int test_steps;
@@ -44,11 +42,9 @@ struct SubdParams {
 	Camera *camera;
 	Transform objecttoworld;
 
-	SubdParams(Mesh *mesh_, int shader_, bool smooth_ = true, bool ptex_ = false)
+	SubdParams(Mesh *mesh_, bool ptex_ = false)
 	{
 		mesh = mesh_;
-		shader = shader_;
-		smooth = smooth_;
 		ptex = ptex_;
 
 		test_steps = 3;
diff --git a/intern/cycles/subd/subd_patch.h b/intern/cycles/subd/subd_patch.h
index 3d7d833..360c1ab 100644
--- a/intern/cycles/subd/subd_patch.h
+++ b/intern/cycles/subd/subd_patch.h
@@ -30,6 +30,7 @@ public:
 	virtual int ptex_face_id() { return -1; }
 
 	int patch_index;
+	int shader;
 };
 
 /* Linear Quad Patch */




More information about the Bf-blender-cvs mailing list