[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23690] trunk/blender/source/blender: Preview Render:

Brecht Van Lommel brecht at blender.org
Wed Oct 7 16:48:30 CEST 2009


Revision: 23690
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23690
Author:   blendix
Date:     2009-10-07 16:48:29 +0200 (Wed, 07 Oct 2009)

Log Message:
-----------
Preview Render:
* Fixes for texture and material nodes.
* Texture node previews now work more like materials.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_render.h
    trunk/blender/source/blender/editors/render/render_preview.c
    trunk/blender/source/blender/editors/space_node/node_draw.c
    trunk/blender/source/blender/editors/space_node/space_node.c
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesrna/intern/rna_material.c
    trunk/blender/source/blender/makesrna/intern/rna_texture.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_at.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_checker.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_compose.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_coord.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_curves.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_decompose.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_distance.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_hueSatVal.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_image.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_invert.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_math.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_mixRgb.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_output.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_proc.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_rotate.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_scale.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_texture.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_translate.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_valToNor.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_valToRgb.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_viewer.c
    trunk/blender/source/blender/nodes/intern/TEX_util.c
    trunk/blender/source/blender/nodes/intern/TEX_util.h
    trunk/blender/source/blender/render/intern/source/shadeinput.c
    trunk/blender/source/blender/render/intern/source/texture.c

Modified: trunk/blender/source/blender/editors/include/ED_render.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_render.h	2009-10-07 14:40:27 UTC (rev 23689)
+++ trunk/blender/source/blender/editors/include/ED_render.h	2009-10-07 14:48:29 UTC (rev 23690)
@@ -64,21 +64,19 @@
 /* Render the preview
 
 pr_method:
-- PR_DRAW_RENDER: preview is rendered and drawn, as indicated by called context (buttons panel)
-- PR_ICON_RENDER: the preview is not drawn and the function is not dynamic,
-  so no events are processed. Hopefully fast enough for at least 32x32 
-- PR_DO_RENDER: preview is rendered, not drawn, but events are processed for afterqueue,
-  in use for node editor now.
+- PR_BUTS_RENDER: preview is rendered for buttons window
+- PR_ICON_RENDER: preview is rendered for icons. hopefully fast enough for at least 32x32 
+- PR_NODE_RENDER: preview is rendered for node editor.
 */
 
-#define PR_DRAW_RENDER	0
+#define PR_BUTS_RENDER	0
 #define PR_ICON_RENDER	1
-#define PR_DO_RENDER	2
+#define PR_NODE_RENDER	2
 
 void ED_preview_init_dbase(void);
 void ED_preview_free_dbase(void);
 
-void ED_preview_shader_job(const struct bContext *C, void *owner, struct ID *id, struct ID *parent, struct MTex *slot, int sizex, int sizey);
+void ED_preview_shader_job(const struct bContext *C, void *owner, struct ID *id, struct ID *parent, struct MTex *slot, int sizex, int sizey, int method);
 void ED_preview_icon_job(const struct bContext *C, void *owner, struct ID *id, unsigned int *rect, int sizex, int sizey);
 
 void ED_preview_draw(const struct bContext *C, void *idp, void *parentp, void *slot, rcti *rect);

Modified: trunk/blender/source/blender/editors/render/render_preview.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_preview.c	2009-10-07 14:40:27 UTC (rev 23689)
+++ trunk/blender/source/blender/editors/render/render_preview.c	2009-10-07 14:48:29 UTC (rev 23690)
@@ -359,7 +359,7 @@
 				}
 				else {
 					sce->lay= 1<<mat->pr_type;
-					if(mat->nodetree)
+					if(mat->nodetree && sp->pr_method==PR_NODE_RENDER)
 						ntreeInitPreview(mat->nodetree, sp->sizex, sp->sizey);
 				}
 			}
@@ -408,6 +408,9 @@
 					}
 				}
 			}
+
+			if(tex && tex->nodetree && sp->pr_method==PR_NODE_RENDER)
+				ntreeInitPreview(tex->nodetree, sp->sizex, sp->sizey);
 		}
 		else if(id_type==ID_LA) {
 			Lamp *la= (Lamp *)id;
@@ -529,7 +532,7 @@
 		}
 		
 		if(ok==0) {
-			ED_preview_shader_job(C, sa, id, parent, slot, newx, newy);
+			ED_preview_shader_job(C, sa, id, parent, slot, newx, newy, PR_BUTS_RENDER);
 		}
 	}	
 }
@@ -880,11 +883,12 @@
 	Render *re;
 	Scene *sce;
 	float oldlens;
+	short idtype= GS(id->name);
 	char name[32];
 	int sizex;
 
 	/* get the stuff from the builtin preview dbase */
-	sce= preview_prepare_scene(sp->scene, id, GS(id->name), sp); // XXX sizex
+	sce= preview_prepare_scene(sp->scene, id, idtype, sp); // XXX sizex
 	if(sce==NULL) return;
 	
 	if(!split || first) sprintf(name, "Preview %p", sp->owner);
@@ -896,14 +900,19 @@
 		re= RE_NewRender(name);
 		
 	/* sce->r gets copied in RE_InitState! */
-	if(sp->pr_method==PR_DO_RENDER) {
-		sce->r.scemode |= R_NODE_PREVIEW;
-		sce->r.scemode &= ~R_NO_IMAGE_LOAD;
+	sce->r.scemode &= ~(R_MATNODE_PREVIEW|R_TEXNODE_PREVIEW);
+	sce->r.scemode &= ~R_NO_IMAGE_LOAD;
+
+	if(sp->pr_method==PR_ICON_RENDER) {
+		sce->r.scemode |= R_NO_IMAGE_LOAD;
+	}
+	else if(sp->pr_method==PR_NODE_RENDER) {
+		if(idtype == ID_MA) sce->r.scemode |= R_MATNODE_PREVIEW;
+		else if(idtype == ID_TE) sce->r.scemode |= R_TEXNODE_PREVIEW;
 		sce->r.mode |= R_OSA;
 	}
-	else {	/* PR_ICON_RENDER */
-		sce->r.scemode &= ~R_NODE_PREVIEW;
-		sce->r.scemode |= R_NO_IMAGE_LOAD;
+	else {	/* PR_BUTS_RENDER */
+		sce->r.mode |= R_OSA;
 	}
 
 	/* in case of split preview, use border render */
@@ -917,7 +926,7 @@
 	RE_InitState(re, NULL, &sce->r, sizex, sp->sizey, NULL);
 
 	/* callbacs are cleared on GetRender() */
-	if(sp->pr_method==PR_DO_RENDER) {
+	if(sp->pr_method==PR_BUTS_RENDER) {
 		RE_display_draw_cb(re, sp, shader_preview_draw);
 		RE_test_break_cb(re, sp, shader_preview_break);
 	}
@@ -1125,7 +1134,7 @@
 	WM_jobs_start(CTX_wm_manager(C), steve);
 }
 
-void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, MTex *slot, int sizex, int sizey)
+void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, MTex *slot, int sizex, int sizey, int method)
 {
 	wmJob *steve;
 	ShaderPreview *sp;
@@ -1138,7 +1147,7 @@
 	sp->owner= owner;
 	sp->sizex= sizex;
 	sp->sizey= sizey;
-	sp->pr_method= PR_DO_RENDER;
+	sp->pr_method= method;
 	sp->id = id;
 	sp->parent= parent;
 	sp->slot= slot;

Modified: trunk/blender/source/blender/editors/space_node/node_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_draw.c	2009-10-07 14:40:27 UTC (rev 23689)
+++ trunk/blender/source/blender/editors/space_node/node_draw.c	2009-10-07 14:48:29 UTC (rev 23690)
@@ -54,6 +54,7 @@
 #include "MEM_guardedalloc.h"
 
 #include "BKE_context.h"
+#include "BKE_depsgraph.h"
 #include "BKE_global.h"
 #include "BKE_image.h"
 #include "BKE_library.h"
@@ -102,6 +103,7 @@
 		return;
 
 	if(snode->treetype==NTREE_SHADER) {
+		DAG_id_flush_update(snode->id, 0);
 		WM_event_add_notifier(C, NC_MATERIAL|ND_SHADING, snode->id);
 	}
 	else if(snode->treetype==NTREE_COMPOSIT) {
@@ -127,6 +129,7 @@
 		WM_event_add_notifier(C, NC_SCENE|ND_NODES, CTX_data_scene(C));
 	}			
 	else if(snode->treetype==NTREE_TEXTURE) {
+		DAG_id_flush_update(snode->id, 0);
 		WM_event_add_notifier(C, NC_TEXTURE|ND_NODES, snode->id);
 	}
 

Modified: trunk/blender/source/blender/editors/space_node/space_node.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/space_node.c	2009-10-07 14:40:27 UTC (rev 23689)
+++ trunk/blender/source/blender/editors/space_node/space_node.c	2009-10-07 14:48:29 UTC (rev 23690)
@@ -179,12 +179,14 @@
 {
 	/* default now: refresh node is starting preview */
 	SpaceNode *snode= sa->spacedata.first;
+
+	snode_set_context(snode, CTX_data_scene(C));
 	
 	if(snode->nodetree) {
 		if(snode->treetype==NTREE_SHADER) {
 			Material *ma= (Material *)snode->id;
 			if(ma->use_nodes)
-				ED_preview_shader_job(C, sa, snode->id, NULL, NULL, 100, 100);
+				ED_preview_shader_job(C, sa, snode->id, NULL, NULL, 100, 100, PR_NODE_RENDER);
 		}
 		else if(snode->treetype==NTREE_COMPOSIT) {
 			Scene *scene= (Scene *)snode->id;
@@ -194,7 +196,7 @@
 		else if(snode->treetype==NTREE_TEXTURE) {
 			Tex *tex= (Tex *)snode->id;
 			if(tex->use_nodes) {
-				ED_preview_shader_job(C, sa, snode->id, NULL, NULL, 100, 100);
+				ED_preview_shader_job(C, sa, snode->id, NULL, NULL, 100, 100, PR_NODE_RENDER);
 			}
 		}
 	}

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2009-10-07 14:40:27 UTC (rev 23689)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2009-10-07 14:48:29 UTC (rev 23690)
@@ -840,7 +840,7 @@
 #define R_PASSEPARTOUT		0x0004
 #define R_PREVIEWBUTS		0x0008
 #define R_EXTENSION			0x0010
-#define R_NODE_PREVIEW		0x0020
+#define R_MATNODE_PREVIEW	0x0020
 #define R_DOCOMP			0x0040
 #define R_COMP_CROP			0x0080
 #define R_FREE_IMAGE		0x0100
@@ -852,7 +852,8 @@
 #define R_STAMP_INFO		0x4000	/* deprecated */
 #define R_FULL_SAMPLE		0x8000
 #define R_COMP_RERENDER		0x10000
-#define R_RECURS_PROTECTION     0x20000
+#define R_RECURS_PROTECTION	0x20000
+#define R_TEXNODE_PREVIEW	0x40000
 
 /* r->stamp */
 #define R_STAMP_TIME 	0x0001

Modified: trunk/blender/source/blender/makesrna/intern/rna_material.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_material.c	2009-10-07 14:40:27 UTC (rev 23689)
+++ trunk/blender/source/blender/makesrna/intern/rna_material.c	2009-10-07 14:48:29 UTC (rev 23690)
@@ -1716,7 +1716,7 @@
 	RNA_def_property_boolean_sdna(prop, NULL, "use_nodes", 1);
 	RNA_def_property_boolean_funcs(prop, NULL, "rna_Material_use_nodes_set");
 	RNA_def_property_ui_text(prop, "Use Nodes", "Use shader nodes to render the material.");
-	RNA_def_property_update(prop, NC_MATERIAL, NULL);
+	RNA_def_property_update(prop, 0, "rna_Material_update");
 
 	prop= RNA_def_property(srna, "active_node_material", PROP_POINTER, PROP_NONE);
 	RNA_def_property_struct_type(prop, "Material");

Modified: trunk/blender/source/blender/makesrna/intern/rna_texture.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_texture.c	2009-10-07 14:40:27 UTC (rev 23689)
+++ trunk/blender/source/blender/makesrna/intern/rna_texture.c	2009-10-07 14:48:29 UTC (rev 23690)
@@ -107,6 +107,14 @@
 	WM_event_add_notifier(C, NC_TEXTURE, tex);
 }
 
+static void rna_Texture_nodes_update(bContext *C, PointerRNA *ptr)
+{
+	Tex *tex= ptr->id.data;
+
+	DAG_id_flush_update(&tex->id, 0);
+	WM_event_add_notifier(C, NC_TEXTURE|ND_NODES, tex);
+}
+
 static void rna_Texture_type_set(PointerRNA *ptr, int value)
 {
 	Tex *tex= (Tex*)ptr->data;
@@ -1678,12 +1686,12 @@
 	RNA_def_property_boolean_sdna(prop, NULL, "use_nodes", 1);
 	RNA_def_property_boolean_funcs(prop, NULL, "rna_Texture_use_nodes_set");
 	RNA_def_property_ui_text(prop, "Use Nodes", "Make this a node-based texture");
-	RNA_def_property_update(prop, 0, "rna_Texture_update");
+	RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
 	
 	prop= RNA_def_property(srna, "node_tree", PROP_POINTER, PROP_NONE);
 	RNA_def_property_pointer_sdna(prop, NULL, "nodetree");
 	RNA_def_property_ui_text(prop, "Node Tree", "Node tree for node-based textures");
-	RNA_def_property_update(prop, 0, "rna_Texture_update");
+	RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
 	
 	rna_def_animdata_common(srna);
 

Modified: trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_at.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_at.c	2009-10-07 14:40:27 UTC (rev 23689)
+++ trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_at.c	2009-10-07 14:48:29 UTC (rev 23690)
@@ -50,7 +50,7 @@
 
 static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
 {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list