[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