static void screen_opengl_render_apply(OGLRender *oglrender) { RenderResult *rr; RenderView *rv; int view_id; ImBuf *ibuf; void *lock; rr = RE_AcquireResultRead(oglrender->re); for (rv = rr->views.first, view_id = 0; rv; rv = rv->next, view_id++) { RE_SetActiveRenderView(oglrender->re, rv->name); oglrender->view_id = view_id; screen_opengl_render_doit(oglrender, rr); } RE_ReleaseResult(oglrender->re); ibuf = BKE_image_acquire_ibuf(oglrender->ima, &oglrender->iuser, &lock); if (ibuf) { ibuf->userflags |= IB_DISPLAY_BUFFER_INVALID; } BKE_image_release_ibuf(oglrender->ima, ibuf, lock); if (oglrender->write_still) { screen_opengl_render_write(oglrender); } }
static void screen_opengl_render_apply(OGLRender *oglrender) { RenderResult *rr; RenderView *rv; int view_id; ImBuf *ibuf; void *lock; if (oglrender->is_sequencer) { Scene *scene = oglrender->scene; SeqRenderData context; SpaceSeq *sseq = oglrender->sseq; int chanshown = sseq ? sseq->chanshown : 0; BKE_sequencer_new_render_data( oglrender->bmain->eval_ctx, oglrender->bmain, scene, oglrender->sizex, oglrender->sizey, 100.0f, &context); for (view_id = 0; view_id < oglrender->views_len; view_id++) { context.view_id = view_id; context.gpu_offscreen = oglrender->ofs; context.gpu_fx = oglrender->fx; context.gpu_full_samples = oglrender->ofs_full_samples; oglrender->seq_data.ibufs_arr[view_id] = BKE_sequencer_give_ibuf(&context, CFRA, chanshown); } } rr = RE_AcquireResultRead(oglrender->re); for (rv = rr->views.first, view_id = 0; rv; rv = rv->next, view_id++) { BLI_assert(view_id < oglrender->views_len); RE_SetActiveRenderView(oglrender->re, rv->name); oglrender->view_id = view_id; /* add grease pencil passes. For sequencer, the render does not include renderpasses * TODO: The sequencer render of grease pencil should be rethought */ if (!oglrender->is_sequencer) { add_gpencil_renderpass(oglrender, rr, rv); } /* render composite */ screen_opengl_render_doit(oglrender, rr); } RE_ReleaseResult(oglrender->re); ibuf = BKE_image_acquire_ibuf(oglrender->ima, &oglrender->iuser, &lock); if (ibuf) { ibuf->userflags |= IB_DISPLAY_BUFFER_INVALID; } BKE_image_release_ibuf(oglrender->ima, ibuf, lock); if (oglrender->write_still) { screen_opengl_render_write(oglrender); } }
void RE_engine_active_view_set(RenderEngine *engine, const char *viewname) { Render *re = engine->re; RE_SetActiveRenderView(re, viewname); }