diff options
Diffstat (limited to 'source/blender/editors/space_sequencer/sequencer_draw.c')
-rw-r--r-- | source/blender/editors/space_sequencer/sequencer_draw.c | 74 |
1 files changed, 42 insertions, 32 deletions
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index 662be2491a0..8ac562f0ae0 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -44,7 +44,6 @@ #include "BKE_fcurve.h" #include "BKE_global.h" #include "BKE_scene.h" -#include "BKE_sequencer.h" #include "BKE_sound.h" #include "IMB_colormanagement.h" @@ -69,6 +68,8 @@ #include "BIF_glutil.h" +#include "SEQ_sequencer.h" + #include "UI_interface.h" #include "UI_resources.h" #include "UI_view2d.h" @@ -625,7 +626,7 @@ static void draw_seq_text(View2D *v2d, name = BKE_sequence_give_name(seq); } - if (seq->type == SEQ_TYPE_META || seq->type == SEQ_TYPE_ADJUSTMENT) { + if (ELEM(seq->type, SEQ_TYPE_META, SEQ_TYPE_ADJUSTMENT)) { str_len = BLI_snprintf(str, sizeof(str), "%s | %d", name, seq->len); } else if (seq->type == SEQ_TYPE_SCENE) { @@ -969,14 +970,14 @@ static void fcurve_batch_add_verts(GPUVertBuf *vbo, float y1, float y2, float y_height, - int cfra, + int timeline_frame, float curve_val, unsigned int *vert_count) { float vert_pos[2][2]; - copy_v2_fl2(vert_pos[0], cfra, (curve_val * y_height) + y1); - copy_v2_fl2(vert_pos[1], cfra, y2); + copy_v2_fl2(vert_pos[0], timeline_frame, (curve_val * y_height) + y1); + copy_v2_fl2(vert_pos[1], timeline_frame, y2); GPU_vertbuf_vert_set(vbo, *vert_count, vert_pos[0]); GPU_vertbuf_vert_set(vbo, *vert_count + 1, vert_pos[1]); @@ -1025,23 +1026,25 @@ static void draw_seq_fcurve( float prev_val = INT_MIN; bool skip = false; - for (int cfra = eval_start; cfra <= eval_end; cfra += eval_step) { - curve_val = evaluate_fcurve(fcu, cfra); + for (int timeline_frame = eval_start; timeline_frame <= eval_end; + timeline_frame += eval_step) { + curve_val = evaluate_fcurve(fcu, timeline_frame); CLAMP(curve_val, 0.0f, 1.0f); /* Avoid adding adjacent verts that have the same value. */ - if (curve_val == prev_val && cfra < eval_end - eval_step) { + if (curve_val == prev_val && timeline_frame < eval_end - eval_step) { skip = true; continue; } /* If some frames were skipped above, we need to close the shape. */ if (skip) { - fcurve_batch_add_verts(vbo, y1, y2, y_height, cfra - eval_step, prev_val, &vert_count); + fcurve_batch_add_verts( + vbo, y1, y2, y_height, timeline_frame - eval_step, prev_val, &vert_count); skip = false; } - fcurve_batch_add_verts(vbo, y1, y2, y_height, cfra, curve_val, &vert_count); + fcurve_batch_add_verts(vbo, y1, y2, y_height, timeline_frame, curve_val, &vert_count); prev_val = curve_val; } @@ -1240,7 +1243,7 @@ ImBuf *sequencer_ibuf_get(struct Main *bmain, struct Depsgraph *depsgraph, Scene *scene, SpaceSeq *sseq, - int cfra, + int timeline_frame, int frame_ofs, const char *viewname) { @@ -1250,21 +1253,21 @@ ImBuf *sequencer_ibuf_get(struct Main *bmain, double render_size; short is_break = G.is_break; - if (sseq->render_size == SEQ_PROXY_RENDER_SIZE_NONE) { + if (sseq->render_size == SEQ_RENDER_SIZE_NONE) { return NULL; } - if (sseq->render_size == SEQ_PROXY_RENDER_SIZE_SCENE) { + if (sseq->render_size == SEQ_RENDER_SIZE_SCENE) { render_size = scene->r.size / 100.0; } else { - render_size = BKE_sequencer_rendersize_to_scale_factor(sseq->render_size); + render_size = SEQ_rendersize_to_scale_factor(sseq->render_size); } rectx = roundf(render_size * scene->r.xsch); recty = roundf(render_size * scene->r.ysch); - BKE_sequencer_new_render_data( + SEQ_render_new_render_data( bmain, depsgraph, scene, rectx, recty, sseq->render_size, false, &context); context.view_id = BKE_scene_multiview_view_id_get(&scene->r, viewname); @@ -1284,10 +1287,10 @@ ImBuf *sequencer_ibuf_get(struct Main *bmain, } if (special_seq_update) { - ibuf = BKE_sequencer_give_ibuf_direct(&context, cfra + frame_ofs, special_seq_update); + ibuf = SEQ_render_give_ibuf_direct(&context, timeline_frame + frame_ofs, special_seq_update); } else { - ibuf = BKE_sequencer_give_ibuf(&context, cfra + frame_ofs, sseq->chanshown); + ibuf = SEQ_render_give_ibuf(&context, timeline_frame + frame_ofs, sseq->chanshown); } if (viewport) { @@ -1524,6 +1527,8 @@ static void *sequencer_OCIO_transform_ibuf(const bContext *C, * properly, in this case we fallback to CPU-based display transform. */ if ((ibuf->rect || ibuf->rect_float) && !*r_glsl_used) { display_buffer = IMB_display_buffer_acquire_ctx(C, ibuf, &cache_handle); + *r_format = GPU_RGBA8; + *r_data = GPU_DATA_UNSIGNED_BYTE; } if (cache_handle) { IMB_display_buffer_release(cache_handle); @@ -1607,7 +1612,7 @@ static void sequencer_draw_display_buffer(const bContext *C, } /* Format needs to be created prior to any #immBindShader call. - * Do it here because OCIO binds it's own shader. */ + * Do it here because OCIO binds its own shader. */ eGPUTextureFormat format; eGPUDataFormat data; bool glsl_used = false; @@ -1763,7 +1768,7 @@ void sequencer_draw_preview(const bContext *C, Scene *scene, ARegion *region, SpaceSeq *sseq, - int cfra, + int timeline_frame, int offset, bool draw_overlay, bool draw_backdrop) @@ -1785,7 +1790,7 @@ void sequencer_draw_preview(const bContext *C, /* Get image. */ ibuf = sequencer_ibuf_get( - bmain, region, depsgraph, scene, sseq, cfra, offset, names[sseq->multiview_eye]); + bmain, region, depsgraph, scene, sseq, timeline_frame, offset, names[sseq->multiview_eye]); /* Setup off-screen buffers. */ GPUViewport *viewport = WM_draw_region_get_viewport(region); @@ -1793,7 +1798,7 @@ void sequencer_draw_preview(const bContext *C, GPU_framebuffer_bind_no_srgb(framebuffer_overlay); GPU_depth_test(GPU_DEPTH_NONE); - if (sseq->render_size == SEQ_PROXY_RENDER_SIZE_NONE) { + if (sseq->render_size == SEQ_RENDER_SIZE_NONE) { sequencer_preview_clear(); return; } @@ -2083,7 +2088,7 @@ static bool draw_cache_view_init_fn(void *userdata, size_t item_count) /* Called as a callback */ static bool draw_cache_view_iter_fn( - void *userdata, struct Sequence *seq, int nfra, int cache_type, float UNUSED(cost)) + void *userdata, struct Sequence *seq, int timeline_frame, int cache_type, float UNUSED(cost)) { CacheDrawData *drawdata = userdata; struct View2D *v2d = drawdata->v2d; @@ -2129,14 +2134,13 @@ static bool draw_cache_view_iter_fn( return false; } - int cfra = seq->start + nfra; float vert_pos[6][2]; - copy_v2_fl2(vert_pos[0], cfra, stripe_bot); - copy_v2_fl2(vert_pos[1], cfra, stripe_top); - copy_v2_fl2(vert_pos[2], cfra + 1, stripe_top); + copy_v2_fl2(vert_pos[0], timeline_frame, stripe_bot); + copy_v2_fl2(vert_pos[1], timeline_frame, stripe_top); + copy_v2_fl2(vert_pos[2], timeline_frame + 1, stripe_top); copy_v2_v2(vert_pos[3], vert_pos[2]); copy_v2_v2(vert_pos[4], vert_pos[0]); - copy_v2_fl2(vert_pos[5], cfra + 1, stripe_bot); + copy_v2_fl2(vert_pos[5], timeline_frame + 1, stripe_bot); for (int i = 0; i < 6; i++) { GPU_vertbuf_vert_set(vbo, *vert_count + i, vert_pos[i]); @@ -2297,7 +2301,10 @@ void draw_timeline_seq(const bContext *C, ARegion *region) } /* Draw attached callbacks. */ + GPU_framebuffer_bind(framebuffer_overlay); ED_region_draw_cb_draw(C, region, REGION_DRAW_PRE_VIEW); + GPU_framebuffer_bind_no_srgb(framebuffer_overlay); + seq_draw_sfra_efra(scene, v2d); if (ed) { @@ -2313,9 +2320,9 @@ void draw_timeline_seq(const bContext *C, ARegion *region) /* Draw overlap frame frame indicator. */ if (scene->ed && scene->ed->over_flag & SEQ_EDIT_OVERLAY_SHOW) { - int cfra_over = (scene->ed->over_flag & SEQ_EDIT_OVERLAY_ABS) ? - scene->ed->over_cfra : - scene->r.cfra + scene->ed->over_ofs; + int overlap_frame = (scene->ed->over_flag & SEQ_EDIT_OVERLAY_ABS) ? + scene->ed->over_cfra : + scene->r.cfra + scene->ed->over_ofs; uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR); @@ -2329,8 +2336,8 @@ void draw_timeline_seq(const bContext *C, ARegion *region) immUniformThemeColor(TH_CFRAME); immBegin(GPU_PRIM_LINES, 2); - immVertex2f(pos, cfra_over, v2d->cur.ymin); - immVertex2f(pos, cfra_over, v2d->cur.ymax); + immVertex2f(pos, overlap_frame, v2d->cur.ymin); + immVertex2f(pos, overlap_frame, v2d->cur.ymax); immEnd(); immUnbindProgram(); @@ -2351,7 +2358,10 @@ void draw_timeline_seq(const bContext *C, ARegion *region) ANIM_draw_previewrange(C, v2d, 1); /* Draw registered callbacks. */ + GPU_framebuffer_bind(framebuffer_overlay); ED_region_draw_cb_draw(C, region, REGION_DRAW_POST_VIEW); + GPU_framebuffer_bind_no_srgb(framebuffer_overlay); + UI_view2d_view_restore(C); ED_time_scrub_draw(region, scene, !(sseq->flag & SEQ_DRAWFRAMES), true); |