Esempio n. 1
0
void Attribute::add(const char *data)
{
	size_t size = data_sizeof();

	for(size_t i = 0; i < size; i++)
		buffer.push_back(data[i]);
}
Esempio n. 2
0
size_t Attribute::element_size(Mesh *mesh, AttributePrimitive prim) const
{
	if(flags & ATTR_FINAL_SIZE) {
		return buffer.size() / data_sizeof();
	}

	size_t size;

	switch(element) {
		case ATTR_ELEMENT_OBJECT:
		case ATTR_ELEMENT_MESH:
		case ATTR_ELEMENT_VOXEL:
			size = 1;
			break;
		case ATTR_ELEMENT_VERTEX:
			size = mesh->verts.size() + mesh->num_ngons;
			if(prim == ATTR_PRIM_SUBD) {
				size -= mesh->num_subd_verts;
			}
			break;
		case ATTR_ELEMENT_VERTEX_MOTION:
			size = (mesh->verts.size() + mesh->num_ngons) * (mesh->motion_steps - 1);
			if(prim == ATTR_PRIM_SUBD) {
				size -= mesh->num_subd_verts * (mesh->motion_steps - 1);
			}
			break;
		case ATTR_ELEMENT_FACE:
			if(prim == ATTR_PRIM_TRIANGLE) {
				size = mesh->num_triangles();
			}
			else {
				size = mesh->subd_faces.size() + mesh->num_ngons;
			}
			break;
		case ATTR_ELEMENT_CORNER:
		case ATTR_ELEMENT_CORNER_BYTE:
			if(prim == ATTR_PRIM_TRIANGLE) {
				size = mesh->num_triangles()*3;
			}
			else {
				size = mesh->subd_face_corners.size() + mesh->num_ngons;
			}
			break;
		case ATTR_ELEMENT_CURVE:
			size = mesh->num_curves();
			break;
		case ATTR_ELEMENT_CURVE_KEY:
			size = mesh->curve_keys.size();
			break;
		case ATTR_ELEMENT_CURVE_KEY_MOTION:
			size = mesh->curve_keys.size() * (mesh->motion_steps - 1);
			break;
		default:
			size = 0;
			break;
	}

	return size;
}
Esempio n. 3
0
size_t Attribute::buffer_size(int numverts, int numtris)
{
	return element_size(numverts, numtris)*data_sizeof();
}
Esempio n. 4
0
size_t Attribute::buffer_size(int numverts, int numtris, int numcurves, int numkeys) const
{
	return element_size(numverts, numtris, numcurves, numkeys)*data_sizeof();
}
Esempio n. 5
0
void Attribute::resize(size_t num_elements)
{
	buffer.resize(num_elements * data_sizeof(), 0);
}
Esempio n. 6
0
void Attribute::zero_data(void* dst)
{
	memset(dst, 0, data_sizeof());
}
Esempio n. 7
0
size_t Attribute::buffer_size(Mesh *mesh, AttributePrimitive prim) const
{
	return element_size(mesh, prim)*data_sizeof();
}