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:
-rw-r--r--source/blender/blenloader/intern/readfile.c4
-rw-r--r--source/blender/makesrna/intern/rna_nodetree.c6
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.c28
-rw-r--r--source/blender/render/extern/include/RE_render_ext.h2
-rw-r--r--source/blender/render/intern/source/pointdensity.c5
5 files changed, 42 insertions, 3 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 7b67035eb98..375837437d8 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -3025,6 +3025,10 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
NodeShaderScript *nss = (NodeShaderScript *) node->storage;
nss->bytecode = newdataadr(fd, nss->bytecode);
}
+ else if (node->type==SH_NODE_TEX_POINTDENSITY) {
+ NodeShaderTexPointDensity *npd = (NodeShaderTexPointDensity *) node->storage;
+ memset(&npd->pd, 0, sizeof(npd->pd));
+ }
}
else if (ntree->type==NTREE_COMPOSIT) {
if (ELEM(node->type, CMP_NODE_TIME, CMP_NODE_CURVE_VEC, CMP_NODE_CURVE_RGB, CMP_NODE_HUECORRECT))
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 50ad7a4ceb2..7561a7405f7 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -3045,8 +3045,11 @@ void rna_ShaderNodePointDensity_density_cache(bNode *self,
return;
}
+ /* Make sure there's no cached data. */
+ BKE_texture_pointdensity_free_data(pd);
+ RE_point_density_free(pd);
+
/* Create PointDensity structure from node for sampling. */
- memset(pd, 0, sizeof(*pd));
BKE_texture_pointdensity_init_data(pd);
pd->object = (Object *)self->id;
pd->radius = shader_point_density->radius;
@@ -3098,6 +3101,7 @@ void rna_ShaderNodePointDensity_density_calc(bNode *self,
/* We're done, time to clean up. */
BKE_texture_pointdensity_free_data(pd);
+ memset(pd, 0, sizeof(*pd));
}
void rna_ShaderNodePointDensity_density_minmax(bNode *self,
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.c b/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.c
index 6205b0fa11f..006bd0cc8bb 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.c
@@ -27,6 +27,10 @@
#include "../node_shader_util.h"
+#include "BKE_texture.h"
+
+#include "RE_render_ext.h"
+
/* **************** OUTPUT ******************** */
static bNodeSocketTemplate sh_node_tex_pointdensity_in[] = {
@@ -52,6 +56,26 @@ static void node_shader_init_tex_pointdensity(bNodeTree *UNUSED(ntree),
node->storage = point_density;
}
+static void node_shader_free_tex_pointdensity(bNode *node)
+{
+ NodeShaderTexPointDensity *point_density = node->storage;
+ PointDensity *pd = &point_density->pd;
+ RE_point_density_free(pd);
+ BKE_texture_pointdensity_free_data(pd);
+ memset(pd, 0, sizeof(*pd));
+ MEM_freeN(point_density);
+}
+
+static void node_shader_copy_tex_pointdensity(bNodeTree * UNUSED(dest_ntree),
+ bNode *dest_node,
+ bNode *src_node)
+{
+ dest_node->storage = MEM_dupallocN(src_node->storage);
+ NodeShaderTexPointDensity *point_density = dest_node->storage;
+ PointDensity *pd = &point_density->pd;
+ memset(pd, 0, sizeof(*pd));
+}
+
/* node type definition */
void register_node_type_sh_tex_pointdensity(void)
{
@@ -69,8 +93,8 @@ void register_node_type_sh_tex_pointdensity(void)
node_type_init(&ntype, node_shader_init_tex_pointdensity);
node_type_storage(&ntype,
"NodeShaderTexPointDensity",
- node_free_standard_storage,
- node_copy_standard_storage);
+ node_shader_free_tex_pointdensity,
+ node_shader_copy_tex_pointdensity);
nodeRegisterType(&ntype);
}
diff --git a/source/blender/render/extern/include/RE_render_ext.h b/source/blender/render/extern/include/RE_render_ext.h
index b67986666ea..075db3a8145 100644
--- a/source/blender/render/extern/include/RE_render_ext.h
+++ b/source/blender/render/extern/include/RE_render_ext.h
@@ -86,5 +86,7 @@ void RE_point_density_sample(
const bool use_render_params,
float *values);
+void RE_point_density_free(struct PointDensity *pd);
+
#endif /* __RE_RENDER_EXT_H__ */
diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c
index 331830ad9d9..a4a0dd6e4cd 100644
--- a/source/blender/render/intern/source/pointdensity.c
+++ b/source/blender/render/intern/source/pointdensity.c
@@ -832,3 +832,8 @@ void RE_point_density_sample(
free_pointdensity(pd);
BLI_mutex_unlock(&sample_mutex);
}
+
+void RE_point_density_free(struct PointDensity *pd)
+{
+ free_pointdensity(pd);
+}