Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2016-04-04 16:43:45 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2016-04-04 16:49:30 +0300
commitd82d9e14e8194f2594718276bcc7bde415323344 (patch)
treee3806c754f313142dc38e07001508b07496f5fc4 /source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
parentf76dec9238a2a2d1f777ea0abc6bda3595948e21 (diff)
Fix T48045: Freestyle ID user decrement error.
This fixes reported issue, but there could be more of those hidden in Freestyle code, it did not handle user refcount at all (and the fact it by-passes BKE in some places for efficiency does not help here). Note that this should be relatively harmless, since freestyle uses own Main during render, so everything is cleaned up in the end in any case... But better try to handle IDs correctly here too. :)
Diffstat (limited to 'source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp')
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
index 7c10591591c..5c361de8d8d 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
@@ -243,6 +243,8 @@ Material* BlenderStrokeRenderer::GetStrokeShader(Main *bmain, bNodeTree *iNodeTr
PointerRNA fromptr, toptr;
NodeShaderAttribute *storage;
+ id_us_min(&ma->id);
+
if (iNodeTree) {
// make a copy of linestyle->nodetree
ntree = ntreeCopyTree_ex(iNodeTree, bmain, do_id_user);
@@ -514,6 +516,8 @@ void BlenderStrokeRenderer::RenderStrokeRepBasic(StrokeRep *iStrokeRep) const
ma->mode |= MA_SHLESS;
ma->vcol_alpha = 1;
+ id_us_min(&ma->id);
+
// Textures
while (iStrokeRep->getMTex(a)) {
ma->mtex[a] = (MTex *)iStrokeRep->getMTex(a);
@@ -734,6 +738,7 @@ void BlenderStrokeRenderer::GenerateStrokeMesh(StrokeGroup *group, bool hasTex)
it != itend; ++it)
{
mesh->mat[material_index] = (*it)->getMaterial();
+ id_us_plus(&mesh->mat[material_index]->id);
vector<Strip*>& strips = (*it)->getStrips();
for (vector<Strip*>::const_iterator s = strips.begin(), send = strips.end(); s != send; ++s) {