[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18700] branches/blender2.5/blender/source /blender/blenkernel: 2.5
Ton Roosendaal
ton at blender.org
Tue Jan 27 20:32:44 CET 2009
Revision: 18700
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18700
Author: ton
Date: 2009-01-27 20:32:44 +0100 (Tue, 27 Jan 2009)
Log Message:
-----------
2.5
Added support in threaded compositor to copy the viewer
image safely away, prevents crashing especially for
people using blender -E or redrawing viewer while it
composites.
(Note; reloading images in nodes, render result, and
probably other cases have to be checked still)
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenkernel/BKE_image.h
branches/blender2.5/blender/source/blender/blenkernel/intern/image.c
branches/blender2.5/blender/source/blender/blenkernel/intern/node.c
Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_image.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_image.h 2009-01-27 18:36:58 UTC (rev 18699)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_image.h 2009-01-27 19:32:44 UTC (rev 18700)
@@ -148,6 +148,12 @@
/* prints memory statistics for images */
void BKE_image_print_memlist(void);
+/* empty image block, of similar type and filename */
+struct Image *BKE_image_copy(struct Image *ima);
+
+/* merge source into dest, and free source */
+void BKE_image_merge(struct Image *dest, struct Image *source);
+
#ifdef __cplusplus
}
#endif
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/image.c 2009-01-27 18:36:58 UTC (rev 18699)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/image.c 2009-01-27 19:32:44 UTC (rev 18700)
@@ -91,6 +91,7 @@
/* quick lookup: supports 1 million frames, thousand passes */
#define IMA_MAKE_INDEX(frame, index) ((frame)<<10)+index
#define IMA_INDEX_FRAME(index) (index>>10)
+#define IMA_INDEX_PASS(index) (index & ~1023)
/* ******** IMAGE PROCESSING ************* */
@@ -332,6 +333,33 @@
}
}
+/* empty image block, of similar type and filename */
+Image *BKE_image_copy(Image *ima)
+{
+ Image *new= image_alloc(ima->id.name+2, ima->source, ima->type);
+
+ BLI_strncpy(new->name, ima->name, sizeof(ima->name));
+
+ new->gen_x= ima->gen_x;
+ new->gen_y= ima->gen_y;
+ new->gen_type= ima->gen_type;
+
+ return new;
+}
+
+void BKE_image_merge(Image *dest, Image *source)
+{
+ ImBuf *ibuf;
+
+ while((ibuf= source->ibufs.first)) {
+ BLI_remlink(&source->ibufs, ibuf);
+ image_assign_ibuf(dest, ibuf, IMA_INDEX_PASS(ibuf->index), IMA_INDEX_FRAME(ibuf->index));
+ }
+
+ free_libblock(&G.main->image, source);
+}
+
+
/* checks if image was already loaded, then returns same image */
/* otherwise creates new. */
/* does not load ibuf itself */
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/node.c 2009-01-27 18:36:58 UTC (rev 18699)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/node.c 2009-01-27 19:32:44 UTC (rev 18700)
@@ -2487,6 +2487,12 @@
/* ensure new user input gets handled ok */
node->need_exec= 0;
+ if(ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) {
+ if(node->id && (node->flag & NODE_DO_OUTPUT)) {
+ node->new_node->id= (ID *)BKE_image_copy((Image *)node->id);
+ }
+ }
+
for(sock= node->outputs.first; sock; sock= sock->next) {
sock->new_sock->ns.data= sock->ns.data;
@@ -2555,6 +2561,12 @@
lnode->preview= NULL;
}
+ if(ELEM(lnode->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) {
+ if(lnode->id && (lnode->flag & NODE_DO_OUTPUT)) {
+ BKE_image_merge((Image *)lnode->new_node->id, (Image *)lnode->id);
+ }
+ }
+
for(lsock= lnode->outputs.first; lsock; lsock= lsock->next) {
if(outsocket_exists(lnode->new_node, lsock->new_sock)) {
lsock->new_sock->ns.data= lsock->ns.data;
More information about the Bf-blender-cvs
mailing list