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:
authorSergey Sharybin <sergey.vfx@gmail.com>2015-07-25 00:05:11 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2015-07-25 00:05:11 +0300
commit5acce60d376292bc228211075c9fe05b41c84ccd (patch)
tree96312421a81e20448f22fb5e3640cdaf50a8ec7a
parent7c5c7b5ef6c3a77411b9e197152d5754943a034d (diff)
Compositor: Fixes for the debug pass
This commit fixes issues with wrong socket type being added to the Cycles debug pass compositor operation, which lead to crashes with non-value pass types. This commit also reverts socket renaming thing because while it's was behaving ok on runtime file reload might have loose the links which is annoying.
-rw-r--r--source/blender/compositor/nodes/COM_RenderLayersNode.cpp11
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersProg.cpp26
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersProg.h4
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_image.c6
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h1
-rw-r--r--source/blender/render/intern/source/render_result.c5
6 files changed, 36 insertions, 17 deletions
diff --git a/source/blender/compositor/nodes/COM_RenderLayersNode.cpp b/source/blender/compositor/nodes/COM_RenderLayersNode.cpp
index 69d2bf86531..842edcf35c9 100644
--- a/source/blender/compositor/nodes/COM_RenderLayersNode.cpp
+++ b/source/blender/compositor/nodes/COM_RenderLayersNode.cpp
@@ -27,6 +27,10 @@
#include "COM_ScaleOperation.h"
#include "COM_SetValueOperation.h"
+#ifdef WITH_CYCLES_DEBUG
+# include "RE_pipeline.h"
+#endif
+
RenderLayersNode::RenderLayersNode(bNode *editorNode) : Node(editorNode)
{
/* pass */
@@ -88,6 +92,11 @@ void RenderLayersNode::convertToOperations(NodeConverter &converter, const Compo
testSocketLink(converter, context, 30, new RenderLayersCyclesOperation(SCE_PASS_SUBSURFACE_COLOR));
#ifdef WITH_CYCLES_DEBUG
- testSocketLink(converter, context, 31, new RenderLayersCyclesDebugOperation(SCE_PASS_DEBUG));
+ {
+ Scene *scene = (Scene *)this->getbNode()->id;
+ Render *re = RE_GetRender(scene->id.name);
+ int debug_pass_type = ((re != NULL) ? RE_debug_pass_type_get(re) : scene->r.debug_pass_type);
+ testSocketLink(converter, context, 31, new RenderLayersCyclesDebugOperation(SCE_PASS_DEBUG, debug_pass_type));
+ }
#endif
}
diff --git a/source/blender/compositor/operations/COM_RenderLayersProg.cpp b/source/blender/compositor/operations/COM_RenderLayersProg.cpp
index d93d327d07d..999565dc40f 100644
--- a/source/blender/compositor/operations/COM_RenderLayersProg.cpp
+++ b/source/blender/compositor/operations/COM_RenderLayersProg.cpp
@@ -393,16 +393,24 @@ RenderLayersUVOperation::RenderLayersUVOperation() : RenderLayersBaseProg(SCE_PA
#ifdef WITH_CYCLES_DEBUG
-RenderLayersCyclesDebugOperation::RenderLayersCyclesDebugOperation(int pass)
- : RenderLayersBaseProg(pass, 1)
+RenderLayersCyclesDebugOperation::RenderLayersCyclesDebugOperation(
+ int pass,
+ int debug_pass_type)
+ : RenderLayersBaseProg(pass, RE_debug_pass_num_channels_get(debug_pass_type))
{
- this->addOutputSocket(COM_DT_VALUE);
-}
-
-void RenderLayersCyclesDebugOperation::setScene(Scene *scene)
-{
- RenderLayersBaseProg::setScene(scene);
- this->m_elementsize = RE_debug_pass_num_channels_get(m_scene->r.debug_pass_type);
+ switch(m_elementsize) {
+ case 1:
+ this->addOutputSocket(COM_DT_VALUE);
+ break;
+ case 3:
+ this->addOutputSocket(COM_DT_VECTOR);
+ break;
+ case 4:
+ this->addOutputSocket(COM_DT_COLOR);
+ break;
+ default:
+ BLI_assert(!"Unkown debug pass type element size.");
+ }
}
#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersProg.h b/source/blender/compositor/operations/COM_RenderLayersProg.h
index edefd9aeb18..89eb2a6954d 100644
--- a/source/blender/compositor/operations/COM_RenderLayersProg.h
+++ b/source/blender/compositor/operations/COM_RenderLayersProg.h
@@ -215,8 +215,8 @@ public:
#ifdef WITH_CYCLES_DEBUG
class RenderLayersCyclesDebugOperation : public RenderLayersBaseProg {
public:
- RenderLayersCyclesDebugOperation(int pass);
- void setScene(Scene *scene);
+ RenderLayersCyclesDebugOperation(int pass,
+ int debug_pass_type);
};
#endif
diff --git a/source/blender/nodes/composite/nodes/node_composite_image.c b/source/blender/nodes/composite/nodes/node_composite_image.c
index 21142900e20..4f02c106569 100644
--- a/source/blender/nodes/composite/nodes/node_composite_image.c
+++ b/source/blender/nodes/composite/nodes/node_composite_image.c
@@ -457,11 +457,7 @@ void node_cmp_rlayers_force_hidden_passes(bNode *node)
set_output_visible(node, passflag, RRES_OUT_SUBSURFACE_COLOR, SCE_PASS_SUBSURFACE_COLOR);
#ifdef WITH_CYCLES_DEBUG
- {
- bNodeSocket *sock = BLI_findlink(&node->outputs, RRES_OUT_DEBUG);
- set_output_visible(node, passflag, RRES_OUT_DEBUG, SCE_PASS_DEBUG);
- strcpy(sock->name, RE_debug_pass_name_get(scene->r.debug_pass_type));
- }
+ set_output_visible(node, passflag, RRES_OUT_DEBUG, SCE_PASS_DEBUG);
#endif
}
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 7951248b38e..2a679f0f0d0 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -366,6 +366,7 @@ struct RenderView *RE_RenderViewGetByName(struct RenderResult *res, const char *
#ifdef WITH_CYCLES_DEBUG
int RE_debug_pass_num_channels_get(int pass_type);
const char *RE_debug_pass_name_get(int pass_type);
+int RE_debug_pass_type_get(struct Render *re);
#endif
#endif /* __RE_PIPELINE_H__ */
diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c
index 8d63c84b438..639ce204808 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -563,6 +563,11 @@ static RenderPass *render_layer_add_debug_pass(RenderResult *rr,
BLI_strncpy(rpass->internal_name, rpass->name, sizeof(rpass->internal_name));
return rpass;
}
+
+int RE_debug_pass_type_get(Render *re)
+{
+ return re->r.debug_pass_type;
+}
#endif
/* called by main render as well for parts */