diff options
-rw-r--r-- | source/blender/imbuf/IMB_imbuf.h | 3 | ||||
-rw-r--r-- | source/blender/include/BIF_writeimage.h | 2 | ||||
-rw-r--r-- | source/blender/python/api2_2x/Mesh.c | 6 | ||||
-rw-r--r-- | source/blender/src/header_info.c | 2 | ||||
-rw-r--r-- | source/blender/src/toets.c | 6 | ||||
-rw-r--r-- | source/blender/src/writeimage.c | 47 |
6 files changed, 54 insertions, 12 deletions
diff --git a/source/blender/imbuf/IMB_imbuf.h b/source/blender/imbuf/IMB_imbuf.h index 744c3b66345..39243ec50d1 100644 --- a/source/blender/imbuf/IMB_imbuf.h +++ b/source/blender/imbuf/IMB_imbuf.h @@ -505,6 +505,9 @@ void IMB_rectfill(struct ImBuf *drect, float col[4]); short imb_addrectImBuf(struct ImBuf * ibuf); void imb_freerectImBuf(struct ImBuf * ibuf); +short imb_addrectfloatImBuf(struct ImBuf * ibuf); +void imb_freerectfloatImBuf(struct ImBuf * ibuf); + #ifdef WITH_QUICKTIME /** * diff --git a/source/blender/include/BIF_writeimage.h b/source/blender/include/BIF_writeimage.h index 70978a033c2..002d382be5b 100644 --- a/source/blender/include/BIF_writeimage.h +++ b/source/blender/include/BIF_writeimage.h @@ -37,7 +37,7 @@ struct ImBuf; struct EnvMap; void BIF_save_rendered_image(char *name); -void BIF_save_rendered_image_fs(void); +void BIF_save_rendered_image_fs(int zbuf); void BIF_save_envmap(struct EnvMap *env, char *str); void save_image_filesel_str(char *str); diff --git a/source/blender/python/api2_2x/Mesh.c b/source/blender/python/api2_2x/Mesh.c index 9d059af046d..1bfd0d26f27 100644 --- a/source/blender/python/api2_2x/Mesh.c +++ b/source/blender/python/api2_2x/Mesh.c @@ -2500,6 +2500,7 @@ static PyObject *MEdgeSeq_extend( BPy_MEdgeSeq * self, PyObject *args ) /* if a sequence... */ tmp = PyTuple_GET_ITEM( args, 0 ); if( PySequence_Check( tmp ) ) { + PyObject *tmp2 = 0; /* ignore empty sequences */ if( !PySequence_Size( tmp ) ) { @@ -2507,7 +2508,7 @@ static PyObject *MEdgeSeq_extend( BPy_MEdgeSeq * self, PyObject *args ) } /* if another sequence, use it */ - PyObject *tmp2 = PySequence_ITEM( tmp, 0 ); + tmp2 = PySequence_ITEM( tmp, 0 ); if( PySequence_Check( tmp2 ) ) args = tmp; Py_INCREF( args ); @@ -4068,6 +4069,7 @@ static PyObject *MFaceSeq_extend( BPy_MEdgeSeq * self, PyObject *args ) /* if a sequence... */ tmp = PyTuple_GET_ITEM( args, 0 ); if( PySequence_Check( tmp ) ) { + PyObject *tmp2 = 0; /* ignore empty sequences */ if( !PySequence_Size( tmp ) ) { @@ -4075,7 +4077,7 @@ static PyObject *MFaceSeq_extend( BPy_MEdgeSeq * self, PyObject *args ) } /* if another sequence, use it */ - PyObject *tmp2 = PySequence_ITEM( tmp, 0 ); + tmp2 = PySequence_ITEM( tmp, 0 ); if( PySequence_Check( tmp2 ) ) args = tmp; Py_INCREF( args ); diff --git a/source/blender/src/header_info.c b/source/blender/src/header_info.c index dfc04c6fe14..8e2b746d612 100644 --- a/source/blender/src/header_info.c +++ b/source/blender/src/header_info.c @@ -769,7 +769,7 @@ static void do_info_filemenu(void *arg, int event) } break; case 6: /* save image */ - BIF_save_rendered_image_fs(); + BIF_save_rendered_image_fs(0); break; case 22: /* save runtime */ activate_fileselect(FILE_SPECIAL, "Save Runtime", "", write_runtime_check); diff --git a/source/blender/src/toets.c b/source/blender/src/toets.c index b19c5fbbcb2..972b5a0af06 100644 --- a/source/blender/src/toets.c +++ b/source/blender/src/toets.c @@ -403,13 +403,15 @@ int blenderqread(unsigned short event, short val) break; case F3KEY: if(G.qual==0) { - BIF_save_rendered_image_fs(); + BIF_save_rendered_image_fs(0); return 0; } else if(G.qual & LR_CTRLKEY) { - /* all alt+ctrl+shift combos are needed here... */ BIF_screendump(0); } + else if(G.qual & LR_SHIFTKEY) { + BIF_save_rendered_image_fs(1); + } break; case F4KEY: if(G.qual==LR_SHIFTKEY) { diff --git a/source/blender/src/writeimage.c b/source/blender/src/writeimage.c index 808c10c4a17..8bafd14d0e0 100644 --- a/source/blender/src/writeimage.c +++ b/source/blender/src/writeimage.c @@ -83,10 +83,15 @@ void BIF_save_envmap(EnvMap *env, char *str) } +#define FTOCHAR(val) val<=0.0f?255: 255-(val>=255.0f?255: (char)(val)) + /* callback for fileselect to save rendered image, renderresult was checked to exist */ -static void save_rendered_image_cb(char *name) +static void save_rendered_image_cb_real(char *name, int zbuf) { char str[FILE_MAXDIR+FILE_MAXFILE]; + int pixel, end; + float *pixf = 0; + char *pixc = 0; if(BLI_testextensie(name,".blend")) { error("Wrong filename"); @@ -110,9 +115,26 @@ static void save_rendered_image_cb(char *name) waitcursor(1); /* from screen.c */ ibuf= IMB_allocImBuf(rres.rectx, rres.recty, G.scene->r.planes, 0, 0); - ibuf->rect= rres.rect32; - ibuf->rect_float= rres.rectf; - ibuf->zbuf_float= rres.rectz; + if (zbuf == 1) { + if (ibuf->rect ==NULL) imb_addrectImBuf(ibuf); + if (ibuf->rect_float==NULL) imb_addrectfloatImBuf(ibuf); + + ibuf->zbuf_float= rres.rectz; + + pixc = (char *)ibuf->rect; + pixf = (float *)ibuf->rect_float; + + end = ibuf->x * ibuf->y; + for(pixel = 0; pixel < end; pixel++, pixf+=4, pixc+=4) { + pixf[0] = pixf[1] = pixf[2] = pixf[3] = 1-rres.rectz[pixel]/100000000000; + pixc[0] = pixc[1] = pixc[2] = pixc[3] = FTOCHAR(rres.rectz[pixel]); + } + ibuf->zbuf_float= rres.rectz; + } else { + ibuf->rect= rres.rect32; + ibuf->rect_float= rres.rectf; + ibuf->zbuf_float= rres.rectz; + } BKE_write_ibuf(ibuf, str, G.scene->r.imtype, G.scene->r.subimtype, G.scene->r.quality); IMB_freeImBuf(ibuf); /* imbuf knows rects are not part of ibuf */ @@ -123,6 +145,14 @@ static void save_rendered_image_cb(char *name) } } +static void save_rendered_image_cb(char *name) { + save_rendered_image_cb_real(name,0); +} + +static void save_rendered_image_zbuf_cb(char *name) { + save_rendered_image_cb_real(name,1); +} + void save_image_filesel_str(char *str) { switch(G.scene->r.imtype) { @@ -171,8 +201,8 @@ void save_image_filesel_str(char *str) } } -/* calls fileselect */ -void BIF_save_rendered_image_fs(void) +/* calls fileselect if zbuf is set we are rendering the zbuffer */ +void BIF_save_rendered_image_fs(int zbuf) { RenderResult *rr= RE_GetResult(RE_GetRender("Render")); @@ -188,7 +218,12 @@ void BIF_save_rendered_image_fs(void) } save_image_filesel_str(str); + if (zbuf) { + activate_fileselect(FILE_SPECIAL, str, G.ima, save_rendered_image_zbuf_cb); + return; + } activate_fileselect(FILE_SPECIAL, str, G.ima, save_rendered_image_cb); } } + |