Blender V4.3
node_shader_tree.cc File Reference
#include <cstring>
#include "DNA_light_types.h"
#include "DNA_linestyle_types.h"
#include "DNA_material_types.h"
#include "DNA_node_types.h"
#include "DNA_scene_types.h"
#include "DNA_space_types.h"
#include "DNA_world_types.h"
#include "BLI_array.hh"
#include "BLI_linklist.h"
#include "BLI_listbase.h"
#include "BLI_math_vector.h"
#include "BLI_set.hh"
#include "BLI_string.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
#include "BLI_vector.hh"
#include "BKE_context.hh"
#include "BKE_global.hh"
#include "BKE_layer.hh"
#include "BKE_lib_id.hh"
#include "BKE_linestyle.h"
#include "BKE_material.h"
#include "BKE_node.hh"
#include "BKE_node_runtime.hh"
#include "BKE_node_tree_update.hh"
#include "BKE_scene.hh"
#include "RNA_prototypes.hh"
#include "UI_resources.hh"
#include "NOD_shader.h"
#include "node_common.h"
#include "node_exec.hh"
#include "node_shader_util.hh"
#include "node_util.hh"

Go to the source code of this file.

Classes

struct  branchIterData
 

Functions

static bool shader_tree_poll (const bContext *C, blender::bke::bNodeTreeType *)
 
static void shader_get_from_context (const bContext *C, blender::bke::bNodeTreeType *, bNodeTree **r_ntree, ID **r_id, ID **r_from)
 
static void foreach_nodeclass (void *calldata, blender::bke::bNodeClassCallback func)
 
static void localize (bNodeTree *localtree, bNodeTree *)
 
static void update (bNodeTree *ntree)
 
static bool shader_validate_link (eNodeSocketDatatype from, eNodeSocketDatatype to)
 
static bool shader_node_tree_socket_type_valid (blender::bke::bNodeTreeType *, blender::bke::bNodeSocketType *socket_type)
 
void register_node_tree_type_sh ()
 
bNodentreeShaderOutputNode (bNodeTree *ntree, int target)
 
static bNodeSocketntree_shader_node_find_socket (ListBase *sockets, const char *identifier)
 
static bNodeSocketntree_shader_node_find_input (bNode *node, const char *identifier)
 
static bNodeSocketntree_shader_node_find_output (bNode *node, const char *identifier)
 
static bNodeSocketntree_shader_node_input_get (bNode *node, int n)
 
static bNodeSocketntree_shader_node_output_get (bNode *node, int n)
 
static bool ntree_shader_expand_socket_default (bNodeTree *localtree, bNode *node, bNodeSocket *socket)
 
static void ntree_shader_unlink_hidden_value_sockets (bNode *group_node, bNodeSocket *isock)
 
static void ntree_shader_groups_expand_inputs (bNodeTree *localtree)
 
static void ntree_shader_groups_remove_muted_links (bNodeTree *ntree)
 
static void flatten_group_do (bNodeTree *ntree, bNode *gnode)
 
static void ntree_shader_groups_flatten (bNodeTree *localtree)
 
static bool ntree_branch_count_and_tag_nodes (bNode *fromnode, bNode *tonode, void *userdata)
 
static void ntree_shader_copy_branch (bNodeTree *ntree, bNode *start_node, bool(*node_filter)(const bNode *node))
 
static bool ntree_shader_implicit_closure_cast (bNodeTree *ntree)
 
static void ntree_weight_tree_merge_weight (bNodeTree *ntree, bNode *, bNodeSocket *fromsock, bNode **tonode, bNodeSocket **tosock)
 
static bool ntree_weight_tree_tag_nodes (bNode *fromnode, bNode *tonode, void *userdata)
 
static void ntree_shader_weight_tree_invert (bNodeTree *ntree, bNode *output_node)
 
static bool closure_node_filter (const bNode *node)
 
static void ntree_shader_shader_to_rgba_branches (bNodeTree *ntree)
 
static void iter_shader_to_rgba_depth_count (bNode *node, int16_t &max_depth, int16_t depth_level=0)
 
static void shader_node_disconnect_input (bNodeTree *ntree, bNode *node, int index)
 
static void shader_node_disconnect_inactive_mix_branch (bNodeTree *ntree, bNode *node, int factor_socket_index, int a_socket_index, int b_socket_index, bool clamp_factor)
 
static void ntree_shader_disconnect_inactive_mix_branches (bNodeTree *ntree)
 
static bool ntree_branch_node_tag (bNode *fromnode, bNode *tonode, void *)
 
static void ntree_shader_pruned_unused (bNodeTree *ntree, bNode *output_node)
 
void ntreeGPUMaterialNodes (bNodeTree *localtree, GPUMaterial *mat)
 
bNodeTreeExecntreeShaderBeginExecTree_internal (bNodeExecContext *context, bNodeTree *ntree, bNodeInstanceKey parent_key)
 
bNodeTreeExecntreeShaderBeginExecTree (bNodeTree *ntree)
 
void ntreeShaderEndExecTree_internal (bNodeTreeExec *exec)
 
void ntreeShaderEndExecTree (bNodeTreeExec *exec)
 

Variables

blender::bke::bNodeTreeTypentreeType_Shader
 

Function Documentation

◆ closure_node_filter()

◆ flatten_group_do()

◆ foreach_nodeclass()

◆ iter_shader_to_rgba_depth_count()

static void iter_shader_to_rgba_depth_count ( bNode * node,
int16_t & max_depth,
int16_t depth_level = 0 )
static

◆ localize()

◆ ntree_branch_count_and_tag_nodes()

static bool ntree_branch_count_and_tag_nodes ( bNode * fromnode,
bNode * tonode,
void * userdata )
static

◆ ntree_branch_node_tag()

static bool ntree_branch_node_tag ( bNode * fromnode,
bNode * tonode,
void *  )
static

Definition at line 1160 of file node_shader_tree.cc.

References bNode::runtime.

Referenced by ntree_shader_pruned_unused().

◆ ntree_shader_copy_branch()

◆ ntree_shader_disconnect_inactive_mix_branches()

◆ ntree_shader_expand_socket_default()

◆ ntree_shader_groups_expand_inputs()

◆ ntree_shader_groups_flatten()

◆ ntree_shader_groups_remove_muted_links()

◆ ntree_shader_implicit_closure_cast()

◆ ntree_shader_node_find_input()

static bNodeSocket * ntree_shader_node_find_input ( bNode * node,
const char * identifier )
static

◆ ntree_shader_node_find_output()

static bNodeSocket * ntree_shader_node_find_output ( bNode * node,
const char * identifier )
static

◆ ntree_shader_node_find_socket()

static bNodeSocket * ntree_shader_node_find_socket ( ListBase * sockets,
const char * identifier )
static

Definition at line 245 of file node_shader_tree.cc.

References LISTBASE_FOREACH, and STREQ.

Referenced by ntree_shader_node_find_input(), and ntree_shader_node_find_output().

◆ ntree_shader_node_input_get()

◆ ntree_shader_node_output_get()

static bNodeSocket * ntree_shader_node_output_get ( bNode * node,
int n )
static

◆ ntree_shader_pruned_unused()

◆ ntree_shader_shader_to_rgba_branches()

◆ ntree_shader_unlink_hidden_value_sockets()

◆ ntree_shader_weight_tree_invert()

◆ ntree_weight_tree_merge_weight()

◆ ntree_weight_tree_tag_nodes()

static bool ntree_weight_tree_tag_nodes ( bNode * fromnode,
bNode * tonode,
void * userdata )
static

◆ ntreeGPUMaterialNodes()

◆ ntreeShaderBeginExecTree()

◆ ntreeShaderBeginExecTree_internal()

bNodeTreeExec * ntreeShaderBeginExecTree_internal ( bNodeExecContext * context,
bNodeTree * ntree,
bNodeInstanceKey parent_key )

◆ ntreeShaderEndExecTree()

void ntreeShaderEndExecTree ( bNodeTreeExec * exec)

◆ ntreeShaderEndExecTree_internal()

void ntreeShaderEndExecTree_internal ( bNodeTreeExec * exec)

◆ ntreeShaderOutputNode()

bNode * ntreeShaderOutputNode ( struct bNodeTree * ntree,
int target )

Find an output node of the shader tree.

Note
it will only return output which is NOT in the group, which isn't how render engines works but it's how the GPU shader compilation works. This we can change in the future and make it a generic function, but for now it stays private here.

Definition at line 204 of file node_shader_tree.cc.

References bNode::custom1, ELEM, bNode::flag, LISTBASE_FOREACH, node, NODE_DO_OUTPUT, blender::bke::node_tree_set_output(), bNodeTree::nodes, SH_NODE_OUTPUT_LIGHT, SH_NODE_OUTPUT_MATERIAL, SH_NODE_OUTPUT_WORLD, and SHD_OUTPUT_ALL.

Referenced by blender::nodes::materialx::export_to_materialx(), blender::io::hydra::WorldData::init(), light_emission_node_to_energy(), and ntreeGPUMaterialNodes().

◆ register_node_tree_type_sh()

◆ shader_get_from_context()

◆ shader_node_disconnect_inactive_mix_branch()

static void shader_node_disconnect_inactive_mix_branch ( bNodeTree * ntree,
bNode * node,
int factor_socket_index,
int a_socket_index,
int b_socket_index,
bool clamp_factor )
static

◆ shader_node_disconnect_input()

static void shader_node_disconnect_input ( bNodeTree * ntree,
bNode * node,
int index )
static

◆ shader_node_tree_socket_type_valid()

◆ shader_tree_poll()

static bool shader_tree_poll ( const bContext * C,
blender::bke::bNodeTreeType *  )
static

◆ shader_validate_link()

static bool shader_validate_link ( eNodeSocketDatatype from,
eNodeSocketDatatype to )
static

Definition at line 153 of file node_shader_tree.cc.

References SOCK_SHADER.

Referenced by register_node_tree_type_sh().

◆ update()

static void update ( bNodeTree * ntree)
static

Variable Documentation

◆ ntreeType_Shader