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/editors/render/render_opengl.c | |
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/editors/render/render_opengl.c')
-rw-r--r-- | source/blender/editors/render/render_opengl.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c index c8ced552109..46ed860391e 100644 --- a/source/blender/editors/render/render_opengl.c +++ b/source/blender/editors/render/render_opengl.c @@ -96,6 +96,7 @@ typedef struct OGLRender { ImageUser iuser; GPUOffScreen *ofs; + int ofs_samples; GPUFX *fx; int sizex, sizey; int write_still; @@ -279,6 +280,9 @@ static void screen_opengl_render_doit(OGLRender *oglrender, RenderResult *rr) &context); context.view_id = BKE_scene_multiview_view_id_get(&scene->r, viewname); + context.gpu_offscreen = oglrender->ofs; + context.gpu_samples = oglrender->ofs_samples; + ibuf = BKE_sequencer_give_ibuf(&context, CFRA, chanshown); if (ibuf) { @@ -377,8 +381,9 @@ static void screen_opengl_render_doit(OGLRender *oglrender, RenderResult *rr) ED_view3d_draw_offscreen( scene, v3d, ar, sizex, sizey, NULL, winmat, - draw_bgpic, draw_sky, is_persp, - oglrender->ofs, oglrender->fx, &fx_settings, viewname); + draw_bgpic, draw_sky, is_persp, viewname, + oglrender->fx, &fx_settings, + oglrender->ofs); GPU_offscreen_read_pixels(oglrender->ofs, GL_UNSIGNED_BYTE, rect); GPU_offscreen_unbind(oglrender->ofs, true); /* unbind */ @@ -386,9 +391,11 @@ static void screen_opengl_render_doit(OGLRender *oglrender, RenderResult *rr) else { /* shouldnt suddenly give errors mid-render but possible */ char err_out[256] = "unknown"; - ImBuf *ibuf_view = ED_view3d_draw_offscreen_imbuf_simple(scene, scene->camera, oglrender->sizex, oglrender->sizey, - IB_rect, OB_SOLID, false, true, true, - (draw_sky) ? R_ADDSKY : R_ALPHAPREMUL, viewname, err_out); + ImBuf *ibuf_view = ED_view3d_draw_offscreen_imbuf_simple( + scene, scene->camera, oglrender->sizex, oglrender->sizey, + IB_rect, OB_SOLID, false, true, true, + (draw_sky) ? R_ADDSKY : R_ALPHAPREMUL, oglrender->ofs_samples, viewname, + oglrender->ofs, err_out); camera = scene->camera; if (ibuf_view) { @@ -498,12 +505,12 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op) GPUOffScreen *ofs; OGLRender *oglrender; int sizex, sizey; + const int samples = (scene->r.mode & R_OSA) ? scene->r.osa : 0; bool is_view_context = RNA_boolean_get(op->ptr, "view_context"); const bool is_animation = RNA_boolean_get(op->ptr, "animation"); const bool is_sequencer = RNA_boolean_get(op->ptr, "sequencer"); const bool is_write_still = RNA_boolean_get(op->ptr, "write_still"); char err_out[256] = "unknown"; - int samples = (scene->r.mode & R_OSA) ? scene->r.osa : 0; if (G.background) { BKE_report(op->reports, RPT_ERROR, "Cannot use OpenGL render in background mode (no opengl context)"); @@ -555,6 +562,7 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op) op->customdata = oglrender; oglrender->ofs = ofs; + oglrender->ofs_samples = samples; oglrender->sizex = sizex; oglrender->sizey = sizey; oglrender->bmain = CTX_data_main(C); |