@ -63,6 +63,21 @@ bool VisualShaderNode::is_port_separator(int p_index) const {
return false ;
}
bool VisualShaderNode : : is_output_port_connected ( int p_port ) const {
if ( connected_output_ports . has ( p_port ) ) {
return connected_output_ports [ p_port ] ;
}
return false ;
}
void VisualShaderNode : : set_output_port_connected ( int p_port , bool p_connected ) {
connected_output_ports [ p_port ] = p_connected ;
}
bool VisualShaderNode : : is_code_generated ( ) const {
return true ;
}
Vector < VisualShader : : DefaultTextureParam > VisualShaderNode : : get_default_texture_parameters ( VisualShader : : Type p_type , int p_id ) const {
return Vector < VisualShader : : DefaultTextureParam > ( ) ;
}
@ -526,6 +541,7 @@ void VisualShader::connect_nodes_forced(Type p_type, int p_from_node, int p_from
c . to_port = p_to_port ;
g - > connections . push_back ( c ) ;
g - > nodes [ p_to_node ] . prev_connected_nodes . push_back ( p_from_node ) ;
g - > nodes [ p_from_node ] . node - > set_output_port_connected ( p_from_port , true ) ;
_queue_update ( ) ;
}
@ -557,6 +573,7 @@ Error VisualShader::connect_nodes(Type p_type, int p_from_node, int p_from_port,
c . to_port = p_to_port ;
g - > connections . push_back ( c ) ;
g - > nodes [ p_to_node ] . prev_connected_nodes . push_back ( p_from_node ) ;
g - > nodes [ p_from_node ] . node - > set_output_port_connected ( p_from_port , true ) ;
_queue_update ( ) ;
return OK ;
@ -570,6 +587,7 @@ void VisualShader::disconnect_nodes(Type p_type, int p_from_node, int p_from_por
if ( E - > get ( ) . from_node = = p_from_node & & E - > get ( ) . from_port = = p_from_port & & E - > get ( ) . to_node = = p_to_node & & E - > get ( ) . to_port = = p_to_port ) {
g - > connections . erase ( E ) ;
g - > nodes [ p_to_node ] . prev_connected_nodes . erase ( p_from_node ) ;
g - > nodes [ p_from_node ] . node - > set_output_port_connected ( p_from_port , false ) ;
_queue_update ( ) ;
return ;
}
@ -1105,6 +1123,35 @@ Error VisualShader::_write_node(Type type, StringBuilder &global_code, StringBui
// then this node
Vector < VisualShader : : DefaultTextureParam > params = vsnode - > get_default_texture_parameters ( type , node ) ;
for ( int i = 0 ; i < params . size ( ) ; i + + ) {
def_tex_params . push_back ( params [ i ] ) ;
}
Ref < VisualShaderNodeInput > input = vsnode ;
bool skip_global = input . is_valid ( ) & & for_preview ;
if ( ! skip_global ) {
global_code + = vsnode - > generate_global ( get_mode ( ) , type , node ) ;
String class_name = vsnode - > get_class_name ( ) ;
if ( class_name = = " VisualShaderNodeCustom " ) {
class_name = vsnode - > get_script_instance ( ) - > get_script ( ) - > get_path ( ) ;
}
if ( ! r_classes . has ( class_name ) ) {
global_code_per_node + = vsnode - > generate_global_per_node ( get_mode ( ) , type , node ) ;
for ( int i = 0 ; i < TYPE_MAX ; i + + ) {
global_code_per_func [ Type ( i ) ] + = vsnode - > generate_global_per_func ( get_mode ( ) , Type ( i ) , node ) ;
}
r_classes . insert ( class_name ) ;
}
}
if ( ! vsnode - > is_code_generated ( ) ) { // just generate globals and ignore locals
processed . insert ( node ) ;
return OK ;
}
code + = " // " + vsnode - > get_caption ( ) + " : " + itos ( node ) + " \n " ;
Vector < String > input_vars ;
@ -1255,30 +1302,6 @@ Error VisualShader::_write_node(Type type, StringBuilder &global_code, StringBui
}
}
Vector < VisualShader : : DefaultTextureParam > params = vsnode - > get_default_texture_parameters ( type , node ) ;
for ( int i = 0 ; i < params . size ( ) ; i + + ) {
def_tex_params . push_back ( params [ i ] ) ;
}
Ref < VisualShaderNodeInput > input = vsnode ;
bool skip_global = input . is_valid ( ) & & for_preview ;
if ( ! skip_global ) {
global_code + = vsnode - > generate_global ( get_mode ( ) , type , node ) ;
String class_name = vsnode - > get_class_name ( ) ;
if ( class_name = = " VisualShaderNodeCustom " ) {
class_name = vsnode - > get_script_instance ( ) - > get_script ( ) - > get_path ( ) ;
}
if ( ! r_classes . has ( class_name ) ) {
global_code_per_node + = vsnode - > generate_global_per_node ( get_mode ( ) , type , node ) ;
for ( int i = 0 ; i < TYPE_MAX ; i + + ) {
global_code_per_func [ Type ( i ) ] + = vsnode - > generate_global_per_func ( get_mode ( ) , Type ( i ) , node ) ;
}
r_classes . insert ( class_name ) ;
}
}
code + = vsnode - > generate_code ( get_mode ( ) , type , node , inputs , outputs , for_preview ) ;
code + = " \n " ; //