diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-10-14 04:39:52 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-10-14 04:50:03 +0300 |
commit | 56021cad31c2cc17aa5abbbad1bf789563f530af (patch) | |
tree | bdce1c58724d943d38ede2096ffe43ed16353370 /source/blender/blenkernel | |
parent | 53d73c51a76577b8b9bb32fd08a967560353ab47 (diff) |
Support for multi-sample sequencer GL render
OpenGL sequencer render now uses a single fbo for all rendering.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_sequencer.h | 11 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/sequencer.c | 14 |
2 files changed, 20 insertions, 5 deletions
diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h index 360243d7b2a..06f46131c68 100644 --- a/source/blender/blenkernel/BKE_sequencer.h +++ b/source/blender/blenkernel/BKE_sequencer.h @@ -35,6 +35,7 @@ struct EvaluationContext; struct StripColorBalance; struct Editing; struct GSet; +struct GPUOffScreen; struct ImBuf; struct Main; struct Mask; @@ -101,6 +102,10 @@ typedef struct SeqRenderData { bool skip_cache; bool is_proxy_render; size_t view_id; + + /* special case for OpenGL render */ + struct GPUOffScreen *gpu_offscreen; + int gpu_samples; } SeqRenderData; void BKE_sequencer_new_render_data( @@ -408,7 +413,11 @@ struct Sequence *BKE_sequencer_add_sound_strip(struct bContext *C, ListBase *seq struct Sequence *BKE_sequencer_add_movie_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load); /* view3d draw callback, run when not in background view */ -typedef struct ImBuf *(*SequencerDrawView)(struct Scene *, struct Object *, int, int, unsigned int, int, bool, bool, bool, int, const char *, char[256]); +typedef struct ImBuf *(*SequencerDrawView)( + struct Scene *, struct Object *, int, int, + unsigned int, int, bool, bool, bool, + int, int, const char *, + struct GPUOffScreen *, char[256]); extern SequencerDrawView sequencer_view3d_cb; /* copy/paste */ diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index fc8fa616d20..40cacb2b926 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -563,6 +563,8 @@ void BKE_sequencer_new_render_data( r_context->skip_cache = false; r_context->is_proxy_render = false; r_context->view_id = 0; + r_context->gpu_offscreen = NULL; + r_context->gpu_samples = (scene->r.mode & R_OSA) ? scene->r.osa : 0; } /* ************************* iterator ************************** */ @@ -3212,10 +3214,14 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, Sequence *seq /* opengl offscreen render */ BKE_scene_update_for_newframe(context->eval_ctx, context->bmain, scene, scene->lay); - ibuf = sequencer_view3d_cb(scene, camera, width, height, IB_rect, - context->scene->r.seq_prev_type, - (context->scene->r.seq_flag & R_SEQ_SOLID_TEX) != 0, - use_gpencil, true, scene->r.alphamode, viewname, err_out); + ibuf = sequencer_view3d_cb( + /* set for OpenGL render (NULL when scrubbing) */ + scene, camera, width, height, IB_rect, + context->scene->r.seq_prev_type, + (context->scene->r.seq_flag & R_SEQ_SOLID_TEX) != 0, + use_gpencil, true, scene->r.alphamode, + context->gpu_samples, viewname, + context->gpu_offscreen, err_out); if (ibuf == NULL) { fprintf(stderr, "seq_render_scene_strip failed to get opengl buffer: %s\n", err_out); } |