[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27337] trunk/blender: image re-project now uses offscreen render function and has input for render size .

Campbell Barton ideasman42 at gmail.com
Mon Mar 8 21:08:07 CET 2010


Revision: 27337
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27337
Author:   campbellbarton
Date:     2010-03-08 21:08:04 +0100 (Mon, 08 Mar 2010)

Log Message:
-----------
image re-project now uses offscreen render function and has input for render size.

unrelated changes that ended up being more trouble to commit separate...

- removed BLI_split_dirfile(), was nasty, occasionaly modifying the source string, it could create directories and used the $CWD in some cases. was only used in 2 places in filesel.c, if this gives problems can address without bringing back this function.
  renamed BLI_split_dirfile_basic --> BLI_split_dirfile

- view3d_operator_needs_opengl was being called for offscreen render when it wasnt needed.

Modified Paths:
--------------
    trunk/blender/release/scripts/op/image.py
    trunk/blender/release/scripts/ui/space_view3d_toolbar.py
    trunk/blender/source/blender/blenkernel/BKE_displist.h
    trunk/blender/source/blender/blenkernel/BKE_image.h
    trunk/blender/source/blender/blenkernel/intern/image.c
    trunk/blender/source/blender/blenkernel/intern/pointcache.c
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/blenkernel/intern/sound.c
    trunk/blender/source/blender/blenkernel/intern/text.c
    trunk/blender/source/blender/blenlib/BLI_path_util.h
    trunk/blender/source/blender/blenlib/intern/bpath.c
    trunk/blender/source/blender/blenlib/intern/path_util.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/collada/DocumentExporter.cpp
    trunk/blender/source/blender/collada/DocumentImporter.cpp
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/render/render_opengl.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_add.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesrna/intern/rna_sculpt_paint.c
    trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
    trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp

Modified: trunk/blender/release/scripts/op/image.py
===================================================================
--- trunk/blender/release/scripts/op/image.py	2010-03-08 18:55:11 UTC (rev 27336)
+++ trunk/blender/release/scripts/op/image.py	2010-03-08 20:08:04 UTC (rev 27337)
@@ -92,6 +92,7 @@
         
         filename = os.path.basename(bpy.data.filename)
         filename = os.path.splitext(filename)[0]
+        # filename = bpy.utils.clean_name(filename) # fixes <memory> rubbish, needs checking
 
         if filename.startswith("."): # TODO, have a way to check if the file is saved, assuem .B25.blend
             filename = os.path.join(os.path.dirname(bpy.data.filename), filename)

Modified: trunk/blender/release/scripts/ui/space_view3d_toolbar.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d_toolbar.py	2010-03-08 18:55:11 UTC (rev 27336)
+++ trunk/blender/release/scripts/ui/space_view3d_toolbar.py	2010-03-08 20:08:04 UTC (rev 27337)
@@ -910,6 +910,8 @@
         row = col.row(align=True)
         row.operator("image.project_edit", text="View Edit")
         row.operator("image.project_apply", text="Apply")
+
+        col.prop(ipaint, "screen_grab_size", text="")
         
         sub = col.column()
         sub.operator("paint.project_image")

Modified: trunk/blender/source/blender/blenkernel/BKE_displist.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_displist.h	2010-03-08 18:55:11 UTC (rev 27336)
+++ trunk/blender/source/blender/blenkernel/BKE_displist.h	2010-03-08 20:08:04 UTC (rev 27337)
@@ -62,6 +62,7 @@
 struct Bone;
 struct Mesh;
 struct EditMesh;
+struct DerivedMesh;
 
 /* used for curves, nurbs, mball, importing */
 typedef struct DispList {

Modified: trunk/blender/source/blender/blenkernel/BKE_image.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_image.h	2010-03-08 18:55:11 UTC (rev 27336)
+++ trunk/blender/source/blender/blenkernel/BKE_image.h	2010-03-08 20:08:04 UTC (rev 27337)
@@ -117,6 +117,8 @@
 
 /* adds image, adds ibuf, generates color or pattern */
 struct Image *BKE_add_image_size(int width, int height, char *name, int floatbuf, short uvtestgrid, float color[4]);
+/* adds image from imbuf, owns imbuf */
+struct Image *BKE_add_image_imbuf(struct ImBuf *ibuf);
 
 /* for reload, refresh, pack */
 void BKE_image_signal(struct Image *ima, struct ImageUser *iuser, int signal);

Modified: trunk/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/image.c	2010-03-08 18:55:11 UTC (rev 27336)
+++ trunk/blender/source/blender/blenkernel/intern/image.c	2010-03-08 20:08:04 UTC (rev 27337)
@@ -563,10 +563,8 @@
 /* adds new image block, creates ImBuf and initializes color */
 Image *BKE_add_image_size(int width, int height, char *name, int floatbuf, short uvtestgrid, float color[4])
 {
-	Image *ima;
-	
 	/* on save, type is changed to FILE in editsima.c */
-	ima= image_alloc(name, IMA_SRC_GENERATED, IMA_TYPE_UV_TEST);
+	Image *ima= image_alloc(name, IMA_SRC_GENERATED, IMA_TYPE_UV_TEST);
 	
 	if (ima) {
 		ImBuf *ibuf;
@@ -585,6 +583,23 @@
 	return ima;
 }
 
+/* creates an image image owns the imbuf passed */
+Image *BKE_add_image_imbuf(ImBuf *ibuf)
+{
+	/* on save, type is changed to FILE in editsima.c */
+	char filename[sizeof(ibuf->name)];
+	BLI_split_dirfile(ibuf->name, NULL, filename);
+	Image *ima= image_alloc(filename, IMA_SRC_FILE, IMA_TYPE_IMAGE);
+
+	if (ima) {
+		BLI_strncpy(ima->name, ibuf->name, FILE_MAX);
+		image_assign_ibuf(ima, ibuf, IMA_NO_INDEX, 0);
+		ima->ok= IMA_OK_LOADED;
+	}
+
+	return ima;
+}
+
 /* packs rect from memory as PNG */
 void BKE_image_memorypack(Image *ima)
 {

Modified: trunk/blender/source/blender/blenkernel/intern/pointcache.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/pointcache.c	2010-03-08 18:55:11 UTC (rev 27336)
+++ trunk/blender/source/blender/blenkernel/intern/pointcache.c	2010-03-08 20:08:04 UTC (rev 27337)
@@ -1060,7 +1060,7 @@
 
 		blendfilename= (lib)? lib->filename: G.sce;
 
-		BLI_split_dirfile_basic(blendfilename, NULL, file);
+		BLI_split_dirfile(blendfilename, NULL, file);
 		i = strlen(file);
 		
 		/* remove .blend */

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-03-08 18:55:11 UTC (rev 27336)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-03-08 20:08:04 UTC (rev 27337)
@@ -79,7 +79,9 @@
 #define SELECT 1
 ListBase seqbase_clipboard;
 int seqbase_clipboard_frame;
+void *sequencer_view3d_cb= NULL; /* NULL in background mode */
 
+
 void printf_strip(Sequence *seq)
 {
 	fprintf(stderr, "name: '%s', len:%d, start:%d, (startofs:%d, endofs:%d), (startstill:%d, endstill:%d), machine:%d, (startdisp:%d, enddisp:%d)\n",
@@ -2104,7 +2106,6 @@
 	} else if(seq->type == SEQ_SCENE) {	// scene can be NULL after deletions
 		Scene *sce= seq->scene;// *oldsce= scene;
 		Render *re;
-		RenderResult rres;
 		int have_seq= FALSE;
 		int sce_valid= FALSE;
 
@@ -2130,58 +2131,70 @@
 		if (!sce_valid) {
 			se->ok = STRIPELEM_FAILED;
 		} else if (se->ibuf==NULL && sce_valid) {
-			int oldcfra;
-			/* Hack! This function can be called from do_render_seq(), in that case
-			   the seq->scene can already have a Render initialized with same name, 
-			   so we have to use a default name. (compositor uses scene name to
-			   find render).
-			   However, when called from within the UI (image preview in sequencer)
-			   we do want to use scene Render, that way the render result is defined
-			   for display in render/imagewindow 
+			int do_opengl= 0;
+			if(do_opengl && have_seq==0 && (sequencer_view3d_cb!=NULL)) {
+				/* opengl offscreen render */
 
-			   Hmm, don't see, why we can't do that all the time, 
-			   and since G.rendering is uhm, gone... (Peter)
-			*/
+				/* sequencer_view3d_cb */
+				// void (*seq_view3d_cb)(Scene *, int, int, int, int)= sequencer_view3d_cb;
 
-			int rendering = 1;
-			int doseq;
+				// seq_view3d_cb(scene, cfra, render_size, seqrectx, seqrecty);
+			}
+			else {
+				RenderResult rres;
+				int oldcfra;
+				/* Hack! This function can be called from do_render_seq(), in that case
+				   the seq->scene can already have a Render initialized with same name,
+				   so we have to use a default name. (compositor uses scene name to
+				   find render).
+				   However, when called from within the UI (image preview in sequencer)
+				   we do want to use scene Render, that way the render result is defined
+				   for display in render/imagewindow
 
-			oldcfra = seq->scene->r.cfra;
+				   Hmm, don't see, why we can't do that all the time,
+				   and since G.rendering is uhm, gone... (Peter)
+				*/
 
-			if(rendering)
-				re= RE_NewRender(" do_build_seq_ibuf", RE_SLOT_DEFAULT);
-			else
-				re= RE_NewRender(sce->id.name, RE_SLOT_VIEW);
-			
-			/* prevent eternal loop */
-			doseq= scene->r.scemode & R_DOSEQ;
-			scene->r.scemode &= ~R_DOSEQ;
-			
-			RE_BlenderFrame(re, sce, NULL,
-					seq->sfra+se->nr+seq->anim_startofs);
-			
-			RE_AcquireResultImage(re, &rres);
-			
-			if(rres.rectf) {
-				se->ibuf= IMB_allocImBuf(rres.rectx, rres.recty, 32, IB_rectfloat, 0);
-				memcpy(se->ibuf->rect_float, rres.rectf, 4*sizeof(float)*rres.rectx*rres.recty);
-				if(rres.rectz) {
-					addzbuffloatImBuf(se->ibuf);
-					memcpy(se->ibuf->zbuf_float, rres.rectz, sizeof(float)*rres.rectx*rres.recty);
+				int rendering = 1;
+				int doseq;
+
+				oldcfra = seq->scene->r.cfra;
+
+				if(rendering)
+					re= RE_NewRender(" do_build_seq_ibuf", RE_SLOT_DEFAULT);
+				else
+					re= RE_NewRender(sce->id.name, RE_SLOT_VIEW);
+
+				/* prevent eternal loop */
+				doseq= scene->r.scemode & R_DOSEQ;
+				scene->r.scemode &= ~R_DOSEQ;
+
+				RE_BlenderFrame(re, sce, NULL,
+						seq->sfra+se->nr+seq->anim_startofs);
+
+				RE_AcquireResultImage(re, &rres);
+
+				if(rres.rectf) {
+					se->ibuf= IMB_allocImBuf(rres.rectx, rres.recty, 32, IB_rectfloat, 0);
+					memcpy(se->ibuf->rect_float, rres.rectf, 4*sizeof(float)*rres.rectx*rres.recty);
+					if(rres.rectz) {
+						addzbuffloatImBuf(se->ibuf);
+						memcpy(se->ibuf->zbuf_float, rres.rectz, sizeof(float)*rres.rectx*rres.recty);
+					}
+				} else if (rres.rect32) {
+					se->ibuf= IMB_allocImBuf(rres.rectx, rres.recty, 32, IB_rect, 0);
+					memcpy(se->ibuf->rect, rres.rect32, 4*rres.rectx*rres.recty);
 				}
-			} else if (rres.rect32) {
-				se->ibuf= IMB_allocImBuf(rres.rectx, rres.recty, 32, IB_rect, 0);
-				memcpy(se->ibuf->rect, rres.rect32, 4*rres.rectx*rres.recty);
-			}
 
-			RE_ReleaseResultImage(re);
+				RE_ReleaseResultImage(re);
+
+				// BIF_end_render_callbacks();
+
+				/* restore */
+				scene->r.scemode |= doseq;
 			
-			// BIF_end_render_callbacks();
-			
-			/* restore */
-			scene->r.scemode |= doseq;
-		
-			seq->scene->r.cfra = oldcfra;
+				seq->scene->r.cfra = oldcfra;
+			}
 
 			copy_to_ibuf_still(seq, se);
 
@@ -3803,7 +3816,7 @@
 	strip->len = seq->len = seq_load->len ? seq_load->len : 1;
 	strip->us= 1;
 	strip->stripdata= se= MEM_callocN(seq->len*sizeof(StripElem), "stripelem");
-	BLI_split_dirfile_basic(seq_load->path, strip->dir, se->name);
+	BLI_split_dirfile(seq_load->path, strip->dir, se->name);
 	
 	seq_load_apply(scene, seq, seq_load);
 
@@ -3853,7 +3866,7 @@
 
 	strip->stripdata= se= MEM_callocN(seq->len*sizeof(StripElem), "stripelem");
 
-	BLI_split_dirfile_basic(seq_load->path, strip->dir, se->name);
+	BLI_split_dirfile(seq_load->path, strip->dir, se->name);
 
 	seq->scene_sound = sound_add_scene_sound(scene, seq, seq_load->start_frame, seq_load->start_frame + strip->len, 0);
 
@@ -3897,7 +3910,7 @@
 
 	strip->stripdata= se= MEM_callocN(seq->len*sizeof(StripElem), "stripelem");
 
-	BLI_split_dirfile_basic(seq_load->path, strip->dir, se->name);
+	BLI_split_dirfile(seq_load->path, strip->dir, se->name);
 
 	calc_sequence_disp(scene, seq);
 

Modified: trunk/blender/source/blender/blenkernel/intern/sound.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sound.c	2010-03-08 18:55:11 UTC (rev 27336)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list