diff options
Diffstat (limited to 'source/blender/draw/intern/draw_manager.c')
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 712a93e8880..4a5e07476a9 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -792,9 +792,8 @@ DrawDataList *DRW_drawdatalist_from_id(ID *id) IdDdtTemplate *idt = (IdDdtTemplate *)id; return &idt->drawdata; } - else { - return NULL; - } + + return NULL; } DrawData *DRW_drawdata_get(ID *id, DrawEngineType *engine_type) @@ -1658,7 +1657,6 @@ void DRW_render_gpencil(struct RenderEngine *engine, struct Depsgraph *depsgraph Scene *scene = DEG_get_evaluated_scene(depsgraph); ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph); RenderEngineType *engine_type = engine->type; - RenderData *r = &scene->r; Render *render = engine->re; DRW_render_context_enable(render); @@ -1680,7 +1678,7 @@ void DRW_render_gpencil(struct RenderEngine *engine, struct Depsgraph *depsgraph drw_context_state_init(); DST.viewport = GPU_viewport_create(); - const int size[2] = {(r->size * r->xsch) / 100, (r->size * r->ysch) / 100}; + const int size[2] = {engine->resolution_x, engine->resolution_y}; GPU_viewport_size_set(DST.viewport, size); drw_viewport_var_init(); @@ -1954,13 +1952,21 @@ void DRW_render_instance_buffer_finish(void) drw_resource_buffer_finish(DST.vmempool); } +/* WARNING: Changing frame might free the ViewLayerEngineData */ +void DRW_render_set_time(RenderEngine *engine, Depsgraph *depsgraph, int frame, float subframe) +{ + RE_engine_frame_set(engine, frame, subframe); + DST.draw_ctx.scene = DEG_get_evaluated_scene(depsgraph); + DST.draw_ctx.view_layer = DEG_get_evaluated_view_layer(depsgraph); +} + /** * object mode select-loop, see: ED_view3d_draw_select_loop (legacy drawing). */ void DRW_draw_select_loop(struct Depsgraph *depsgraph, ARegion *region, View3D *v3d, - bool UNUSED(use_obedit_skip), + bool use_obedit_skip, bool draw_surface, bool UNUSED(use_nearest), const rcti *rect, @@ -1973,7 +1979,7 @@ void DRW_draw_select_loop(struct Depsgraph *depsgraph, RenderEngineType *engine_type = ED_view3d_engine_type(scene, v3d->shading.type); ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph); Object *obact = OBACT(view_layer); - Object *obedit = OBEDIT_FROM_OBACT(obact); + Object *obedit = use_obedit_skip ? NULL : OBEDIT_FROM_OBACT(obact); #ifndef USE_GPU_SELECT UNUSED_VARS(scene, view_layer, v3d, region, rect); #else @@ -2024,7 +2030,7 @@ void DRW_draw_select_loop(struct Depsgraph *depsgraph, } } - int viewport_size[2] = {BLI_rcti_size_x(rect), BLI_rcti_size_y(rect)}; + const int viewport_size[2] = {BLI_rcti_size_x(rect), BLI_rcti_size_y(rect)}; struct GPUViewport *viewport = GPU_viewport_create(); GPU_viewport_size_set(viewport, viewport_size); @@ -2716,7 +2722,13 @@ void DRW_engines_free(void) void DRW_render_context_enable(Render *render) { if (G.background && DST.gl_context == NULL) { - WM_init_opengl(G_MAIN); + WM_init_opengl(); + } + + if (GPU_use_main_context_workaround()) { + GPU_context_main_lock(); + DRW_opengl_context_enable(); + return; } void *re_gl_context = RE_gl_context_get(render); @@ -2736,6 +2748,12 @@ void DRW_render_context_enable(Render *render) void DRW_render_context_disable(Render *render) { + if (GPU_use_main_context_workaround()) { + DRW_opengl_context_disable(); + GPU_context_main_unlock(); + return; + } + void *re_gl_context = RE_gl_context_get(render); if (re_gl_context != NULL) { @@ -2835,7 +2853,7 @@ void DRW_opengl_context_disable_ex(bool restore) void DRW_opengl_context_enable(void) { if (G.background && DST.gl_context == NULL) { - WM_init_opengl(G_MAIN); + WM_init_opengl(); } DRW_opengl_context_enable_ex(true); } |