Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/scene/mesh.cpp
| Show First 20 Lines • Show All 701 Lines • ▼ Show 20 Lines | if (shader_ptr[i] != last_shader || last_smooth != smooth[i]) { | ||||
| scene->default_surface; | scene->default_surface; | ||||
| shader_id = scene->shader_manager->get_shader_id(shader, last_smooth); | shader_id = scene->shader_manager->get_shader_id(shader, last_smooth); | ||||
| } | } | ||||
| tri_shader[i] = shader_id; | tri_shader[i] = shader_id; | ||||
| } | } | ||||
| } | } | ||||
| void Mesh::pack_normals(float4 *vnormal) | void Mesh::pack_normals(packed_float3 *vnormal) | ||||
| { | { | ||||
| Attribute *attr_vN = attributes.find(ATTR_STD_VERTEX_NORMAL); | Attribute *attr_vN = attributes.find(ATTR_STD_VERTEX_NORMAL); | ||||
| if (attr_vN == NULL) { | if (attr_vN == NULL) { | ||||
| /* Happens on objects with just hair. */ | /* Happens on objects with just hair. */ | ||||
| return; | return; | ||||
| } | } | ||||
| bool do_transform = transform_applied; | bool do_transform = transform_applied; | ||||
| Transform ntfm = transform_normal; | Transform ntfm = transform_normal; | ||||
| float3 *vN = attr_vN->data_float3(); | float3 *vN = attr_vN->data_float3(); | ||||
| size_t verts_size = verts.size(); | size_t verts_size = verts.size(); | ||||
| for (size_t i = 0; i < verts_size; i++) { | for (size_t i = 0; i < verts_size; i++) { | ||||
| float3 vNi = vN[i]; | float3 vNi = vN[i]; | ||||
| if (do_transform) | if (do_transform) | ||||
| vNi = safe_normalize(transform_direction(&ntfm, vNi)); | vNi = safe_normalize(transform_direction(&ntfm, vNi)); | ||||
| vnormal[i] = make_float4(vNi.x, vNi.y, vNi.z, 0.0f); | vnormal[i] = make_float3(vNi.x, vNi.y, vNi.z); | ||||
| } | } | ||||
| } | } | ||||
| void Mesh::pack_verts(float4 *tri_verts, uint4 *tri_vindex, uint *tri_patch, float2 *tri_patch_uv) | void Mesh::pack_verts(packed_float3 *tri_verts, | ||||
| uint4 *tri_vindex, | |||||
| uint *tri_patch, | |||||
| float2 *tri_patch_uv) | |||||
| { | { | ||||
| size_t verts_size = verts.size(); | size_t verts_size = verts.size(); | ||||
| if (verts_size && get_num_subd_faces()) { | if (verts_size && get_num_subd_faces()) { | ||||
| float2 *vert_patch_uv_ptr = vert_patch_uv.data(); | float2 *vert_patch_uv_ptr = vert_patch_uv.data(); | ||||
| for (size_t i = 0; i < verts_size; i++) { | for (size_t i = 0; i < verts_size; i++) { | ||||
| tri_patch_uv[i] = vert_patch_uv_ptr[i]; | tri_patch_uv[i] = vert_patch_uv_ptr[i]; | ||||
| } | } | ||||
| } | } | ||||
| size_t triangles_size = num_triangles(); | size_t triangles_size = num_triangles(); | ||||
| for (size_t i = 0; i < triangles_size; i++) { | for (size_t i = 0; i < triangles_size; i++) { | ||||
| const Triangle t = get_triangle(i); | const Triangle t = get_triangle(i); | ||||
| tri_vindex[i] = make_uint4( | tri_vindex[i] = make_uint4( | ||||
| t.v[0] + vert_offset, t.v[1] + vert_offset, t.v[2] + vert_offset, 3 * (prim_offset + i)); | t.v[0] + vert_offset, t.v[1] + vert_offset, t.v[2] + vert_offset, 3 * (prim_offset + i)); | ||||
| tri_patch[i] = (!get_num_subd_faces()) ? -1 : (triangle_patch[i] * 8 + patch_offset); | tri_patch[i] = (!get_num_subd_faces()) ? -1 : (triangle_patch[i] * 8 + patch_offset); | ||||
| tri_verts[i * 3] = float3_to_float4(verts[t.v[0]]); | tri_verts[i * 3] = verts[t.v[0]]; | ||||
| tri_verts[i * 3 + 1] = float3_to_float4(verts[t.v[1]]); | tri_verts[i * 3 + 1] = verts[t.v[1]]; | ||||
| tri_verts[i * 3 + 2] = float3_to_float4(verts[t.v[2]]); | tri_verts[i * 3 + 2] = verts[t.v[2]]; | ||||
| } | } | ||||
| } | } | ||||
| void Mesh::pack_patches(uint *patch_data) | void Mesh::pack_patches(uint *patch_data) | ||||
| { | { | ||||
| size_t num_faces = get_num_subd_faces(); | size_t num_faces = get_num_subd_faces(); | ||||
| int ngons = 0; | int ngons = 0; | ||||
| ▲ Show 20 Lines • Show All 47 Lines • Show Last 20 Lines | |||||