Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/scene/mesh.cpp
| Show First 20 Lines • Show All 687 Lines • ▼ Show 20 Lines | void Mesh::pack_shaders(Scene *scene, uint *tri_shader) | ||||
| uint shader_id = 0; | uint shader_id = 0; | ||||
| uint last_shader = -1; | uint last_shader = -1; | ||||
| bool last_smooth = false; | bool last_smooth = false; | ||||
| size_t triangles_size = num_triangles(); | size_t triangles_size = num_triangles(); | ||||
| int *shader_ptr = shader.data(); | int *shader_ptr = shader.data(); | ||||
| for (size_t i = 0; i < triangles_size; i++) { | for (size_t i = 0; i < triangles_size; i++) { | ||||
| if (shader_ptr[i] != last_shader || last_smooth != smooth[i]) { | const uint new_shader = shader_ptr ? shader_ptr[i] : -1; | ||||
| last_shader = shader_ptr[i]; | const bool new_smooth = i < smooth.size() ? smooth[i] : last_smooth; | ||||
| last_smooth = smooth[i]; | |||||
| if (new_shader != last_shader || last_smooth != new_smooth) { | |||||
| last_shader = new_shader; | |||||
| last_smooth = new_smooth; | |||||
| Shader *shader = (last_shader < used_shaders.size()) ? | Shader *shader = (last_shader < used_shaders.size()) ? | ||||
| static_cast<Shader *>(used_shaders[last_shader]) : | static_cast<Shader *>(used_shaders[last_shader]) : | ||||
| 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; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 108 Lines • Show Last 20 Lines | |||||