Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/draw_hair.c
| Show First 20 Lines • Show All 124 Lines • ▼ Show 20 Lines | |||||
| static void drw_hair_particle_cache_update_compute(ParticleHairCache *cache, const int subdiv) | static void drw_hair_particle_cache_update_compute(ParticleHairCache *cache, const int subdiv) | ||||
| { | { | ||||
| const int strands_len = cache->strands_len; | const int strands_len = cache->strands_len; | ||||
| const int final_points_len = cache->final[subdiv].strands_res * strands_len; | const int final_points_len = cache->final[subdiv].strands_res * strands_len; | ||||
| if (final_points_len > 0) { | if (final_points_len > 0) { | ||||
| GPUShader *shader = hair_refine_shader_get(PART_REFINE_CATMULL_ROM); | GPUShader *shader = hair_refine_shader_get(PART_REFINE_CATMULL_ROM); | ||||
| DRWShadingGroup *shgrp = DRW_shgroup_create(shader, g_tf_pass); | DRWShadingGroup *shgrp = DRW_shgroup_create(shader, g_tf_pass); | ||||
| drw_hair_particle_cache_shgrp_attach_resources(shgrp, cache, subdiv); | drw_hair_particle_cache_shgrp_attach_resources(shgrp, cache, subdiv); | ||||
| DRW_shgroup_vertex_buffer(shgrp, "hairPointOutputBuffer", cache->final[subdiv].proc_buf); | DRW_shgroup_vertex_buffer(shgrp, "posTime", cache->final[subdiv].proc_buf); | ||||
| const int max_strands_per_call = GPU_max_work_group_count(0); | const int max_strands_per_call = GPU_max_work_group_count(0); | ||||
| int strands_start = 0; | int strands_start = 0; | ||||
| while (strands_start < strands_len) { | while (strands_start < strands_len) { | ||||
| int batch_strands_len = MIN2(strands_len - strands_start, max_strands_per_call); | int batch_strands_len = MIN2(strands_len - strands_start, max_strands_per_call); | ||||
| DRWShadingGroup *subgroup = DRW_shgroup_create_sub(shgrp); | DRWShadingGroup *subgroup = DRW_shgroup_create_sub(shgrp); | ||||
| DRW_shgroup_uniform_int_copy(subgroup, "hairStrandOffset", strands_start); | DRW_shgroup_uniform_int_copy(subgroup, "hairStrandOffset", strands_start); | ||||
| DRW_shgroup_call_compute(subgroup, batch_strands_len, cache->final[subdiv].strands_res, 1); | DRW_shgroup_call_compute(subgroup, batch_strands_len, cache->final[subdiv].strands_res, 1); | ||||
| ▲ Show 20 Lines • Show All 277 Lines • Show Last 20 Lines | |||||