@@ -15,7 +15,7 @@ var update_again : bool = false
1515var preview_material : ShaderMaterial = null
1616var preview_parameters : Dictionary = {}
1717var preview_textures = {}
18- var preview_texture_dependencies = {}
18+ var preview_texture_dependencies : Dictionary [ String , MMTexture ] = {}
1919
2020var external_previews : Dictionary [Node , Array ] = {}
2121var export_output_def : Dictionary
@@ -134,7 +134,7 @@ func on_dep_update_value(buffer_name, parameter_name, value) -> bool:
134134 if value is MMTexture :
135135 var texture = await value .get_texture ()
136136 p .set_shader_parameter (parameter_name , texture )
137- preview_texture_dependencies [parameter_name ] = texture
137+ preview_texture_dependencies [parameter_name ] = value
138138 else :
139139 p .set_shader_parameter (parameter_name , value )
140140 else :
@@ -200,8 +200,8 @@ func update() -> void:
200200 for u in result .uniforms :
201201 if u .value :
202202 if u .type == "sampler2D" :
203+ preview_texture_dependencies [u .name ] = u .value
203204 var texture = await u .value .get_texture ()
204- preview_texture_dependencies [u .name ] = texture
205205 preview_material .set_shader_parameter (u .name , texture )
206206 else :
207207 preview_material .set_shader_parameter (u .name , u .value )
@@ -647,7 +647,7 @@ func get_connections_and_parameters_context() -> Dictionary:
647647 context ["$(param:" + p .name + ".a)" ] = str (value .a )
648648 return context
649649
650- func export_material (prefix : String , profile : String , size : int = 0 ) -> void :
650+ func export_material (prefix : String , profile : String , size : int = 0 , command_line : bool = false ) -> void :
651651 reset_uids ()
652652 if size == 0 :
653653 size = get_image_size ()
@@ -680,7 +680,7 @@ func export_material(prefix : String, profile : String, size : int = 0) -> void:
680680 overwrite_files .push_back (f )
681681 continue
682682 exported_files .push_back (f )
683- if ! overwrite_files .is_empty ():
683+ if not command_line and not overwrite_files .is_empty ():
684684 var dialog = load ("res://material_maker/windows/accept_dialog/accept_dialog.tscn" ).instantiate ()
685685 dialog .dialog_text = "Overwrite existing files?"
686686 for f in overwrite_files :
@@ -692,15 +692,18 @@ func export_material(prefix : String, profile : String, size : int = 0) -> void:
692692 if result == "ok" :
693693 exported_files .append_array (overwrite_files )
694694 var progress_dialog = null
695- var progress_dialog_scene = load ("res://material_maker/windows/progress_window/progress_window.tscn" )
696- if progress_dialog_scene != null :
697- progress_dialog = progress_dialog_scene .instantiate ()
698- var dim_color_rect = ColorRect .new ()
699- dim_color_rect .modulate = Color (0.05 , 0.05 , 0.05 , 0.5 )
700- mm_globals .main_window .add_child (dim_color_rect )
701- get_tree ().get_root ().add_child (progress_dialog )
702- progress_dialog .set_text ("Exporting material" )
703- progress_dialog .set_progress (0 )
695+ var dim_color_rect = null
696+ if not command_line :
697+ var progress_dialog_scene = load ("res://material_maker/windows/progress_window/progress_window.tscn" )
698+ if progress_dialog_scene != null :
699+ progress_dialog = progress_dialog_scene .instantiate ()
700+ dim_color_rect = ColorRect .new ()
701+ dim_color_rect .modulate = Color (0.05 , 0.05 , 0.05 , 0.5 )
702+ mm_globals .main_window .add_child (dim_color_rect )
703+ if progress_dialog :
704+ get_tree ().get_root ().add_child (progress_dialog )
705+ progress_dialog .set_text ("Exporting material" )
706+ progress_dialog .set_progress (0 )
704707 var total_files : int = 0
705708 for f in exported_files :
706709 match f .type :
@@ -711,6 +714,7 @@ func export_material(prefix : String, profile : String, size : int = 0) -> void:
711714 var processed_files = 0
712715 var error_files = 0
713716 for f in exported_files :
717+ # print("Exporting ", f)
714718 var e : Error = OK
715719 match f .type :
716720 "texture" :
@@ -719,7 +723,7 @@ func export_material(prefix : String, profile : String, size : int = 0) -> void:
719723 var render_queue_size : int = mm_deps .get_render_queue_size ()
720724 while true :
721725 mm_deps .update ()
722- await get_tree (). process_frame
726+ await mm_deps . updated
723727 if render_queue_size == mm_deps .get_render_queue_size ():
724728 break
725729 render_queue_size = mm_deps .get_render_queue_size ()
@@ -744,14 +748,16 @@ func export_material(prefix : String, profile : String, size : int = 0) -> void:
744748 e = FAILED
745749 processed_files += 1
746750 error_files += 1
747- progress_dialog .set_progress (float (processed_files )/ float (total_files ))
751+ if progress_dialog :
752+ progress_dialog .set_progress (float (processed_files )/ float (total_files ))
748753 continue
749754 var result : MMTexture = await render_output_to_texture (output_index , Vector2i (size , size ))
750755 e = await result .save_to_file (file_name )
751756 if e != OK :
752757 error_files += 1
753758 processed_files += 1
754- progress_dialog .set_progress (float (processed_files )/ float (total_files ))
759+ if progress_dialog :
760+ progress_dialog .set_progress (float (processed_files )/ float (total_files ))
755761 "template" :
756762 var file_export_context = export_context .duplicate ()
757763 if f .has ("file_params" ):
@@ -762,26 +768,37 @@ func export_material(prefix : String, profile : String, size : int = 0) -> void:
762768 if e != OK :
763769 error_files += 1
764770 processed_files += 1
765- progress_dialog .set_progress (float (processed_files )/ float (total_files ))
771+ if progress_dialog :
772+ progress_dialog .set_progress (float (processed_files )/ float (total_files ))
766773 "buffers" :
767- var index : int = 1
774+ # Wait until the render queue is empty
768775 if mm_deps .get_render_queue_size () > 0 :
769- await mm_deps .render_queue_empty
776+ var render_queue_size : int = mm_deps .get_render_queue_size ()
777+ while true :
778+ mm_deps .update ()
779+ await mm_deps .updated
780+ if render_queue_size == mm_deps .get_render_queue_size ():
781+ break
782+ render_queue_size = mm_deps .get_render_queue_size ()
783+ var index : int = 1
770784 for t in preview_texture_dependencies .keys ():
771785 var file_name = subst_string (f .file_name , export_context )
772786 file_name = file_name .replace ("$(buffer_index)" , str (index ))
773- var image : Image = preview_texture_dependencies [t ].get_image ()
787+ var texture : Texture2D = await preview_texture_dependencies [t ].get_texture ()
788+ var image : Image = texture .get_image ()
774789 if image :
775790 image .convert (Image .FORMAT_RGBA8 )
776791 e = image .save_png (file_name )
777792 if e != OK :
778793 error_files += 1
779794 else :
780795 print ("No image for texture file " , file_name )
796+ print (preview_texture_dependencies [t ])
781797 error_files += 1
782798 index += 1
783799 processed_files += 1
784- progress_dialog .set_progress (float (processed_files )/ float (total_files ))
800+ if progress_dialog :
801+ progress_dialog .set_progress (float (processed_files )/ float (total_files ))
785802 "buffer_templates" :
786803 var index : int = 1
787804 for t in preview_texture_dependencies .keys ():
@@ -797,15 +814,20 @@ func export_material(prefix : String, profile : String, size : int = 0) -> void:
797814 error_files += 1
798815 index += 1
799816 processed_files += 1
800- progress_dialog .set_progress (float (processed_files )/ float (total_files ))
817+ if progress_dialog :
818+ progress_dialog .set_progress (float (processed_files )/ float (total_files ))
801819 if progress_dialog != null :
802820 progress_dialog .queue_free ()
821+ if dim_color_rect != null :
803822 dim_color_rect .queue_free ()
804823 if error_files == 0 :
805824 mm_globals .set_tip_text ("Files succesfully exported as \" %s \" " % prefix , 5 , 1 )
806825 return
807826 if error_files >= total_files :
808- mm_globals .main_window .accept_dialog ("Could not export files to \" %s \" " % prefix .get_base_dir (), false , true )
827+ if command_line :
828+ print ("Could not export files to \" %s \" " % prefix .get_base_dir ())
829+ else :
830+ mm_globals .main_window .accept_dialog ("Could not export files to \" %s \" " % prefix .get_base_dir (), false , true )
809831 return
810832 if error_files < total_files :
811833 mm_globals .set_tip_text ("%d errors encountered when exporting files" % error_files , 5 , 1 )
0 commit comments