Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/physics/particle_edit.c
| Show First 20 Lines • Show All 843 Lines • ▼ Show 20 Lines | static void foreach_mouse_hit_key(PEData *data, ForHitKeyMatFunc func, int selected) | ||||
| KeyIterData iter_data; | KeyIterData iter_data; | ||||
| iter_data.data = data; | iter_data.data = data; | ||||
| iter_data.edit = edit; | iter_data.edit = edit; | ||||
| iter_data.selected = selected; | iter_data.selected = selected; | ||||
| iter_data.func = func; | iter_data.func = func; | ||||
| TaskParallelSettings settings; | TaskParallelSettings settings; | ||||
| BLI_parallel_range_settings_defaults(&settings); | BLI_parallel_range_settings_defaults(&settings); | ||||
| settings.scheduling_mode = TASK_SCHEDULING_DYNAMIC; | |||||
| BLI_task_parallel_range(0, edit->totpoint, &iter_data, foreach_mouse_hit_key_iter, &settings); | BLI_task_parallel_range(0, edit->totpoint, &iter_data, foreach_mouse_hit_key_iter, &settings); | ||||
| } | } | ||||
| static void foreach_selected_point(PEData *data, ForPointFunc func) | static void foreach_selected_point(PEData *data, ForPointFunc func) | ||||
| { | { | ||||
| PTCacheEdit *edit = data->edit; | PTCacheEdit *edit = data->edit; | ||||
| POINT_P; | POINT_P; | ||||
| ▲ Show 20 Lines • Show All 363 Lines • ▼ Show 20 Lines | static void pe_deflect_emitter(Scene *scene, Object *ob, PTCacheEdit *edit) | ||||
| iter_data.object = ob; | iter_data.object = ob; | ||||
| iter_data.psys = psys; | iter_data.psys = psys; | ||||
| iter_data.edit = edit; | iter_data.edit = edit; | ||||
| iter_data.dist = dist; | iter_data.dist = dist; | ||||
| iter_data.emitterdist = pset->emitterdist; | iter_data.emitterdist = pset->emitterdist; | ||||
| TaskParallelSettings settings; | TaskParallelSettings settings; | ||||
| BLI_parallel_range_settings_defaults(&settings); | BLI_parallel_range_settings_defaults(&settings); | ||||
| settings.scheduling_mode = TASK_SCHEDULING_DYNAMIC; | |||||
| BLI_task_parallel_range(0, edit->totpoint, &iter_data, deflect_emitter_iter, &settings); | BLI_task_parallel_range(0, edit->totpoint, &iter_data, deflect_emitter_iter, &settings); | ||||
| } | } | ||||
| typedef struct ApplyLengthsIterData { | typedef struct ApplyLengthsIterData { | ||||
| PTCacheEdit *edit; | PTCacheEdit *edit; | ||||
| } ApplyLengthsIterData; | } ApplyLengthsIterData; | ||||
| static void apply_lengths_iter(void *__restrict iter_data_v, | static void apply_lengths_iter(void *__restrict iter_data_v, | ||||
| Show All 32 Lines | if (edit->psys && edit->psys->flag & PSYS_GLOBAL_HAIR) { | ||||
| return; | return; | ||||
| } | } | ||||
| ApplyLengthsIterData iter_data; | ApplyLengthsIterData iter_data; | ||||
| iter_data.edit = edit; | iter_data.edit = edit; | ||||
| TaskParallelSettings settings; | TaskParallelSettings settings; | ||||
| BLI_parallel_range_settings_defaults(&settings); | BLI_parallel_range_settings_defaults(&settings); | ||||
| settings.scheduling_mode = TASK_SCHEDULING_DYNAMIC; | |||||
| BLI_task_parallel_range(0, edit->totpoint, &iter_data, apply_lengths_iter, &settings); | BLI_task_parallel_range(0, edit->totpoint, &iter_data, apply_lengths_iter, &settings); | ||||
| } | } | ||||
| typedef struct IterateLengthsIterData { | typedef struct IterateLengthsIterData { | ||||
| PTCacheEdit *edit; | PTCacheEdit *edit; | ||||
| ParticleEditSettings *pset; | ParticleEditSettings *pset; | ||||
| } IterateLengthsIterData; | } IterateLengthsIterData; | ||||
| ▲ Show 20 Lines • Show All 58 Lines • ▼ Show 20 Lines | static void pe_iterate_lengths(Scene *scene, PTCacheEdit *edit) | ||||
| } | } | ||||
| IterateLengthsIterData iter_data; | IterateLengthsIterData iter_data; | ||||
| iter_data.edit = edit; | iter_data.edit = edit; | ||||
| iter_data.pset = pset; | iter_data.pset = pset; | ||||
| TaskParallelSettings settings; | TaskParallelSettings settings; | ||||
| BLI_parallel_range_settings_defaults(&settings); | BLI_parallel_range_settings_defaults(&settings); | ||||
| settings.scheduling_mode = TASK_SCHEDULING_DYNAMIC; | |||||
| BLI_task_parallel_range(0, edit->totpoint, &iter_data, iterate_lengths_iter, &settings); | BLI_task_parallel_range(0, edit->totpoint, &iter_data, iterate_lengths_iter, &settings); | ||||
| } | } | ||||
| /* set current distances to be kept between neighboring keys */ | /* set current distances to be kept between neighboring keys */ | ||||
| void recalc_lengths(PTCacheEdit *edit) | void recalc_lengths(PTCacheEdit *edit) | ||||
| { | { | ||||
| POINT_P; | POINT_P; | ||||
| KEY_K; | KEY_K; | ||||
| ▲ Show 20 Lines • Show All 2,742 Lines • ▼ Show 20 Lines | static void brush_add_count_iter(void *__restrict iter_data_v, | ||||
| const short size = iter_data->size; | const short size = iter_data->size; | ||||
| const short size2 = size * size; | const short size2 = size * size; | ||||
| float dmx, dmy; | float dmx, dmy; | ||||
| if (number > 1) { | if (number > 1) { | ||||
| dmx = size; | dmx = size; | ||||
| dmy = size; | dmy = size; | ||||
| if (tls->rng == NULL) { | if (tls->rng == NULL) { | ||||
| tls->rng = BLI_rng_new_srandom(psys->seed + data->mval[0] + data->mval[1] + | tls->rng = BLI_rng_new_srandom(psys->seed + data->mval[0] + data->mval[1] + | ||||
| tls_v->thread_id); | BLI_task_parallel_thread_id(tls_v)); | ||||
| } | } | ||||
| /* rejection sampling to get points in circle */ | /* rejection sampling to get points in circle */ | ||||
| while (dmx * dmx + dmy * dmy > size2) { | while (dmx * dmx + dmy * dmy > size2) { | ||||
| dmx = (2.0f * BLI_rng_get_float(tls->rng) - 1.0f) * size; | dmx = (2.0f * BLI_rng_get_float(tls->rng) - 1.0f) * size; | ||||
| dmy = (2.0f * BLI_rng_get_float(tls->rng) - 1.0f) * size; | dmy = (2.0f * BLI_rng_get_float(tls->rng) - 1.0f) * size; | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| ▲ Show 20 Lines • Show All 128 Lines • ▼ Show 20 Lines | static int brush_add(const bContext *C, PEData *data, short number) | ||||
| iter_data.size = size; | iter_data.size = size; | ||||
| iter_data.add_pars = add_pars; | iter_data.add_pars = add_pars; | ||||
| copy_m4_m4(iter_data.imat, imat); | copy_m4_m4(iter_data.imat, imat); | ||||
| BrushAddCountIterTLSData tls = {NULL}; | BrushAddCountIterTLSData tls = {NULL}; | ||||
| TaskParallelSettings settings; | TaskParallelSettings settings; | ||||
| BLI_parallel_range_settings_defaults(&settings); | BLI_parallel_range_settings_defaults(&settings); | ||||
| settings.scheduling_mode = TASK_SCHEDULING_DYNAMIC; | |||||
| settings.userdata_chunk = &tls; | settings.userdata_chunk = &tls; | ||||
| settings.userdata_chunk_size = sizeof(BrushAddCountIterTLSData); | settings.userdata_chunk_size = sizeof(BrushAddCountIterTLSData); | ||||
| settings.func_reduce = brush_add_count_iter_reduce; | settings.func_reduce = brush_add_count_iter_reduce; | ||||
| settings.func_free = brush_add_count_iter_free; | settings.func_free = brush_add_count_iter_free; | ||||
| BLI_task_parallel_range(0, number, &iter_data, brush_add_count_iter, &settings); | BLI_task_parallel_range(0, number, &iter_data, brush_add_count_iter, &settings); | ||||
| /* Convert add_parse to a dense array, where all new particles are in the | /* Convert add_parse to a dense array, where all new particles are in the | ||||
| * beginning of the array. | * beginning of the array. | ||||
| ▲ Show 20 Lines • Show All 1,244 Lines • Show Last 20 Lines | |||||