diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-06-24 07:49:56 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-06-24 07:49:56 +0400 |
commit | 734a4aa428da5c4a3e05eddbb643c0d26df3e69d (patch) | |
tree | 032de0df22bb1e89c6ecb306762ef8558884eed1 /source/blender/editors/render/render_opengl.c | |
parent | fc95ebbc556426b072fc41435bb76cadb16a56df (diff) |
fix [#27746] Black and White Render doesn't work and/or Saves as a Blank screen
convert to grayscale when saving renders rather then only writing the red channel.
Diffstat (limited to 'source/blender/editors/render/render_opengl.c')
-rw-r--r-- | source/blender/editors/render/render_opengl.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c index 98463ce955f..a55f9101a0f 100644 --- a/source/blender/editors/render/render_opengl.c +++ b/source/blender/editors/render/render_opengl.c @@ -220,6 +220,11 @@ static void screen_opengl_render_apply(OGLRender *oglrender) if(oglrender->write_still) { char name[FILE_MAX]; int ok; + + if(scene->r.planes == 8) { + IMB_color_to_bw(ibuf); + } + BKE_makepicstring(name, scene->r.pic, scene->r.cfra, scene->r.imtype, scene->r.scemode & R_EXTENSION, FALSE); ok= BKE_write_ibuf(ibuf, name, scene->r.imtype, scene->r.subimtype, scene->r.quality); /* no need to stamp here */ if(ok) printf("OpenGL Render written to '%s'\n", name); @@ -433,6 +438,19 @@ static int screen_opengl_render_anim_step(bContext *C, wmOperator *op) ibuf= BKE_image_acquire_ibuf(oglrender->ima, &oglrender->iuser, &lock); if(ibuf) { + short ibuf_free= FALSE; + + /* color -> greyscale */ + /* editing directly would alter the render view */ + if(scene->r.planes == 8) { + ImBuf *ibuf_bw= IMB_dupImBuf(ibuf); + IMB_color_to_bw(ibuf_bw); + // IMB_freeImBuf(ibuf); /* owned by the image */ + ibuf= ibuf_bw; + + ibuf_free= TRUE; + } + if(BKE_imtype_is_movie(scene->r.imtype)) { ok= oglrender->mh->append_movie(&scene->r, CFRA, (int*)ibuf->rect, oglrender->sizex, oglrender->sizey, oglrender->reports); if(ok) { @@ -453,6 +471,10 @@ static int screen_opengl_render_anim_step(bContext *C, wmOperator *op) BKE_reportf(op->reports, RPT_INFO, "Saved file: %s", name); } } + + if(ibuf_free) { + IMB_freeImBuf(ibuf); + } } BKE_image_release_ibuf(oglrender->ima, lock); |