diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2014-05-09 06:38:36 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2014-05-09 07:19:25 +0400 |
commit | 1064b74196dc50bc4924e9196fdf5a872f74f6cc (patch) | |
tree | 3d030230a454561b0f841917054f6c63b9721551 | |
parent | 14643167a688be05dd88416b05b90a6392090a0e (diff) |
Fix for an occasional crash in Freestyle stroke rendering.
Materials were freed before releasing meshes that may have references to the materials.
-rw-r--r-- | source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp index 9a356f49be5..d0dfd474a86 100644 --- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp +++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp @@ -137,25 +137,6 @@ BlenderStrokeRenderer::BlenderStrokeRenderer(Render *re, int render_count) : Str BlenderStrokeRenderer::~BlenderStrokeRenderer() { - // release materials - Link *lnk = (Link *)freestyle_bmain->mat.first; - - while (lnk) - { - Material *ma = (Material*)lnk; - // We want to retain the linestyle mtexs, so let's detach them first - for (int a = 0; a < MAX_MTEX; a++) { - if (ma->mtex[a]) { - ma->mtex[a] = NULL; - } - else { - break; // Textures are ordered, no empty slots between two textures - } - } - lnk = lnk->next; - BKE_libblock_free(freestyle_bmain, ma); - } - // The freestyle_scene object is not released here. Instead, // the scene is released in free_all_freestyle_renders() in // source/blender/render/intern/source/pipeline.c, after the @@ -186,6 +167,25 @@ BlenderStrokeRenderer::~BlenderStrokeRenderer() } } BLI_freelistN(&freestyle_scene->base); + + // release materials + Link *lnk = (Link *)freestyle_bmain->mat.first; + + while (lnk) + { + Material *ma = (Material*)lnk; + // We want to retain the linestyle mtexs, so let's detach them first + for (int a = 0; a < MAX_MTEX; a++) { + if (ma->mtex[a]) { + ma->mtex[a] = NULL; + } + else { + break; // Textures are ordered, no empty slots between two textures + } + } + lnk = lnk->next; + BKE_libblock_free(freestyle_bmain, ma); + } } float BlenderStrokeRenderer::get_stroke_vertex_z(void) const |