Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/draw_manager.c
| Show First 20 Lines • Show All 126 Lines • ▼ Show 20 Lines | |||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name Threading | /** \name Threading | ||||
| * \{ */ | * \{ */ | ||||
| static void drw_task_graph_init(void) | static void drw_task_graph_init(void) | ||||
| { | { | ||||
| BLI_assert(DST.task_graph == NULL); | BLI_assert(DST.task_graph == NULL); | ||||
| DST.task_graph = BLI_task_graph_create(); | DST.task_graph = BLI_task_graph_create(); | ||||
| DST.delayed_extraction = BLI_gset_ptr_new(__func__); | |||||
| } | } | ||||
| static void drw_task_graph_deinit(void) | static void drw_task_graph_deinit(void) | ||||
| { | { | ||||
| BLI_task_graph_work_and_wait(DST.task_graph); | BLI_task_graph_work_and_wait(DST.task_graph); | ||||
| BLI_gset_free(DST.delayed_extraction, (void (*)(void *key))drw_batch_cache_generate_requested); | |||||
| DST.delayed_extraction = NULL; | |||||
| BLI_task_graph_work_and_wait(DST.task_graph); | |||||
| BLI_task_graph_free(DST.task_graph); | BLI_task_graph_free(DST.task_graph); | ||||
| DST.task_graph = NULL; | DST.task_graph = NULL; | ||||
| } | } | ||||
| /* \} */ | /* \} */ | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name Settings | /** \name Settings | ||||
| * \{ */ | * \{ */ | ||||
| ▲ Show 20 Lines • Show All 1,333 Lines • ▼ Show 20 Lines | if (do_populate_loop) { | ||||
| drw_engines_cache_populate(ob); | drw_engines_cache_populate(ob); | ||||
| } | } | ||||
| DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; | DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; | ||||
| } | } | ||||
| drw_duplidata_free(); | drw_duplidata_free(); | ||||
| drw_engines_cache_finish(); | drw_engines_cache_finish(); | ||||
| drw_task_graph_deinit(); | |||||
| DRW_render_instance_buffer_finish(); | DRW_render_instance_buffer_finish(); | ||||
| #ifdef USE_PROFILE | #ifdef USE_PROFILE | ||||
| double *cache_time = GPU_viewport_cache_time_get(DST.viewport); | double *cache_time = GPU_viewport_cache_time_get(DST.viewport); | ||||
| PROFILE_END_UPDATE(*cache_time, stime); | PROFILE_END_UPDATE(*cache_time, stime); | ||||
| #endif | #endif | ||||
| } | } | ||||
| drw_task_graph_deinit(); | |||||
| DRW_stats_begin(); | DRW_stats_begin(); | ||||
| GPU_framebuffer_bind(DST.default_framebuffer); | GPU_framebuffer_bind(DST.default_framebuffer); | ||||
| /* Start Drawing */ | /* Start Drawing */ | ||||
| DRW_state_reset(); | DRW_state_reset(); | ||||
| GPU_framebuffer_bind(DST.default_framebuffer); | GPU_framebuffer_bind(DST.default_framebuffer); | ||||
| ▲ Show 20 Lines • Show All 781 Lines • ▼ Show 20 Lines | DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN (DST.draw_ctx.depsgraph, ob) { | ||||
| drw_duplidata_load(DST.dupli_source); | drw_duplidata_load(DST.dupli_source); | ||||
| drw_engines_cache_populate(ob); | drw_engines_cache_populate(ob); | ||||
| } | } | ||||
| DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; | DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; | ||||
| drw_duplidata_free(); | drw_duplidata_free(); | ||||
| drw_engines_cache_finish(); | drw_engines_cache_finish(); | ||||
| drw_task_graph_deinit(); | |||||
| DRW_render_instance_buffer_finish(); | DRW_render_instance_buffer_finish(); | ||||
| } | } | ||||
| drw_task_graph_deinit(); | |||||
| /* Start Drawing */ | /* Start Drawing */ | ||||
| DRW_state_reset(); | DRW_state_reset(); | ||||
| DRW_hair_update(); | DRW_hair_update(); | ||||
| drw_engines_draw_scene(); | drw_engines_draw_scene(); | ||||
| ▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | drw_engines_init(); | ||||
| Object **obj = &sel_ctx->objects[0]; | Object **obj = &sel_ctx->objects[0]; | ||||
| for (uint remaining = sel_ctx->objects_len; remaining--; obj++) { | for (uint remaining = sel_ctx->objects_len; remaining--; obj++) { | ||||
| Object *obj_eval = DEG_get_evaluated_object(depsgraph, *obj); | Object *obj_eval = DEG_get_evaluated_object(depsgraph, *obj); | ||||
| drw_engines_cache_populate(obj_eval); | drw_engines_cache_populate(obj_eval); | ||||
| } | } | ||||
| drw_engines_cache_finish(); | drw_engines_cache_finish(); | ||||
| drw_task_graph_deinit(); | |||||
| #if 0 /* This is a workaround to a nasty bug that seems to be a nasty driver bug. (See T69377) */ | #if 0 /* This is a workaround to a nasty bug that seems to be a nasty driver bug. (See T69377) */ | ||||
| DRW_render_instance_buffer_finish(); | DRW_render_instance_buffer_finish(); | ||||
| #else | #else | ||||
| DST.buffer_finish_called = true; | DST.buffer_finish_called = true; | ||||
| // DRW_instance_buffer_finish(DST.idatalist); | // DRW_instance_buffer_finish(DST.idatalist); | ||||
| drw_resource_buffer_finish(DST.vmempool); | drw_resource_buffer_finish(DST.vmempool); | ||||
| #endif | #endif | ||||
| } | } | ||||
| drw_task_graph_deinit(); | |||||
| /* Start Drawing */ | /* Start Drawing */ | ||||
| DRW_state_reset(); | DRW_state_reset(); | ||||
| drw_engines_draw_scene(); | drw_engines_draw_scene(); | ||||
| DRW_state_reset(); | DRW_state_reset(); | ||||
| drw_engines_disable(); | drw_engines_disable(); | ||||
| ▲ Show 20 Lines • Show All 475 Lines • Show Last 20 Lines | |||||