From cc33d731856560896362f94d11cb16f66ca4d3d7 Mon Sep 17 00:00:00 2001 From: Tamito Kajiyama Date: Sun, 20 Jul 2014 17:41:36 +0900 Subject: Freestyle: Fix for an increasing reference count of images in copied Image Texture shader nodes. --- .../freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp | 6 +++--- .../freestyle/intern/blender_interface/BlenderStrokeRenderer.h | 2 +- source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp | 6 +++++- 3 files changed, 9 insertions(+), 5 deletions(-) (limited to 'source/blender/freestyle/intern') diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp index d0ab6b1a606..209f0f22c03 100644 --- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp +++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp @@ -232,7 +232,7 @@ unsigned int BlenderStrokeRenderer::get_stroke_mesh_id(void) const return mesh_id; } -Material* BlenderStrokeRenderer::GetStrokeShader(bContext *C, Main *bmain, bNodeTree *iNodeTree) +Material* BlenderStrokeRenderer::GetStrokeShader(bContext *C, Main *bmain, bNodeTree *iNodeTree, bool do_id_user) { Material *ma = BKE_material_add(bmain, "stroke_shader"); bNodeTree *ntree; @@ -242,7 +242,7 @@ Material* BlenderStrokeRenderer::GetStrokeShader(bContext *C, Main *bmain, bNode if (iNodeTree) { // make a copy of linestyle->nodetree - ntree = ntreeCopyTree_ex(iNodeTree, bmain, true); + ntree = ntreeCopyTree_ex(iNodeTree, bmain, do_id_user); // find the active Output Line Style node for (bNode *node = (bNode *)ntree->nodes.first; node; node = node->next) { @@ -387,7 +387,7 @@ void BlenderStrokeRenderer::RenderStrokeRep(StrokeRep *iStrokeRep) const bNodeTree *nt = iStrokeRep->getNodeTree(); Material *ma = (Material *)BLI_ghash_lookup(_nodetree_hash, nt); if (!ma) { - ma = BlenderStrokeRenderer::GetStrokeShader(_context, freestyle_bmain, nt); + ma = BlenderStrokeRenderer::GetStrokeShader(_context, freestyle_bmain, nt, false); BLI_ghash_insert(_nodetree_hash, nt, ma); #if 0 if (G.debug & G_DEBUG_FREESTYLE) { diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h index 32adc3e2cf1..956ec16dae6 100644 --- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h +++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h @@ -55,7 +55,7 @@ public: Render *RenderScene(Render *re, bool render); - static Material* GetStrokeShader(bContext *C, Main *bmain, bNodeTree *iNodeTree); + static Material* GetStrokeShader(bContext *C, Main *bmain, bNodeTree *iNodeTree, bool do_id_user); protected: Main *freestyle_bmain; diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp index c4df9c5d716..1c8df35cb3e 100644 --- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp +++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp @@ -43,6 +43,7 @@ extern "C" { #include "DNA_camera_types.h" #include "DNA_freestyle_types.h" #include "DNA_group_types.h" +#include "DNA_material_types.h" #include "DNA_text_types.h" #include "BKE_freestyle.h" @@ -737,12 +738,15 @@ void FRS_move_active_lineset_down(FreestyleConfig *config) Material *FRS_create_stroke_material(bContext *C, Main *bmain, Scene *scene) { FreestyleLineStyle *linestyle = BKE_linestyle_active_from_scene(scene); + Material *ma; if (!linestyle) { cout << "FRS_create_stroke_material: No active line style in the current scene" << endl; return NULL; } - return BlenderStrokeRenderer::GetStrokeShader(C, bmain, linestyle->nodetree); + ma = BlenderStrokeRenderer::GetStrokeShader(C, bmain, linestyle->nodetree, true); + ma->id.us = 0; + return ma; } } // extern "C" -- cgit v1.2.3