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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs