Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/render/attribute.cpp
| Show First 20 Lines • Show All 161 Lines • ▼ Show 20 Lines | size_t Attribute::element_size(Geometry *geom, AttributePrimitive prim) const | ||||
| switch (element) { | switch (element) { | ||||
| case ATTR_ELEMENT_OBJECT: | case ATTR_ELEMENT_OBJECT: | ||||
| case ATTR_ELEMENT_MESH: | case ATTR_ELEMENT_MESH: | ||||
| case ATTR_ELEMENT_VOXEL: | case ATTR_ELEMENT_VOXEL: | ||||
| size = 1; | size = 1; | ||||
| break; | break; | ||||
| case ATTR_ELEMENT_VERTEX: | case ATTR_ELEMENT_VERTEX: | ||||
| if (geom->type == Geometry::MESH) { | if (geom->type == Geometry::MESH || geom->type == Geometry::VOLUME) { | ||||
| Mesh *mesh = static_cast<Mesh *>(geom); | Mesh *mesh = static_cast<Mesh *>(geom); | ||||
| size = mesh->verts.size() + mesh->num_ngons; | size = mesh->verts.size() + mesh->num_ngons; | ||||
| if (prim == ATTR_PRIM_SUBD) { | if (prim == ATTR_PRIM_SUBD) { | ||||
| size -= mesh->num_subd_verts; | size -= mesh->num_subd_verts; | ||||
| } | } | ||||
| } | } | ||||
| break; | break; | ||||
| case ATTR_ELEMENT_VERTEX_MOTION: | case ATTR_ELEMENT_VERTEX_MOTION: | ||||
| if (geom->type == Geometry::MESH) { | if (geom->type == Geometry::MESH) { | ||||
| Mesh *mesh = static_cast<Mesh *>(geom); | Mesh *mesh = static_cast<Mesh *>(geom); | ||||
| size = (mesh->verts.size() + mesh->num_ngons) * (mesh->motion_steps - 1); | size = (mesh->verts.size() + mesh->num_ngons) * (mesh->motion_steps - 1); | ||||
| if (prim == ATTR_PRIM_SUBD) { | if (prim == ATTR_PRIM_SUBD) { | ||||
| size -= mesh->num_subd_verts * (mesh->motion_steps - 1); | size -= mesh->num_subd_verts * (mesh->motion_steps - 1); | ||||
| } | } | ||||
| } | } | ||||
| break; | break; | ||||
| case ATTR_ELEMENT_FACE: | case ATTR_ELEMENT_FACE: | ||||
| if (geom->type == Geometry::MESH) { | if (geom->type == Geometry::MESH || geom->type == Geometry::VOLUME) { | ||||
| Mesh *mesh = static_cast<Mesh *>(geom); | Mesh *mesh = static_cast<Mesh *>(geom); | ||||
| if (prim == ATTR_PRIM_GEOMETRY) { | if (prim == ATTR_PRIM_GEOMETRY) { | ||||
| size = mesh->num_triangles(); | size = mesh->num_triangles(); | ||||
| } | } | ||||
| else { | else { | ||||
| size = mesh->subd_faces.size() + mesh->num_ngons; | size = mesh->subd_faces.size() + mesh->num_ngons; | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 283 Lines • ▼ Show 20 Lines | switch (std) { | ||||
| attr = add(name, TypeDesc::TypeFloat, ATTR_ELEMENT_FACE); | attr = add(name, TypeDesc::TypeFloat, ATTR_ELEMENT_FACE); | ||||
| break; | break; | ||||
| case ATTR_STD_PTEX_UV: | case ATTR_STD_PTEX_UV: | ||||
| attr = add(name, TypeDesc::TypePoint, ATTR_ELEMENT_VERTEX); | attr = add(name, TypeDesc::TypePoint, ATTR_ELEMENT_VERTEX); | ||||
| break; | break; | ||||
| case ATTR_STD_GENERATED_TRANSFORM: | case ATTR_STD_GENERATED_TRANSFORM: | ||||
| attr = add(name, TypeDesc::TypeMatrix, ATTR_ELEMENT_MESH); | attr = add(name, TypeDesc::TypeMatrix, ATTR_ELEMENT_MESH); | ||||
| break; | break; | ||||
| case ATTR_STD_POINTINESS: | |||||
| attr = add(name, TypeDesc::TypeFloat, ATTR_ELEMENT_VERTEX); | |||||
| break; | |||||
| case ATTR_STD_RANDOM_PER_ISLAND: | |||||
| attr = add(name, TypeDesc::TypeFloat, ATTR_ELEMENT_FACE); | |||||
| break; | |||||
| default: | |||||
| assert(0); | |||||
| break; | |||||
| } | |||||
| } | |||||
| else if (geometry->type == Geometry::VOLUME) { | |||||
| switch (std) { | |||||
| case ATTR_STD_VERTEX_NORMAL: | |||||
| attr = add(name, TypeDesc::TypeNormal, ATTR_ELEMENT_VERTEX); | |||||
| break; | |||||
| case ATTR_STD_FACE_NORMAL: | |||||
| attr = add(name, TypeDesc::TypeNormal, ATTR_ELEMENT_FACE); | |||||
| break; | |||||
| case ATTR_STD_VOLUME_DENSITY: | case ATTR_STD_VOLUME_DENSITY: | ||||
| case ATTR_STD_VOLUME_FLAME: | case ATTR_STD_VOLUME_FLAME: | ||||
| case ATTR_STD_VOLUME_HEAT: | case ATTR_STD_VOLUME_HEAT: | ||||
| case ATTR_STD_VOLUME_TEMPERATURE: | case ATTR_STD_VOLUME_TEMPERATURE: | ||||
| attr = add(name, TypeDesc::TypeFloat, ATTR_ELEMENT_VOXEL); | attr = add(name, TypeDesc::TypeFloat, ATTR_ELEMENT_VOXEL); | ||||
| break; | break; | ||||
| case ATTR_STD_VOLUME_COLOR: | case ATTR_STD_VOLUME_COLOR: | ||||
| attr = add(name, TypeDesc::TypeColor, ATTR_ELEMENT_VOXEL); | attr = add(name, TypeDesc::TypeColor, ATTR_ELEMENT_VOXEL); | ||||
| break; | break; | ||||
| case ATTR_STD_VOLUME_VELOCITY: | case ATTR_STD_VOLUME_VELOCITY: | ||||
| attr = add(name, TypeDesc::TypeVector, ATTR_ELEMENT_VOXEL); | attr = add(name, TypeDesc::TypeVector, ATTR_ELEMENT_VOXEL); | ||||
| break; | break; | ||||
| case ATTR_STD_POINTINESS: | |||||
| attr = add(name, TypeDesc::TypeFloat, ATTR_ELEMENT_VERTEX); | |||||
| break; | |||||
| case ATTR_STD_RANDOM_PER_ISLAND: | |||||
| attr = add(name, TypeDesc::TypeFloat, ATTR_ELEMENT_FACE); | |||||
| break; | |||||
| default: | default: | ||||
| std::cerr << "ATTR : " << static_cast<int>(std) << '\n'; | |||||
| assert(0); | assert(0); | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| else if (geometry->type == Geometry::HAIR) { | else if (geometry->type == Geometry::HAIR) { | ||||
| switch (std) { | switch (std) { | ||||
| case ATTR_STD_UV: | case ATTR_STD_UV: | ||||
| attr = add(name, TypeFloat2, ATTR_ELEMENT_CURVE); | attr = add(name, TypeFloat2, ATTR_ELEMENT_CURVE); | ||||
| ▲ Show 20 Lines • Show All 242 Lines • Show Last 20 Lines | |||||