[Bf-blender-cvs] [328e65a] temp-cycles-microdisplacement: Simplify how primitive counts are passed to Attribute

Mai Lavelle noreply at git.blender.org
Fri Jun 24 19:26:37 CEST 2016


Commit: 328e65afb1bcc15109172cf72ca31ca9df23e06a
Author: Mai Lavelle
Date:   Thu Jun 16 08:08:08 2016 -0400
Branches: temp-cycles-microdisplacement
https://developer.blender.org/rB328e65afb1bcc15109172cf72ca31ca9df23e06a

Simplify how primitive counts are passed to Attribute

Refactor Attribute so that primitives counts don't need to be passed around
everywhere and can be calculated from one place.

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

M	intern/cycles/render/attribute.cpp
M	intern/cycles/render/attribute.h
M	intern/cycles/render/mesh.cpp

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

diff --git a/intern/cycles/render/attribute.cpp b/intern/cycles/render/attribute.cpp
index 99298d6..c8e60cb 100644
--- a/intern/cycles/render/attribute.cpp
+++ b/intern/cycles/render/attribute.cpp
@@ -51,14 +51,13 @@ void Attribute::set(ustring name_, TypeDesc type_, AttributeElement element_)
 		type == TypeDesc::TypeNormal || type == TypeDesc::TypeMatrix);
 }
 
-void Attribute::resize(int numverts, int numtris, int numsteps, int numcurves, int numkeys,
-                       int numpatches, AttributePrimitive prim, bool reserve_only)
+void Attribute::resize(Mesh *mesh, AttributePrimitive prim, bool reserve_only)
 {
 	if(reserve_only) {
-		buffer.reserve(buffer_size(numverts, numtris, numsteps, numcurves, numkeys, numpatches, prim));
+		buffer.reserve(buffer_size(mesh, prim));
 	}
 	else {
-		buffer.resize(buffer_size(numverts, numtris, numsteps, numcurves, numkeys, numpatches, prim), 0);
+		buffer.resize(buffer_size(mesh, prim), 0);
 	}
 }
 
@@ -127,11 +126,10 @@ size_t Attribute::data_sizeof() const
 		return sizeof(float3);
 }
 
-size_t Attribute::element_size(int numverts, int numtris, int numsteps, int numcurves, int numkeys,
-                               int numpatches, AttributePrimitive prim) const
+size_t Attribute::element_size(Mesh *mesh, AttributePrimitive prim) const
 {
 	size_t size;
-	
+
 	switch(element) {
 		case ATTR_ELEMENT_OBJECT:
 		case ATTR_ELEMENT_MESH:
@@ -139,32 +137,32 @@ size_t Attribute::element_size(int numverts, int numtris, int numsteps, int numc
 			size = 1;
 			break;
 		case ATTR_ELEMENT_VERTEX:
-			size = numverts;
+			size = mesh->verts.size();
 			break;
 		case ATTR_ELEMENT_VERTEX_MOTION:
-			size = numverts * (numsteps - 1);
+			size = mesh->verts.size() * (mesh->motion_steps - 1);
 			break;
 		case ATTR_ELEMENT_FACE:
 			if(prim == ATTR_PRIM_TRIANGLE)
-				size = numtris;
+				size = mesh->num_triangles();
 			else
-				size = numpatches;
+				size = mesh->patches.size();
 			break;
 		case ATTR_ELEMENT_CORNER:
 		case ATTR_ELEMENT_CORNER_BYTE:
 			if(prim == ATTR_PRIM_TRIANGLE)
-				size = numtris*3;
+				size = mesh->num_triangles()*3;
 			else
-				size = numpatches*4;
+				size = mesh->patches.size()*4;
 			break;
 		case ATTR_ELEMENT_CURVE:
-			size = numcurves;
+			size = mesh->num_curves();
 			break;
 		case ATTR_ELEMENT_CURVE_KEY:
-			size = numkeys;
+			size = mesh->curve_keys.size();
 			break;
 		case ATTR_ELEMENT_CURVE_KEY_MOTION:
-			size = numkeys * (numsteps - 1);
+			size = mesh->curve_keys.size() * (mesh->motion_steps - 1);
 			break;
 		default:
 			size = 0;
@@ -174,10 +172,9 @@ size_t Attribute::element_size(int numverts, int numtris, int numsteps, int numc
 	return size;
 }
 
-size_t Attribute::buffer_size(int numverts, int numtris, int numsteps, int numcurves, int numkeys,
-                              int numpatches, AttributePrimitive prim) const
+size_t Attribute::buffer_size(Mesh *mesh, AttributePrimitive prim) const
 {
-	return element_size(numverts, numtris, numsteps, numcurves, numkeys, numpatches, prim)*data_sizeof();
+	return element_size(mesh, prim)*data_sizeof();
 }
 
 bool Attribute::same_storage(TypeDesc a, TypeDesc b)
@@ -301,14 +298,12 @@ Attribute *AttributeSet::add(ustring name, TypeDesc type, AttributeElement eleme
 
 	/* this is weak .. */
 	if(triangle_mesh)
-		attr->resize(triangle_mesh->verts.size(), triangle_mesh->num_triangles(), triangle_mesh->motion_steps, 0, 0,
-		             0, ATTR_PRIM_TRIANGLE, false);
+		attr->resize(triangle_mesh, ATTR_PRIM_TRIANGLE, false);
 	if(curve_mesh)
-		attr->resize(0, 0, curve_mesh->motion_steps, curve_mesh->num_curves(), curve_mesh->curve_keys.size(),
-		             0, ATTR_PRIM_CURVE, false);
+		attr->resize(curve_mesh, ATTR_PRIM_CURVE, false);
 	if(subd_mesh)
-		attr->resize(subd_mesh->verts.size(), 0, 0, 0, 0, subd_mesh->patches.size(), ATTR_PRIM_SUBD, false);
-	
+		attr->resize(subd_mesh, ATTR_PRIM_SUBD, false);
+
 	return attr;
 }
 
@@ -466,12 +461,11 @@ void AttributeSet::resize(bool reserve_only)
 {
 	foreach(Attribute& attr, attributes) {
 		if(triangle_mesh)
-			attr.resize(triangle_mesh->verts.size(), triangle_mesh->num_triangles(), triangle_mesh->motion_steps, 0, 0,
-			            0, ATTR_PRIM_TRIANGLE, reserve_only);
+			attr.resize(triangle_mesh, ATTR_PRIM_TRIANGLE, reserve_only);
 		if(curve_mesh)
-			attr.resize(0, 0, 0, curve_mesh->num_curves(), curve_mesh->curve_keys.size(), 0, ATTR_PRIM_CURVE, reserve_only);
+			attr.resize(curve_mesh, ATTR_PRIM_CURVE, reserve_only);
 		if(subd_mesh)
-			attr.resize(subd_mesh->verts.size(), 0, 0, 0, 0, subd_mesh->patches.size(), ATTR_PRIM_SUBD, reserve_only);
+			attr.resize(subd_mesh, ATTR_PRIM_SUBD, reserve_only);
 	}
 }
 
diff --git a/intern/cycles/render/attribute.h b/intern/cycles/render/attribute.h
index cb0426b..6f31470 100644
--- a/intern/cycles/render/attribute.h
+++ b/intern/cycles/render/attribute.h
@@ -58,14 +58,11 @@ public:
 	Attribute() {}
 	~Attribute();
 	void set(ustring name, TypeDesc type, AttributeElement element);
-	void resize(int numverts, int numfaces, int numsteps, int numcurves, int numkeys,
-	            int numpatches, AttributePrimitive prim, bool reserve_only);
+	void resize(Mesh *mesh, AttributePrimitive prim, bool reserve_only);
 
 	size_t data_sizeof() const;
-	size_t element_size(int numverts, int numfaces, int numsteps, int numcurves, int numkeys,
-	                    int numpatches, AttributePrimitive prim) const;
-	size_t buffer_size(int numverts, int numfaces, int numsteps, int numcurves, int numkeys,
-	                   int numpatches, AttributePrimitive prim) const;
+	size_t element_size(Mesh *mesh, AttributePrimitive prim) const;
+	size_t buffer_size(Mesh *mesh, AttributePrimitive prim) const;
 
 	char *data() { return (buffer.size())? &buffer[0]: NULL; };
 	float3 *data_float3() { return (float3*)data(); }
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index 6ccff95..520eac0 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -932,14 +932,7 @@ static void update_attribute_element_size(Mesh *mesh,
                                           size_t *attr_uchar4_size)
 {
 	if(mattr) {
-		size_t size = mattr->element_size(
-			mesh->verts.size(),
-			mesh->num_triangles(),
-			mesh->motion_steps,
-			mesh->num_curves(),
-			mesh->curve_keys.size(),
-			mesh->patches.size(),
-			prim);
+		size_t size = mattr->element_size(mesh, prim);
 
 		if(mattr->element == ATTR_ELEMENT_VOXEL) {
 			/* pass */
@@ -978,14 +971,7 @@ static void update_attribute_element_offset(Mesh *mesh,
 		type = mattr->type;
 
 		/* store attribute data in arrays */
-		size_t size = mattr->element_size(
-			mesh->verts.size(),
-			mesh->num_triangles(),
-			mesh->motion_steps,
-			mesh->num_curves(),
-			mesh->curve_keys.size(),
-			mesh->patches.size(),
-			prim);
+		size_t size = mattr->element_size(mesh, prim);
 
 		if(mattr->element == ATTR_ELEMENT_VOXEL) {
 			/* store slot in offset value */




More information about the Bf-blender-cvs mailing list