Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/scene/geometry.cpp
| Show First 20 Lines • Show All 612 Lines • ▼ Show 20 Lines | else if (mattr->element == ATTR_ELEMENT_CORNER_BYTE) { | ||||
| uchar4 *data = mattr->data_uchar4(); | uchar4 *data = mattr->data_uchar4(); | ||||
| offset = attr_uchar4_offset; | offset = attr_uchar4_offset; | ||||
| assert(attr_uchar4.size() >= offset + size); | assert(attr_uchar4.size() >= offset + size); | ||||
| if (mattr->modified) { | if (mattr->modified) { | ||||
| for (size_t k = 0; k < size; k++) { | for (size_t k = 0; k < size; k++) { | ||||
| attr_uchar4[offset + k] = data[k]; | attr_uchar4[offset + k] = data[k]; | ||||
| } | } | ||||
| attr_uchar4.tag_modified(); | |||||
| } | } | ||||
| attr_uchar4_offset += size; | attr_uchar4_offset += size; | ||||
| } | } | ||||
| else if (mattr->type == TypeDesc::TypeFloat) { | else if (mattr->type == TypeDesc::TypeFloat) { | ||||
| float *data = mattr->data_float(); | float *data = mattr->data_float(); | ||||
| offset = attr_float_offset; | offset = attr_float_offset; | ||||
| assert(attr_float.size() >= offset + size); | assert(attr_float.size() >= offset + size); | ||||
| if (mattr->modified) { | if (mattr->modified) { | ||||
| for (size_t k = 0; k < size; k++) { | for (size_t k = 0; k < size; k++) { | ||||
| attr_float[offset + k] = data[k]; | attr_float[offset + k] = data[k]; | ||||
| } | } | ||||
| attr_float.tag_modified(); | |||||
| } | } | ||||
| attr_float_offset += size; | attr_float_offset += size; | ||||
| } | } | ||||
| else if (mattr->type == TypeFloat2) { | else if (mattr->type == TypeFloat2) { | ||||
| float2 *data = mattr->data_float2(); | float2 *data = mattr->data_float2(); | ||||
| offset = attr_float2_offset; | offset = attr_float2_offset; | ||||
| assert(attr_float2.size() >= offset + size); | assert(attr_float2.size() >= offset + size); | ||||
| if (mattr->modified) { | if (mattr->modified) { | ||||
| for (size_t k = 0; k < size; k++) { | for (size_t k = 0; k < size; k++) { | ||||
| attr_float2[offset + k] = data[k]; | attr_float2[offset + k] = data[k]; | ||||
| } | } | ||||
| attr_float2.tag_modified(); | |||||
| } | } | ||||
| attr_float2_offset += size; | attr_float2_offset += size; | ||||
| } | } | ||||
| else if (mattr->type == TypeDesc::TypeMatrix) { | else if (mattr->type == TypeDesc::TypeMatrix) { | ||||
| Transform *tfm = mattr->data_transform(); | Transform *tfm = mattr->data_transform(); | ||||
| offset = attr_float4_offset; | offset = attr_float4_offset; | ||||
| assert(attr_float4.size() >= offset + size * 3); | assert(attr_float4.size() >= offset + size * 3); | ||||
| if (mattr->modified) { | if (mattr->modified) { | ||||
| for (size_t k = 0; k < size * 3; k++) { | for (size_t k = 0; k < size * 3; k++) { | ||||
| attr_float4[offset + k] = (&tfm->x)[k]; | attr_float4[offset + k] = (&tfm->x)[k]; | ||||
| } | } | ||||
| attr_float4.tag_modified(); | |||||
| } | } | ||||
| attr_float4_offset += size * 3; | attr_float4_offset += size * 3; | ||||
| } | } | ||||
| else if (mattr->type == TypeFloat4 || mattr->type == TypeRGBA) { | else if (mattr->type == TypeFloat4 || mattr->type == TypeRGBA) { | ||||
| float4 *data = mattr->data_float4(); | float4 *data = mattr->data_float4(); | ||||
| offset = attr_float4_offset; | offset = attr_float4_offset; | ||||
| assert(attr_float4.size() >= offset + size); | assert(attr_float4.size() >= offset + size); | ||||
| if (mattr->modified) { | if (mattr->modified) { | ||||
| for (size_t k = 0; k < size; k++) { | for (size_t k = 0; k < size; k++) { | ||||
| attr_float4[offset + k] = data[k]; | attr_float4[offset + k] = data[k]; | ||||
| } | } | ||||
| attr_float4.tag_modified(); | |||||
| } | } | ||||
| attr_float4_offset += size; | attr_float4_offset += size; | ||||
| } | } | ||||
| else { | else { | ||||
| float3 *data = mattr->data_float3(); | float3 *data = mattr->data_float3(); | ||||
| offset = attr_float3_offset; | offset = attr_float3_offset; | ||||
| assert(attr_float3.size() >= offset + size); | assert(attr_float3.size() >= offset + size); | ||||
| if (mattr->modified) { | if (mattr->modified) { | ||||
| for (size_t k = 0; k < size; k++) { | for (size_t k = 0; k < size; k++) { | ||||
| attr_float3[offset + k] = data[k]; | attr_float3[offset + k] = data[k]; | ||||
| } | } | ||||
| attr_float3.tag_modified(); | |||||
| } | } | ||||
| attr_float3_offset += size; | attr_float3_offset += size; | ||||
| } | } | ||||
| /* mesh vertex/curve index is global, not per object, so we sneak | /* mesh vertex/curve index is global, not per object, so we sneak | ||||
| * a correction for that in here */ | * a correction for that in here */ | ||||
| if (geom->is_mesh()) { | if (geom->is_mesh()) { | ||||
| Mesh *mesh = static_cast<Mesh *>(geom); | Mesh *mesh = static_cast<Mesh *>(geom); | ||||
| ▲ Show 20 Lines • Show All 1,525 Lines • Show Last 20 Lines | |||||