Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/render/render_opengl.cc
| Show All 21 Lines | |||||
| #include "DNA_camera_types.h" | #include "DNA_camera_types.h" | ||||
| #include "DNA_action_types.h" | #include "DNA_action_types.h" | ||||
| #include "DNA_anim_types.h" | #include "DNA_anim_types.h" | ||||
| #include "DNA_curve_types.h" | #include "DNA_curve_types.h" | ||||
| #include "DNA_gpencil_types.h" | #include "DNA_gpencil_types.h" | ||||
| #include "DNA_object_types.h" | #include "DNA_object_types.h" | ||||
| #include "DNA_scene_types.h" | #include "DNA_scene_types.h" | ||||
| #include "DNA_video_edit_types.h" | |||||
| #include "BKE_anim_data.h" | #include "BKE_anim_data.h" | ||||
| #include "BKE_camera.h" | #include "BKE_camera.h" | ||||
| #include "BKE_context.h" | #include "BKE_context.h" | ||||
| #include "BKE_customdata.h" | #include "BKE_customdata.h" | ||||
| #include "BKE_fcurve.h" | #include "BKE_fcurve.h" | ||||
| #include "BKE_global.h" | #include "BKE_global.h" | ||||
| #include "BKE_image.h" | #include "BKE_image.h" | ||||
| ▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | |||||
| /* TODO(sergey): Find better approximation of the scheduled frames. | /* TODO(sergey): Find better approximation of the scheduled frames. | ||||
| * For really high-resolution renders it might fail still. */ | * For really high-resolution renders it might fail still. */ | ||||
| #define MAX_SCHEDULED_FRAMES 8 | #define MAX_SCHEDULED_FRAMES 8 | ||||
| struct OGLRender { | struct OGLRender { | ||||
| Main *bmain; | Main *bmain; | ||||
| Render *re; | Render *re; | ||||
| Scene *scene; | Scene *scene; | ||||
| VideoEdit *video_edit; | |||||
| WorkSpace *workspace; | WorkSpace *workspace; | ||||
| ViewLayer *view_layer; | ViewLayer *view_layer; | ||||
| Depsgraph *depsgraph; | Depsgraph *depsgraph; | ||||
| View3D *v3d; | View3D *v3d; | ||||
| RegionView3D *rv3d; | RegionView3D *rv3d; | ||||
| ARegion *region; | ARegion *region; | ||||
| ▲ Show 20 Lines • Show All 366 Lines • ▼ Show 20 Lines | |||||
| { | { | ||||
| RenderResult *rr; | RenderResult *rr; | ||||
| RenderView *rv; | RenderView *rv; | ||||
| int view_id; | int view_id; | ||||
| ImBuf *ibuf; | ImBuf *ibuf; | ||||
| void *lock; | void *lock; | ||||
| if (oglrender->is_sequencer) { | if (oglrender->is_sequencer) { | ||||
| Scene *scene = oglrender->scene; | VideoEdit *video_edit = oglrender->video_edit; | ||||
| SeqRenderData context; | SeqRenderData context; | ||||
| SpaceSeq *sseq = oglrender->sseq; | SpaceSeq *sseq = oglrender->sseq; | ||||
| int chanshown = sseq ? sseq->chanshown : 0; | int chanshown = sseq ? sseq->chanshown : 0; | ||||
| SEQ_render_new_render_data(oglrender->bmain, | SEQ_render_new_render_data(oglrender->bmain, | ||||
| oglrender->depsgraph, | oglrender->depsgraph, | ||||
| scene, | video_edit, | ||||
| oglrender->sizex, | oglrender->sizex, | ||||
| oglrender->sizey, | oglrender->sizey, | ||||
| SEQ_RENDER_SIZE_SCENE, | SEQ_RENDER_SIZE_VIDEO_EDIT, | ||||
| false, | false, | ||||
| &context); | &context); | ||||
| for (view_id = 0; view_id < oglrender->views_len; view_id++) { | for (view_id = 0; view_id < oglrender->views_len; view_id++) { | ||||
| context.view_id = view_id; | context.view_id = view_id; | ||||
| context.gpu_offscreen = oglrender->ofs; | context.gpu_offscreen = oglrender->ofs; | ||||
| oglrender->seq_data.ibufs_arr[view_id] = SEQ_render_give_ibuf( | oglrender->seq_data.ibufs_arr[view_id] = SEQ_render_give_ibuf( | ||||
| &context, scene->r.cfra, chanshown); | &context, video_edit->r.cfra, chanshown); | ||||
| } | } | ||||
| } | } | ||||
| rr = RE_AcquireResultRead(oglrender->re); | rr = RE_AcquireResultRead(oglrender->re); | ||||
| for (rv = static_cast<RenderView *>(rr->views.first), view_id = 0; rv; | for (rv = static_cast<RenderView *>(rr->views.first), view_id = 0; rv; | ||||
| rv = rv->next, view_id++) { | rv = rv->next, view_id++) { | ||||
| BLI_assert(view_id < oglrender->views_len); | BLI_assert(view_id < oglrender->views_len); | ||||
| RE_SetActiveRenderView(oglrender->re, rv->name); | RE_SetActiveRenderView(oglrender->re, rv->name); | ||||
| ▲ Show 20 Lines • Show All 115 Lines • ▼ Show 20 Lines | switch (id_type) { | ||||
| case ID_PA: /* ParticleSettings */ | case ID_PA: /* ParticleSettings */ | ||||
| case ID_MC: /* MovieClip */ | case ID_MC: /* MovieClip */ | ||||
| case ID_MSK: /* Mask */ | case ID_MSK: /* Mask */ | ||||
| case ID_LP: /* LightProbe */ | case ID_LP: /* LightProbe */ | ||||
| case ID_CV: /* Curves */ | case ID_CV: /* Curves */ | ||||
| case ID_PT: /* PointCloud */ | case ID_PT: /* PointCloud */ | ||||
| case ID_VO: /* Volume */ | case ID_VO: /* Volume */ | ||||
| case ID_SIM: /* Simulation */ | case ID_SIM: /* Simulation */ | ||||
| case ID_VE: /* Video Edit */ | |||||
| break; | break; | ||||
| /* Blacklist: */ | /* Blacklist: */ | ||||
| case ID_SCE: /* Scene */ | case ID_SCE: /* Scene */ | ||||
| case ID_LI: /* Library */ | case ID_LI: /* Library */ | ||||
| case ID_OB: /* Object */ | case ID_OB: /* Object */ | ||||
| case ID_IP: /* Ipo (depreciated, replaced by FCurves) */ | case ID_IP: /* Ipo (depreciated, replaced by FCurves) */ | ||||
| case ID_WO: /* World */ | case ID_WO: /* World */ | ||||
| ▲ Show 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | |||||
| static bool screen_opengl_render_init(bContext *C, wmOperator *op) | static bool screen_opengl_render_init(bContext *C, wmOperator *op) | ||||
| { | { | ||||
| /* new render clears all callbacks */ | /* new render clears all callbacks */ | ||||
| wmWindowManager *wm = CTX_wm_manager(C); | wmWindowManager *wm = CTX_wm_manager(C); | ||||
| wmWindow *win = CTX_wm_window(C); | wmWindow *win = CTX_wm_window(C); | ||||
| WorkSpace *workspace = CTX_wm_workspace(C); | WorkSpace *workspace = CTX_wm_workspace(C); | ||||
| Scene *scene = CTX_data_scene(C); | Scene *scene = CTX_data_scene(C); | ||||
| VideoEdit *video_edit = CTX_data_video_edit(C); | |||||
| ScrArea *prevsa = CTX_wm_area(C); | ScrArea *prevsa = CTX_wm_area(C); | ||||
| ARegion *prevar = CTX_wm_region(C); | ARegion *prevar = CTX_wm_region(C); | ||||
| GPUOffScreen *ofs; | GPUOffScreen *ofs; | ||||
| OGLRender *oglrender; | OGLRender *oglrender; | ||||
| int sizex, sizey; | int sizex, sizey; | ||||
| bool is_view_context = RNA_boolean_get(op->ptr, "view_context"); | bool is_view_context = RNA_boolean_get(op->ptr, "view_context"); | ||||
| const bool is_animation = RNA_boolean_get(op->ptr, "animation"); | const bool is_animation = RNA_boolean_get(op->ptr, "animation"); | ||||
| const bool is_render_keyed_only = RNA_boolean_get(op->ptr, "render_keyed_only"); | const bool is_render_keyed_only = RNA_boolean_get(op->ptr, "render_keyed_only"); | ||||
| ▲ Show 20 Lines • Show All 56 Lines • ▼ Show 20 Lines | static bool screen_opengl_render_init(bContext *C, wmOperator *op) | ||||
| oglrender = MEM_new<OGLRender>("OGLRender"); | oglrender = MEM_new<OGLRender>("OGLRender"); | ||||
| op->customdata = oglrender; | op->customdata = oglrender; | ||||
| oglrender->ofs = ofs; | oglrender->ofs = ofs; | ||||
| oglrender->sizex = sizex; | oglrender->sizex = sizex; | ||||
| oglrender->sizey = sizey; | oglrender->sizey = sizey; | ||||
| oglrender->bmain = CTX_data_main(C); | oglrender->bmain = CTX_data_main(C); | ||||
| oglrender->scene = scene; | oglrender->scene = scene; | ||||
| oglrender->video_edit = video_edit; | |||||
| oglrender->workspace = workspace; | oglrender->workspace = workspace; | ||||
| oglrender->view_layer = CTX_data_view_layer(C); | oglrender->view_layer = CTX_data_view_layer(C); | ||||
| /* NOTE: The depsgraph is not only used to update scene for a new frames, but also to initialize | /* NOTE: The depsgraph is not only used to update scene for a new frames, but also to initialize | ||||
| * output video handles, which does need evaluated scene. */ | * output video handles, which does need evaluated scene. */ | ||||
| oglrender->depsgraph = CTX_data_ensure_evaluated_depsgraph(C); | oglrender->depsgraph = CTX_data_ensure_evaluated_depsgraph(C); | ||||
| oglrender->cfrao = scene->r.cfra; | oglrender->cfrao = scene->r.cfra; | ||||
| oglrender->write_still = is_write_still && !is_animation; | oglrender->write_still = is_write_still && !is_animation; | ||||
| ▲ Show 20 Lines • Show All 595 Lines • Show Last 20 Lines | |||||