Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/draw_manager.c
| Show First 20 Lines • Show All 1,209 Lines • ▼ Show 20 Lines | void DRW_notify_view_update(const DRWUpdateContext *update_ctx) | ||||
| Depsgraph *depsgraph = update_ctx->depsgraph; | Depsgraph *depsgraph = update_ctx->depsgraph; | ||||
| Scene *scene = update_ctx->scene; | Scene *scene = update_ctx->scene; | ||||
| ViewLayer *view_layer = update_ctx->view_layer; | ViewLayer *view_layer = update_ctx->view_layer; | ||||
| const bool gpencil_engine_needed = drw_gpencil_engine_needed(depsgraph, v3d); | const bool gpencil_engine_needed = drw_gpencil_engine_needed(depsgraph, v3d); | ||||
| /* Separate update for each stereo view. */ | /* Separate update for each stereo view. */ | ||||
| for (int view = 0; view < 2; view++) { | for (int view = 0; view < 2; view++) { | ||||
| GPUViewport *viewport = WM_draw_region_get_viewport(region, view); | GPUViewport *viewport = WM_draw_region_get_viewport(region); | ||||
| if (!viewport) { | if (!viewport) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| /* XXX Really nasty locking. But else this could | /* XXX Really nasty locking. But else this could | ||||
| * be executed by the material previews thread | * be executed by the material previews thread | ||||
| * while rendering a viewport. */ | * while rendering a viewport. */ | ||||
| BLI_ticket_mutex_lock(DST.gl_context_mutex); | BLI_ticket_mutex_lock(DST.gl_context_mutex); | ||||
| /* Reset before using it. */ | /* Reset before using it. */ | ||||
| drw_state_prepare_clean_for_draw(&DST); | drw_state_prepare_clean_for_draw(&DST); | ||||
| DST.viewport = viewport; | DST.viewport = viewport; | ||||
| GPU_viewport_active_view_set(viewport, view); | |||||
| DST.draw_ctx = (DRWContextState){ | DST.draw_ctx = (DRWContextState){ | ||||
| .region = region, | .region = region, | ||||
| .rv3d = rv3d, | .rv3d = rv3d, | ||||
| .v3d = v3d, | .v3d = v3d, | ||||
| .scene = scene, | .scene = scene, | ||||
| .view_layer = view_layer, | .view_layer = view_layer, | ||||
| .obact = OBACT(view_layer), | .obact = OBACT(view_layer), | ||||
| .engine_type = engine_type, | .engine_type = engine_type, | ||||
| ▲ Show 20 Lines • Show All 168 Lines • ▼ Show 20 Lines | |||||
| { | { | ||||
| Scene *scene = DEG_get_evaluated_scene(depsgraph); | Scene *scene = DEG_get_evaluated_scene(depsgraph); | ||||
| ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph); | ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph); | ||||
| RegionView3D *rv3d = region->regiondata; | RegionView3D *rv3d = region->regiondata; | ||||
| DST.draw_ctx.evil_C = evil_C; | DST.draw_ctx.evil_C = evil_C; | ||||
| DST.viewport = viewport; | DST.viewport = viewport; | ||||
| /* Setup viewport */ | /* Setup viewport */ | ||||
| DST.draw_ctx = (DRWContextState){ | DST.draw_ctx = (DRWContextState){ | ||||
| .region = region, | .region = region, | ||||
| .rv3d = rv3d, | .rv3d = rv3d, | ||||
| .v3d = v3d, | .v3d = v3d, | ||||
| .scene = scene, | .scene = scene, | ||||
| .view_layer = view_layer, | .view_layer = view_layer, | ||||
| .obact = OBACT(view_layer), | .obact = OBACT(view_layer), | ||||
| ▲ Show 20 Lines • Show All 132 Lines • ▼ Show 20 Lines | void DRW_draw_render_loop_offscreen(struct Depsgraph *depsgraph, | ||||
| const bool draw_background, | const bool draw_background, | ||||
| const bool do_color_management, | const bool do_color_management, | ||||
| GPUOffScreen *ofs, | GPUOffScreen *ofs, | ||||
| GPUViewport *viewport) | GPUViewport *viewport) | ||||
| { | { | ||||
| /* Create temporary viewport if needed. */ | /* Create temporary viewport if needed. */ | ||||
| GPUViewport *render_viewport = viewport; | GPUViewport *render_viewport = viewport; | ||||
| if (viewport == NULL) { | if (viewport == NULL) { | ||||
| render_viewport = GPU_viewport_create(); | render_viewport = GPU_viewport_create(false); | ||||
| } | } | ||||
| GPU_viewport_bind_from_offscreen(render_viewport, ofs); | GPU_viewport_bind_from_offscreen(render_viewport, ofs); | ||||
| /* Reset before using it. */ | /* Reset before using it. */ | ||||
| drw_state_prepare_clean_for_draw(&DST); | drw_state_prepare_clean_for_draw(&DST); | ||||
| DST.options.is_image_render = true; | DST.options.is_image_render = true; | ||||
| DST.options.do_color_management = do_color_management; | DST.options.do_color_management = do_color_management; | ||||
| ▲ Show 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | DST.draw_ctx = (DRWContextState){ | ||||
| .scene = scene, | .scene = scene, | ||||
| .view_layer = view_layer, | .view_layer = view_layer, | ||||
| .engine_type = engine_type, | .engine_type = engine_type, | ||||
| .depsgraph = depsgraph, | .depsgraph = depsgraph, | ||||
| .object_mode = OB_MODE_OBJECT, | .object_mode = OB_MODE_OBJECT, | ||||
| }; | }; | ||||
| drw_context_state_init(); | drw_context_state_init(); | ||||
| DST.viewport = GPU_viewport_create(); | DST.viewport = GPU_viewport_create(false); | ||||
| const int size[2] = {(r->size * r->xsch) / 100, (r->size * r->ysch) / 100}; | const int size[2] = {(r->size * r->xsch) / 100, (r->size * r->ysch) / 100}; | ||||
| GPU_viewport_size_set(DST.viewport, size); | GPU_viewport_size_set(DST.viewport, size); | ||||
| drw_viewport_var_init(); | drw_viewport_var_init(); | ||||
| /* Main rendering. */ | /* Main rendering. */ | ||||
| rctf view_rect; | rctf view_rect; | ||||
| rcti render_rect; | rcti render_rect; | ||||
| ▲ Show 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | DST.draw_ctx = (DRWContextState){ | ||||
| .scene = scene, | .scene = scene, | ||||
| .view_layer = view_layer, | .view_layer = view_layer, | ||||
| .engine_type = engine_type, | .engine_type = engine_type, | ||||
| .depsgraph = depsgraph, | .depsgraph = depsgraph, | ||||
| .object_mode = OB_MODE_OBJECT, | .object_mode = OB_MODE_OBJECT, | ||||
| }; | }; | ||||
| drw_context_state_init(); | drw_context_state_init(); | ||||
| DST.viewport = GPU_viewport_create(); | DST.viewport = GPU_viewport_create(false); | ||||
| const int size[2] = {engine->resolution_x, engine->resolution_y}; | const int size[2] = {engine->resolution_x, engine->resolution_y}; | ||||
| GPU_viewport_size_set(DST.viewport, size); | GPU_viewport_size_set(DST.viewport, size); | ||||
| drw_viewport_var_init(); | drw_viewport_var_init(); | ||||
| ViewportEngineData *data = drw_viewport_engine_data_ensure(draw_engine_type); | ViewportEngineData *data = drw_viewport_engine_data_ensure(draw_engine_type); | ||||
| /* set default viewport */ | /* set default viewport */ | ||||
| ▲ Show 20 Lines • Show All 111 Lines • ▼ Show 20 Lines | DST.draw_ctx = (DRWContextState){ | ||||
| .scene = scene, | .scene = scene, | ||||
| .view_layer = view_layer, | .view_layer = view_layer, | ||||
| .engine_type = NULL, | .engine_type = NULL, | ||||
| .depsgraph = depsgraph, | .depsgraph = depsgraph, | ||||
| .object_mode = OB_MODE_OBJECT, | .object_mode = OB_MODE_OBJECT, | ||||
| }; | }; | ||||
| drw_context_state_init(); | drw_context_state_init(); | ||||
| DST.viewport = GPU_viewport_create(); | DST.viewport = GPU_viewport_create(false); | ||||
| const int size[2] = {1, 1}; | const int size[2] = {1, 1}; | ||||
| GPU_viewport_size_set(DST.viewport, size); | GPU_viewport_size_set(DST.viewport, size); | ||||
| drw_viewport_var_init(); | drw_viewport_var_init(); | ||||
| DRW_hair_init(); | DRW_hair_init(); | ||||
| ViewportEngineData *data = drw_viewport_engine_data_ensure(draw_engine_type); | ViewportEngineData *data = drw_viewport_engine_data_ensure(draw_engine_type); | ||||
| ▲ Show 20 Lines • Show All 121 Lines • ▼ Show 20 Lines | if (!(v3d->flag2 & V3D_HIDE_OVERLAYS)) { | ||||
| object_type = obpose->type; | object_type = obpose->type; | ||||
| object_mode = obpose->mode; | object_mode = obpose->mode; | ||||
| // obedit_ctx_mode = CTX_MODE_POSE; | // obedit_ctx_mode = CTX_MODE_POSE; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| int viewport_size[2] = {BLI_rcti_size_x(rect), BLI_rcti_size_y(rect)}; | int viewport_size[2] = {BLI_rcti_size_x(rect), BLI_rcti_size_y(rect)}; | ||||
| struct GPUViewport *viewport = GPU_viewport_create(); | struct GPUViewport *viewport = GPU_viewport_create(false); | ||||
| GPU_viewport_size_set(viewport, viewport_size); | GPU_viewport_size_set(viewport, viewport_size); | ||||
| DST.viewport = viewport; | DST.viewport = viewport; | ||||
| DST.options.is_select = true; | DST.options.is_select = true; | ||||
| /* Get list of enabled engines */ | /* Get list of enabled engines */ | ||||
| if (use_obedit) { | if (use_obedit) { | ||||
| drw_engines_enable_overlays(); | drw_engines_enable_overlays(); | ||||
| ▲ Show 20 Lines • Show All 311 Lines • ▼ Show 20 Lines | DST.draw_ctx = (DRWContextState){ | ||||
| .view_layer = view_layer, | .view_layer = view_layer, | ||||
| .obact = OBACT(view_layer), | .obact = OBACT(view_layer), | ||||
| .depsgraph = depsgraph, | .depsgraph = depsgraph, | ||||
| }; | }; | ||||
| drw_context_state_init(); | drw_context_state_init(); | ||||
| /* Setup viewport */ | /* Setup viewport */ | ||||
| DST.viewport = WM_draw_region_get_viewport(region, 0); | DST.viewport = WM_draw_region_get_viewport(region); | ||||
| drw_viewport_var_init(); | drw_viewport_var_init(); | ||||
| /* Update ubos */ | /* Update ubos */ | ||||
| DRW_globals_update(); | DRW_globals_update(); | ||||
| /* Init Select Engine */ | /* Init Select Engine */ | ||||
| struct SELECTID_Context *sel_ctx = DRW_select_engine_context_get(); | struct SELECTID_Context *sel_ctx = DRW_select_engine_context_get(); | ||||
| sel_ctx->last_rect = *rect; | sel_ctx->last_rect = *rect; | ||||
| ▲ Show 20 Lines • Show All 451 Lines • Show Last 20 Lines | |||||