2.5
authorTon Roosendaal <ton@blender.org>
Sat, 24 Jan 2009 14:24:59 +0000 (14:24 +0000)
committerTon Roosendaal <ton@blender.org>
Sat, 24 Jan 2009 14:24:59 +0000 (14:24 +0000)
- writeimage.c back, put in space_file now...
- renamed fluidsim.c to distinguish from bke version

source/blender/editors/physics/ed_fluidsim.c [moved from source/blender/editors/physics/fluidsim.c with 100% similarity]
source/blender/editors/space_file/Makefile
source/blender/editors/space_file/SConscript
source/blender/editors/space_file/writeimage.c [new file with mode: 0644]

index 698effb0022e50074532deccbea390bd86d37151..7a41f66fb1d8ab50b095329049c9627b1c356b4c 100644 (file)
@@ -47,6 +47,7 @@ CPPFLAGS += -I../../blenlib
 CPPFLAGS += -I../../makesdna
 CPPFLAGS += -I../../makesrna
 CPPFLAGS += -I../../imbuf
+CPPFLAGS += -I../../render/extern/include
 CPPFLAGS += -I../../python
 CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
 
index 99f101fa586d15ec26debf1f934e0e254c13e010..dab30676171f43a189ed205334437405019f8688 100644 (file)
@@ -5,6 +5,7 @@ sources = env.Glob('*.c')
 
 incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
 incs += ' ../../blenloader #intern/bmfont ../../makesrna'
+incs += ' ../../render/extern/include '
 incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
 
 env.BlenderLib ( 'bf_editors_space_file', sources, Split(incs), [], libtype=['core'], priority=[115] )
diff --git a/source/blender/editors/space_file/writeimage.c b/source/blender/editors/space_file/writeimage.c
new file mode 100644 (file)
index 0000000..2589095
--- /dev/null
@@ -0,0 +1,252 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <string.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
+
+#include "BLI_blenlib.h"
+
+#include "DNA_image_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_space_types.h"
+#include "DNA_texture_types.h"
+
+#include "BKE_context.h"
+#include "BKE_global.h"
+#include "BKE_image.h"
+#include "BKE_utildefines.h"
+
+#include "RE_pipeline.h"
+
+#include "file_intern.h"
+
+/* XXX */
+static void error() {}
+static void waitcursor() {}
+static void activate_fileselect() {}
+static int saveover() {return 0;}
+/* XXX */
+
+
+/* ------------------------------------------------------------------------- */
+
+
+void BIF_save_envmap(Scene *scene, EnvMap *env, char *str)
+{
+       ImBuf *ibuf;
+/*     extern rectcpy(); */
+       int dx;
+       
+       /* all interactive stuff is handled in buttons.c */
+       if(env->cube[0]==NULL) return;
+               
+       dx= env->cube[0]->x;
+       ibuf= IMB_allocImBuf(3*dx, 2*dx, 24, IB_rect, 0);
+       
+       IMB_rectcpy(ibuf, env->cube[0], 0, 0, 0, 0, dx, dx);
+       IMB_rectcpy(ibuf, env->cube[1], dx, 0, 0, 0, dx, dx);
+       IMB_rectcpy(ibuf, env->cube[2], 2*dx, 0, 0, 0, dx, dx);
+       IMB_rectcpy(ibuf, env->cube[3], 0, dx, 0, 0, dx, dx);
+       IMB_rectcpy(ibuf, env->cube[4], dx, dx, 0, 0, dx, dx);
+       IMB_rectcpy(ibuf, env->cube[5], 2*dx, dx, 0, 0, dx, dx);
+       
+       BKE_write_ibuf(scene, ibuf, str, scene->r.imtype, scene->r.subimtype, scene->r.quality);
+       IMB_freeImBuf(ibuf);
+}
+
+
+
+/* callback for fileselect to save rendered image, renderresult was checked to exist */
+static void save_rendered_image_cb_real(char *name, int confirm)
+{
+       Scene *scene= NULL; // XXX
+       char str[FILE_MAXDIR+FILE_MAXFILE];
+       int overwrite;
+       
+       if(BLI_testextensie(name,".blend")) {
+               error("Wrong filename");
+               return;
+       }
+       
+       /* BKE_add_image_extension() checks for if extension was already set */
+       if(scene->r.scemode & R_EXTENSION) 
+               if(strlen(name)<FILE_MAXDIR+FILE_MAXFILE-5)
+                       BKE_add_image_extension(scene, name, scene->r.imtype);
+
+       strcpy(str, name);
+       BLI_convertstringcode(str, G.sce);
+       BLI_convertstringframe(str, scene->r.cfra); /* TODO - is this even used? */
+
+       if (confirm)
+               overwrite = saveover(str);
+       else
+               overwrite = 1;
+       
+       if(overwrite) {
+               if(scene->r.imtype==R_MULTILAYER) {
+                       RenderResult *rr= RE_GetResult(RE_GetRender(scene->id.name));
+                       if(rr) 
+                               RE_WriteRenderResult(rr, str, scene->r.quality);
+               }
+               else {
+                       RenderResult rres;
+                       ImBuf *ibuf;
+                       
+                       RE_GetResultImage(RE_GetRender(scene->id.name), &rres);
+
+                       waitcursor(1); /* from screen.c */
+
+                       ibuf= IMB_allocImBuf(rres.rectx, rres.recty, scene->r.planes, 0, 0);
+                       ibuf->rect= (unsigned int *)rres.rect32;
+                       ibuf->rect_float= rres.rectf;
+                       ibuf->zbuf_float= rres.rectz;
+                       
+                       /* float factor for random dither, imbuf takes care of it */
+                       ibuf->dither= scene->r.dither_intensity;
+                       
+                       BKE_write_ibuf(scene, ibuf, str, scene->r.imtype, scene->r.subimtype, scene->r.quality);
+                       IMB_freeImBuf(ibuf);    /* imbuf knows rects are not part of ibuf */
+               }
+               
+               strcpy(G.ima, name);
+               
+               waitcursor(0);
+       }
+}
+
+
+void save_image_filesel_str(Scene *scene, char *str)
+{
+       switch(scene->r.imtype) {
+               case R_RADHDR:
+                       strcpy(str, "Save Radiance HDR");
+                       break;
+               case R_FFMPEG:
+               case R_PNG:
+                       strcpy(str, "Save PNG");
+                       break;
+#ifdef WITH_DDS
+               case R_DDS:
+                       strcpy(str, "Save DDS");
+                       break;
+#endif
+               case R_BMP:
+                       strcpy(str, "Save BMP");
+                       break;
+               case R_TIFF:
+                       if (G.have_libtiff)
+                               strcpy(str, "Save TIFF");
+                       break;
+#ifdef WITH_OPENEXR
+               case R_OPENEXR:
+                       strcpy(str, "Save OpenEXR");
+                       break;
+#endif
+               case R_CINEON:
+                       strcpy(str, "Save Cineon");
+                       break;
+               case R_DPX:
+                       strcpy(str, "Save DPX");
+                       break;
+               case R_RAWTGA:
+                       strcpy(str, "Save Raw Targa");
+                       break;
+               case R_IRIS:
+                       strcpy(str, "Save IRIS");
+                       break;
+               case R_IRIZ:
+                       strcpy(str, "Save IRIS");
+                       break;
+               case R_HAMX:
+                       strcpy(str, "Save HAMX");
+                       break;
+               case R_TARGA:
+                       strcpy(str, "Save Targa");
+                       break;
+               case R_MULTILAYER:
+                       strcpy(str, "Save Multi Layer EXR");
+                       break;
+#ifdef WITH_OPENJPEG
+               case R_JP2:
+                       strcpy(str, "Save JPEG2000");
+                       break;
+#endif
+                       /* default we save jpeg, also for all movie formats */
+               case R_JPEG90:
+               case R_MOVIE:
+               case R_AVICODEC:
+               case R_AVIRAW:
+               case R_AVIJPEG:
+               default:
+                       strcpy(str, "Save JPEG");
+                       break;
+       }       
+}
+
+static void save_rendered_image_cb(char *name) 
+{
+       save_rendered_image_cb_real(name, 1);
+}
+
+/* no fileselect, no confirm */
+void BIF_save_rendered_image(char *name)
+{
+       save_rendered_image_cb_real(name, 0);
+}
+       
+/* calls fileselect */
+void BIF_save_rendered_image_fs(Scene *scene)
+{
+       RenderResult rres;
+       
+       RE_GetResultImage(RE_GetRender(scene->id.name), &rres);
+
+       if(!rres.rectf && !rres.rect32) {
+               error("No image rendered");
+       } 
+       else {
+               char dir[FILE_MAXDIR * 2], str[FILE_MAXFILE * 2];
+               
+               if(G.ima[0]==0) {
+                       strcpy(dir, G.sce);
+                       BLI_splitdirstring(dir, str);
+                       strcpy(G.ima, dir);
+               }
+               
+               save_image_filesel_str(scene, str);
+               activate_fileselect(FILE_SPECIAL, str, G.ima, save_rendered_image_cb);
+       }
+}
+
+