Fix T99104: EEVEE: Regression: Crash when using Light Output in Materials
Using Light output is supported in Cycles. This patch adds support for it and remove the crash in `ntree_shader_weight_tree_invert()` by treating it as any other outputs. Candidate for 3.2.1 corrective release.
This commit is contained in:
parent
40f40e9931
commit
4a9f60ecd2
Notes:
blender-bot
2023-02-14 04:31:04 +01:00
Referenced by issue #99104, Shader Light output of mesh object leads to crash with Eevee Referenced by issue #98661, 3.2: Potential candidates for corrective releases
|
@ -712,6 +712,7 @@ static void ntree_shader_weight_tree_invert(bNodeTree *ntree, bNode *output_node
|
|||
|
||||
switch (node->type) {
|
||||
case SH_NODE_SHADERTORGB:
|
||||
case SH_NODE_OUTPUT_LIGHT:
|
||||
case SH_NODE_OUTPUT_WORLD:
|
||||
case SH_NODE_OUTPUT_MATERIAL: {
|
||||
/* Start the tree with full weight. */
|
||||
|
@ -810,6 +811,7 @@ static void ntree_shader_weight_tree_invert(bNodeTree *ntree, bNode *output_node
|
|||
|
||||
switch (node->type) {
|
||||
case SH_NODE_SHADERTORGB:
|
||||
case SH_NODE_OUTPUT_LIGHT:
|
||||
case SH_NODE_OUTPUT_WORLD:
|
||||
case SH_NODE_OUTPUT_MATERIAL:
|
||||
case SH_NODE_ADD_SHADER: {
|
||||
|
|
|
@ -10,6 +10,22 @@ static void node_declare(NodeDeclarationBuilder &b)
|
|||
b.add_input<decl::Shader>(N_("Surface"));
|
||||
}
|
||||
|
||||
static int node_shader_gpu_output_light(GPUMaterial *mat,
|
||||
bNode *UNUSED(node),
|
||||
bNodeExecData *UNUSED(execdata),
|
||||
GPUNodeStack *in,
|
||||
GPUNodeStack *UNUSED(out))
|
||||
{
|
||||
GPUNodeLink *outlink_surface;
|
||||
/* Passthrough node in order to do the right socket conversions. */
|
||||
if (in[0].link) {
|
||||
/* Reuse material output. */
|
||||
GPU_link(mat, "node_output_material_surface", in[0].link, &outlink_surface);
|
||||
GPU_material_output_surface(mat, outlink_surface);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace blender::nodes::node_shader_output_light_cc
|
||||
|
||||
/* node type definition */
|
||||
|
@ -21,6 +37,8 @@ void register_node_type_sh_output_light()
|
|||
|
||||
sh_node_type_base(&ntype, SH_NODE_OUTPUT_LIGHT, "Light Output", NODE_CLASS_OUTPUT);
|
||||
ntype.declare = file_ns::node_declare;
|
||||
node_type_gpu(&ntype, file_ns::node_shader_gpu_output_light);
|
||||
|
||||
ntype.no_muting = true;
|
||||
|
||||
nodeRegisterType(&ntype);
|
||||
|
|
Loading…
Reference in New Issue