diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-11-24 14:19:26 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-11-27 14:21:21 +0300 |
commit | 9b42b3e11462e96bf24970971ab181122c6b33df (patch) | |
tree | 07eb7bf0d3b0c8d9c428a7f080709a8c286c379c /source/blender/editors | |
parent | 37fc23dd9e7738de7187e889f058cda845544ffb (diff) |
Sequencer: Add option to render OpenGL preview with DoF
The title says it all actually, controlled with DoF check box next to textured
solid check box.
Thanks Campbell for review!
Diffstat (limited to 'source/blender/editors')
5 files changed, 34 insertions, 7 deletions
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h index 0a87360e58d..2cc928117c5 100644 --- a/source/blender/editors/include/ED_view3d.h +++ b/source/blender/editors/include/ED_view3d.h @@ -376,6 +376,7 @@ enum { /* Only works with ED_view3d_draw_offscreen_imbuf_simple(). */ V3D_OFSDRAW_USE_GPENCIL = (1 << 2), V3D_OFSDRAW_USE_SOLID_TEX = (1 << 2), + V3D_OFSDRAW_USE_CAMERA_DOF = (1 << 3), }; struct ImBuf *ED_view3d_draw_offscreen_imbuf( diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c index a2d34ffefa8..b7a23bafced 100644 --- a/source/blender/editors/render/render_opengl.c +++ b/source/blender/editors/render/render_opengl.c @@ -684,6 +684,11 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op) oglrender->fx = GPU_fx_compositor_create(); } } + else if (is_sequencer) { + if (scene->r.seq_flag & R_SEQ_CAMERA_DOF) { + oglrender->fx = GPU_fx_compositor_create(); + } + } /* create render */ oglrender->re = RE_NewSceneRender(scene); diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index 160aa157189..bb7e2d75482 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -60,6 +60,7 @@ #include "BIF_glutil.h" #include "GPU_basic_shader.h" +#include "GPU_compositing.h" #include "ED_anim_api.h" #include "ED_gpencil.h" @@ -908,7 +909,7 @@ void ED_sequencer_special_preview_clear(void) ImBuf *sequencer_ibuf_get(struct Main *bmain, Scene *scene, SpaceSeq *sseq, int cfra, int frame_ofs, const char *viewname) { - SeqRenderData context; + SeqRenderData context = {0}; ImBuf *ibuf; int rectx, recty; float render_size; @@ -935,6 +936,12 @@ ImBuf *sequencer_ibuf_get(struct Main *bmain, Scene *scene, SpaceSeq *sseq, int rectx, recty, proxy_size, &context); context.view_id = BKE_scene_multiview_view_id_get(&scene->r, viewname); + if (scene->r.seq_flag & R_SEQ_CAMERA_DOF) { + if (sseq->compositor == NULL) { + sseq->compositor = GPU_fx_compositor_create(); + } + context.gpu_fx = sseq->compositor; + } /* sequencer could start rendering, in this case we need to be sure it wouldn't be canceled * by Esc pressed somewhere in the past diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c index f1d0f23f8af..6b50d3fecdf 100644 --- a/source/blender/editors/space_sequencer/space_sequencer.c +++ b/source/blender/editors/space_sequencer/space_sequencer.c @@ -60,6 +60,8 @@ #include "IMB_imbuf.h" +#include "GPU_compositing.h" + #include "sequencer_intern.h" // own include /**************************** common state *****************************/ @@ -218,6 +220,11 @@ static void sequencer_free(SpaceLink *sl) if (scopes->histogram_ibuf) IMB_freeImBuf(scopes->histogram_ibuf); + + if (sseq->compositor != NULL) { + GPU_fx_compositor_destroy(sseq->compositor); + sseq->compositor = NULL; + } } diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 8fd38d6a8de..9e220f4b141 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -3473,15 +3473,22 @@ ImBuf *ED_view3d_draw_offscreen_imbuf_simple( v3d.lay = scene->lay; v3d.drawtype = drawtype; v3d.flag2 = V3D_RENDER_OVERRIDE; - - if (draw_flags & V3D_OFSDRAW_USE_GPENCIL) - v3d.flag2 |= V3D_SHOW_GPENCIL; - if (draw_flags & V3D_OFSDRAW_USE_SOLID_TEX) + if (draw_flags & V3D_OFSDRAW_USE_GPENCIL) { + v3d.flag2 |= V3D_SHOW_GPENCIL; + } + if (draw_flags & V3D_OFSDRAW_USE_SOLID_TEX) { v3d.flag2 |= V3D_SOLID_TEX; - - if (draw_flags & V3D_OFSDRAW_USE_BACKGROUND) + } + if (draw_flags & V3D_OFSDRAW_USE_BACKGROUND) { v3d.flag3 |= V3D_SHOW_WORLD; + } + if (draw_flags & V3D_OFSDRAW_USE_CAMERA_DOF) { + if (camera->type == OB_CAMERA) { + v3d.fx_settings.dof = &((Camera *)camera->data)->gpu_dof; + v3d.fx_settings.fx_flag |= GPU_FX_FLAG_DOF; + } + } rv3d.persp = RV3D_CAMOB; |