[Bf-blender-cvs] [c182fe5] temp-cycles-microdisplacement: Add patch primitive to Mesh
Mai Lavelle
noreply at git.blender.org
Thu Jun 9 12:11:28 CEST 2016
Commit: c182fe5c408c7d2580276046dce2289f8d69a2fd
Author: Mai Lavelle
Date: Sat Jun 4 21:58:42 2016 -0400
Branches: temp-cycles-microdisplacement
https://developer.blender.org/rBc182fe5c408c7d2580276046dce2289f8d69a2fd
Add patch primitive to Mesh
Needed for subdivision and proper attribute interpolation
===================================================================
M intern/cycles/render/mesh.cpp
M intern/cycles/render/mesh.h
===================================================================
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index e251556..1fc1599 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -178,6 +178,16 @@ void Mesh::reserve_curves(int numcurves, int numkeys)
curve_attributes.resize(true);
}
+void Mesh::resize_patches(int numpatches)
+{
+ patches.resize(numpatches);
+}
+
+void Mesh::reserve_patches(int numpatches)
+{
+ patches.reserve(numpatches);
+}
+
void Mesh::clear()
{
/* clear all verts and triangles */
@@ -193,6 +203,8 @@ void Mesh::clear()
curve_first_key.clear();
curve_shader.clear();
+ patches.clear();
+
attributes.clear();
curve_attributes.clear();
used_shaders.clear();
@@ -251,6 +263,16 @@ void Mesh::add_curve(int first_key, int shader)
curve_shader.push_back_reserved(shader);
}
+void Mesh::add_patch(int v0, int v1, int v2, int v3, int shader_, bool smooth_)
+{
+ patches.push_back_reserved({v0, v1, v2, v3, shader_, smooth_});
+}
+
+void Mesh::add_patch(int v0, int v1, int v2, int shader_, bool smooth_)
+{
+ add_patch(v0, v1, v2, -1, shader_, smooth_);
+}
+
void Mesh::compute_bounds()
{
BoundBox bnds = BoundBox::empty;
diff --git a/intern/cycles/render/mesh.h b/intern/cycles/render/mesh.h
index edad6d3..a1ad3c3 100644
--- a/intern/cycles/render/mesh.h
+++ b/intern/cycles/render/mesh.h
@@ -89,6 +89,15 @@ public:
return curve_first_key.size();
}
+ /* Mesh Patch */
+ struct Patch {
+ int v[4];
+ int shader;
+ bool smooth;
+
+ bool is_quad() { return v[3] >= 0; }
+ };
+
/* Displacement */
enum DisplacementMethod {
DISPLACE_BUMP = 0,
@@ -121,6 +130,8 @@ public:
array<int> curve_first_key;
array<int> curve_shader;
+ array<Patch> patches;
+
vector<Shader*> used_shaders;
AttributeSet attributes;
AttributeSet curve_attributes;
@@ -154,12 +165,16 @@ public:
void reserve_mesh(int numverts, int numfaces);
void resize_curves(int numcurves, int numkeys);
void reserve_curves(int numcurves, int numkeys);
+ void resize_patches(int numpatches);
+ void reserve_patches(int numpatches);
void clear();
void add_vertex(float3 P);
void add_vertex_slow(float3 P);
void add_triangle(int v0, int v1, int v2, int shader, bool smooth, bool forms_quad = false);
void add_curve_key(float3 loc, float radius);
void add_curve(int first_key, int shader);
+ void add_patch(int v0, int v1, int v2, int v3, int shader_, bool smooth_);
+ void add_patch(int v0, int v1, int v2, int shader_, bool smooth_);
int split_vertex(int vertex);
void compute_bounds();
More information about the Bf-blender-cvs
mailing list