diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 18f73ad09..01fb50a9c 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -54,8 +54,8 @@ {"name":"sprite","order":30,"path":"folders/functions/sprite.yy",}, {"name":"string","order":31,"path":"folders/functions/string.yy",}, {"name":"surface","order":32,"path":"folders/functions/surface.yy",}, - {"name":"dynamic_surface","order":8,"path":"folders/functions/surface/dynamic_surface.yy",}, - {"name":"svg","order":46,"path":"folders/functions/svg.yy",}, + {"name":"dynamic_surface","order":1,"path":"folders/functions/surface/dynamic_surface.yy",}, + {"name":"svg","order":39,"path":"folders/functions/svg.yy",}, {"name":"test","order":33,"path":"folders/functions/test.yy",}, {"name":"tooltip","order":34,"path":"folders/functions/tooltip.yy",}, {"name":"tween","order":35,"path":"folders/functions/tween.yy",}, @@ -94,6 +94,7 @@ {"name":"filter","order":4,"path":"folders/nodes/data/filter.yy",}, {"name":"colors","order":1,"path":"folders/nodes/data/filter/colors.yy",}, {"name":"normalize","order":37,"path":"folders/nodes/data/filter/colors/normalize.yy",}, + {"name":"threshold","order":23,"path":"folders/nodes/data/filter/colors/threshold.yy",}, {"name":"combine","order":2,"path":"folders/nodes/data/filter/combine.yy",}, {"name":"conversion","order":3,"path":"folders/nodes/data/filter/conversion.yy",}, {"name":"hsv channel","order":5,"path":"folders/nodes/data/filter/conversion/hsv channel.yy",}, @@ -261,7 +262,6 @@ {"name":"rotator","order":2,"path":"folders/widgets/rotator.yy",}, {"name":"sliders","order":3,"path":"folders/widgets/sliders.yy",}, {"name":"text","order":4,"path":"folders/widgets/text.yy",}, - {"name":"threshold","order":23,"path":"folders/nodes/data/filter/colors/threshold.yy",}, ], "ResourceOrderSettings":[ {"name":"ac_disappear","order":2,"path":"animcurves/ac_disappear/ac_disappear.yy",}, @@ -440,7 +440,6 @@ {"name":"__rectangle","order":7,"path":"scripts/__rectangle/__rectangle.yy",}, {"name":"__shapes","order":3,"path":"scripts/__shapes/__shapes.yy",}, {"name":"__strandSim","order":2,"path":"scripts/__strandSim/__strandSim.yy",}, - {"name":"__surface","order":7,"path":"scripts/__surface/__surface.yy",}, {"name":"__tiler_autoterrain","order":1,"path":"scripts/__tiler_autoterrain/__tiler_autoterrain.yy",}, {"name":"__tiler_brush","order":3,"path":"scripts/__tiler_brush/__tiler_brush.yy",}, {"name":"__tiler_rule","order":4,"path":"scripts/__tiler_rule/__tiler_rule.yy",}, @@ -483,6 +482,7 @@ {"name":"binder_gamemaker_tile","order":7,"path":"scripts/binder_gamemaker_tile/binder_gamemaker_tile.yy",}, {"name":"binder_gamemaker","order":6,"path":"scripts/binder_gamemaker/binder_gamemaker.yy",}, {"name":"biterator","order":1,"path":"scripts/biterator/biterator.yy",}, + {"name":"blurSurface","order":2,"path":"scripts/blurSurface/blurSurface.yy",}, {"name":"buffer_object","order":1,"path":"scripts/buffer_object/buffer_object.yy",}, {"name":"buttonAnchor","order":5,"path":"scripts/buttonAnchor/buttonAnchor.yy",}, {"name":"buttonColor","order":1,"path":"scripts/buttonColor/buttonColor.yy",}, @@ -519,7 +519,7 @@ {"name":"color_loader","order":13,"path":"scripts/color_loader/color_loader.yy",}, {"name":"color_selector","order":4,"path":"scripts/color_selector/color_selector.yy",}, {"name":"complex_function","order":12,"path":"scripts/complex_function/complex_function.yy",}, - {"name":"console_commands","order":45,"path":"scripts/console_commands/console_commands.yy",}, + {"name":"console_commands","order":47,"path":"scripts/console_commands/console_commands.yy",}, {"name":"controlPointBox","order":4,"path":"scripts/controlPointBox/controlPointBox.yy",}, {"name":"cornerBox","order":5,"path":"scripts/cornerBox/cornerBox.yy",}, {"name":"cross_product","order":3,"path":"scripts/cross_product/cross_product.yy",}, @@ -558,12 +558,12 @@ {"name":"d3d_uvsphere","order":8,"path":"scripts/d3d_uvsphere/d3d_uvsphere.yy",}, {"name":"d3d_vertex","order":10,"path":"scripts/d3d_vertex/d3d_vertex.yy",}, {"name":"d3d_wall_builder","order":26,"path":"scripts/d3d_wall_builder/d3d_wall_builder.yy",}, - {"name":"debug","order":40,"path":"scripts/debug/debug.yy",}, + {"name":"debug","order":42,"path":"scripts/debug/debug.yy",}, {"name":"delaunay","order":1,"path":"scripts/delaunay/delaunay.yy",}, {"name":"dialog_management","order":2,"path":"scripts/dialog_management/dialog_management.yy",}, {"name":"directory_functions","order":9,"path":"scripts/directory_functions/directory_functions.yy",}, {"name":"directory_object","order":3,"path":"scripts/directory_object/directory_object.yy",}, - {"name":"display_refresh","order":41,"path":"scripts/display_refresh/display_refresh.yy",}, + {"name":"display_refresh","order":43,"path":"scripts/display_refresh/display_refresh.yy",}, {"name":"distribution_function","order":16,"path":"scripts/distribution_function/distribution_function.yy",}, {"name":"draw_arc","order":16,"path":"scripts/draw_arc/draw_arc.yy",}, {"name":"draw_circle_functions","order":3,"path":"scripts/draw_circle_functions/draw_circle_functions.yy",}, @@ -582,8 +582,8 @@ {"name":"draw_setter","order":1,"path":"scripts/draw_setter/draw_setter.yy",}, {"name":"draw_shapes","order":9,"path":"scripts/draw_shapes/draw_shapes.yy",}, {"name":"draw_sprite_ext_override","order":8,"path":"scripts/draw_sprite_ext_override/draw_sprite_ext_override.yy",}, - {"name":"draw_surface_blend","order":1,"path":"scripts/draw_surface_blend/draw_surface_blend.yy",}, - {"name":"draw_surface_functions","order":3,"path":"scripts/draw_surface_functions/draw_surface_functions.yy",}, + {"name":"draw_surface_blend","order":3,"path":"scripts/draw_surface_blend/draw_surface_blend.yy",}, + {"name":"draw_surface_functions","order":5,"path":"scripts/draw_surface_functions/draw_surface_functions.yy",}, {"name":"draw_text_delimiter","order":12,"path":"scripts/draw_text_delimiter/draw_text_delimiter.yy",}, {"name":"draw_text_function","order":10,"path":"scripts/draw_text_function/draw_text_function.yy",}, {"name":"draw_text_path","order":19,"path":"scripts/draw_text_path/draw_text_path.yy",}, @@ -1355,7 +1355,7 @@ {"name":"preview_overlay_rotation","order":1,"path":"scripts/preview_overlay_rotation/preview_overlay_rotation.yy",}, {"name":"preview_overlay_vector","order":2,"path":"scripts/preview_overlay_vector/preview_overlay_vector.yy",}, {"name":"printer","order":2,"path":"scripts/printer/printer.yy",}, - {"name":"process_functions","order":44,"path":"scripts/process_functions/process_functions.yy",}, + {"name":"process_functions","order":46,"path":"scripts/process_functions/process_functions.yy",}, {"name":"project_data","order":17,"path":"scripts/project_data/project_data.yy",}, {"name":"project_function","order":2,"path":"scripts/project_function/project_function.yy",}, {"name":"pseudo_regex","order":7,"path":"scripts/pseudo_regex/pseudo_regex.yy",}, @@ -1370,7 +1370,7 @@ {"name":"save_function","order":1,"path":"scripts/save_function/save_function.yy",}, {"name":"scrollBox","order":7,"path":"scripts/scrollBox/scrollBox.yy",}, {"name":"scrollPane","order":8,"path":"scripts/scrollPane/scrollPane.yy",}, - {"name":"shell_functions","order":42,"path":"scripts/shell_functions/shell_functions.yy",}, + {"name":"shell_functions","order":44,"path":"scripts/shell_functions/shell_functions.yy",}, {"name":"sliderRange","order":2,"path":"scripts/sliderRange/sliderRange.yy",}, {"name":"SnapBufferWriteXML","order":1,"path":"scripts/SnapBufferWriteXML/SnapBufferWriteXML.yy",}, {"name":"SnapFromXML","order":2,"path":"scripts/SnapFromXML/SnapFromXML.yy",}, @@ -1385,9 +1385,10 @@ {"name":"string_scale","order":4,"path":"scripts/string_scale/string_scale.yy",}, {"name":"string_splice","order":3,"path":"scripts/string_splice/string_splice.yy",}, {"name":"struct_functions","order":4,"path":"scripts/struct_functions/struct_functions.yy",}, - {"name":"surface_draw_functions","order":6,"path":"scripts/surface_draw_functions/surface_draw_functions.yy",}, - {"name":"surface_functions","order":4,"path":"scripts/surface_functions/surface_functions.yy",}, - {"name":"surface_get_palette","order":2,"path":"scripts/surface_get_palette/surface_get_palette.yy",}, + {"name":"surface_draw_functions","order":8,"path":"scripts/surface_draw_functions/surface_draw_functions.yy",}, + {"name":"surface_exr_encode","order":8,"path":"scripts/surface_exr_encode/surface_exr_encode.yy",}, + {"name":"surface_functions","order":6,"path":"scripts/surface_functions/surface_functions.yy",}, + {"name":"surface_get_palette","order":4,"path":"scripts/surface_get_palette/surface_get_palette.yy",}, {"name":"surfaceBox","order":9,"path":"scripts/surfaceBox/surfaceBox.yy",}, {"name":"surfaceDynaBox","order":17,"path":"scripts/surfaceDynaBox/surfaceDynaBox.yy",}, {"name":"svg_objects","order":1,"path":"scripts/svg_objects/svg_objects.yy",}, @@ -1402,7 +1403,7 @@ {"name":"tiler_tool_selection_shape","order":9,"path":"scripts/tiler_tool_selection_shape/tiler_tool_selection_shape.yy",}, {"name":"tiler_tool_selection","order":8,"path":"scripts/tiler_tool_selection/tiler_tool_selection.yy",}, {"name":"tilesetBox","order":1,"path":"scripts/tilesetBox/tilesetBox.yy",}, - {"name":"time_source","order":43,"path":"scripts/time_source/time_source.yy",}, + {"name":"time_source","order":45,"path":"scripts/time_source/time_source.yy",}, {"name":"timeline_data","order":18,"path":"scripts/timeline_data/timeline_data.yy",}, {"name":"toggleGroup","order":12,"path":"scripts/toggleGroup/toggleGroup.yy",}, {"name":"tooltip_hotkey","order":2,"path":"scripts/tooltip_hotkey/tooltip_hotkey.yy",}, @@ -1773,6 +1774,7 @@ {"name":"sh_texture_atlas","order":2,"path":"shaders/sh_texture_atlas/sh_texture_atlas.yy",}, {"name":"sh_texture_remap","order":5,"path":"shaders/sh_texture_remap/sh_texture_remap.yy",}, {"name":"sh_texture_repeat","order":21,"path":"shaders/sh_texture_repeat/sh_texture_repeat.yy",}, + {"name":"sh_threshold_adaptive","order":1,"path":"shaders/sh_threshold_adaptive/sh_threshold_adaptive.yy",}, {"name":"sh_tile_random","order":26,"path":"shaders/sh_tile_random/sh_tile_random.yy",}, {"name":"sh_tile_rule_apply","order":9,"path":"shaders/sh_tile_rule_apply/sh_tile_rule_apply.yy",}, {"name":"sh_tile_rule_select","order":10,"path":"shaders/sh_tile_rule_select/sh_tile_rule_select.yy",}, @@ -2862,6 +2864,5 @@ {"name":"workshop_badge","order":42,"path":"sprites/workshop_badge/workshop_badge.yy",}, {"name":"workshop_bg","order":43,"path":"sprites/workshop_bg/workshop_bg.yy",}, {"name":"workshop_frame","order":44,"path":"sprites/workshop_frame/workshop_frame.yy",}, - {"name":"sh_threshold_adaptive","order":1,"path":"shaders/sh_threshold_adaptive/sh_threshold_adaptive.yy",}, ], } \ No newline at end of file diff --git a/PixelComposer.yyp b/PixelComposer.yyp index c28ca2774..34e57b5c3 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -145,6 +145,7 @@ {"$GMFolder":"","%Name":"blur","folderPath":"folders/nodes/data/filter/blur.yy","name":"blur","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"colors","folderPath":"folders/nodes/data/filter/colors.yy","name":"colors","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"normalize","folderPath":"folders/nodes/data/filter/colors/normalize.yy","name":"normalize","resourceType":"GMFolder","resourceVersion":"2.0",}, + {"$GMFolder":"","%Name":"threshold","folderPath":"folders/nodes/data/filter/colors/threshold.yy","name":"threshold","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"combine","folderPath":"folders/nodes/data/filter/combine.yy","name":"combine","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"conversion","folderPath":"folders/nodes/data/filter/conversion.yy","name":"conversion","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"hsv channel","folderPath":"folders/nodes/data/filter/conversion/hsv channel.yy","name":"hsv channel","resourceType":"GMFolder","resourceVersion":"2.0",}, @@ -338,7 +339,6 @@ {"$GMFolder":"","%Name":"rotator","folderPath":"folders/widgets/rotator.yy","name":"rotator","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"sliders","folderPath":"folders/widgets/sliders.yy","name":"sliders","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"text","folderPath":"folders/widgets/text.yy","name":"text","resourceType":"GMFolder","resourceVersion":"2.0",}, - {"$GMFolder":"","%Name":"threshold","folderPath":"folders/nodes/data/filter/colors/threshold.yy","name":"threshold","resourceType":"GMFolder","resourceVersion":"2.0",}, ], "IncludedFiles":[ {"$GMIncludedFile":"","%Name":"Actions.zip","CopyToMask":-1,"filePath":"datafiles/data","name":"Actions.zip","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, @@ -570,7 +570,11 @@ {"$GMIncludedFile":"","%Name":"Node_Warp.png","CopyToMask":-1,"filePath":"datafiles/data/Tooltip","name":"Node_Warp.png","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"Node_Wavelet_Noise.png","CopyToMask":-1,"filePath":"datafiles/data/Tooltip","name":"Node_Wavelet_Noise.png","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"Node_Zigzag.png","CopyToMask":-1,"filePath":"datafiles/data/Tooltip","name":"Node_Zigzag.png","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, - {"$GMIncludedFile":"","%Name":"dllcredits.txt","ConfigValues":{"Itch":{"CopyToMask":"0",},},"CopyToMask":0,"filePath":"datafiles","name":"dllcredits.txt","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, + {"$GMIncludedFile":"","%Name":"dllcredits.txt","ConfigValues":{ + "Itch":{ + "CopyToMask":"0", + }, + },"CopyToMask":0,"filePath":"datafiles","name":"dllcredits.txt","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"dlltest1.dll","CopyToMask":-1,"filePath":"datafiles","name":"dlltest1.dll","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"ffmpeg.exe","CopyToMask":-1,"filePath":"datafiles/ffmpeg/bin","name":"ffmpeg.exe","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"LICENSE","CopyToMask":-1,"filePath":"datafiles/ffmpeg","name":"LICENSE","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, @@ -589,7 +593,11 @@ {"$GMIncludedFile":"","%Name":"mf.dll","CopyToMask":-1,"filePath":"datafiles","name":"mf.dll","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"mfcore.dll","CopyToMask":-1,"filePath":"datafiles","name":"mfcore.dll","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"mfplat.dll","CopyToMask":-1,"filePath":"datafiles","name":"mfplat.dll","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, - {"$GMIncludedFile":"","%Name":"PixelComposer_profile-2.provisionprofile","ConfigValues":{"Itch":{"CopyToMask":"2",},},"CopyToMask":-1,"filePath":"datafiles","name":"PixelComposer_profile-2.provisionprofile","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, + {"$GMIncludedFile":"","%Name":"PixelComposer_profile-2.provisionprofile","ConfigValues":{ + "Itch":{ + "CopyToMask":"2", + }, + },"CopyToMask":-1,"filePath":"datafiles","name":"PixelComposer_profile-2.provisionprofile","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"data.win","CopyToMask":-1,"filePath":"datafiles/report","name":"data.win","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"execute_shell_simple_ext_x64.dll","CopyToMask":-1,"filePath":"datafiles/report","name":"execute_shell_simple_ext_x64.dll","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"options.ini","CopyToMask":-1,"filePath":"datafiles/report","name":"options.ini","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, @@ -1235,7 +1243,6 @@ {"id":{"name":"node_atlas_get","path":"scripts/node_atlas_get/node_atlas_get.yy",},}, {"id":{"name":"node_atlas_set","path":"scripts/node_atlas_set/node_atlas_set.yy",},}, {"id":{"name":"node_atlas_to_struct","path":"scripts/node_atlas_to_struct/node_atlas_to_struct.yy",},}, - {"id":{"name":"sh_threshold_adaptive","path":"shaders/sh_threshold_adaptive/sh_threshold_adaptive.yy",},}, {"id":{"name":"node_atlas","path":"scripts/node_atlas/node_atlas.yy",},}, {"id":{"name":"node_attributes","path":"scripts/node_attributes/node_attributes.yy",},}, {"id":{"name":"node_audio_loudness","path":"scripts/node_audio_loudness/node_audio_loudness.yy",},}, @@ -1956,6 +1963,7 @@ {"id":{"name":"string_splice","path":"scripts/string_splice/string_splice.yy",},}, {"id":{"name":"struct_functions","path":"scripts/struct_functions/struct_functions.yy",},}, {"id":{"name":"surface_draw_functions","path":"scripts/surface_draw_functions/surface_draw_functions.yy",},}, + {"id":{"name":"surface_exr_encode","path":"scripts/surface_exr_encode/surface_exr_encode.yy",},}, {"id":{"name":"surface_functions","path":"scripts/surface_functions/surface_functions.yy",},}, {"id":{"name":"surface_get_palette","path":"scripts/surface_get_palette/surface_get_palette.yy",},}, {"id":{"name":"surfaceBox","path":"scripts/surfaceBox/surfaceBox.yy",},}, @@ -2406,6 +2414,7 @@ {"id":{"name":"sh_texture_atlas","path":"shaders/sh_texture_atlas/sh_texture_atlas.yy",},}, {"id":{"name":"sh_texture_remap","path":"shaders/sh_texture_remap/sh_texture_remap.yy",},}, {"id":{"name":"sh_texture_repeat","path":"shaders/sh_texture_repeat/sh_texture_repeat.yy",},}, + {"id":{"name":"sh_threshold_adaptive","path":"shaders/sh_threshold_adaptive/sh_threshold_adaptive.yy",},}, {"id":{"name":"sh_threshold","path":"shaders/sh_threshold/sh_threshold.yy",},}, {"id":{"name":"sh_tile_random","path":"shaders/sh_tile_random/sh_tile_random.yy",},}, {"id":{"name":"sh_tile_rule_apply","path":"shaders/sh_tile_rule_apply/sh_tile_rule_apply.yy",},}, diff --git a/datafiles/data/Theme.zip b/datafiles/data/Theme.zip index 2fcc40307..f9ef4306b 100644 Binary files a/datafiles/data/Theme.zip and b/datafiles/data/Theme.zip differ diff --git a/scripts/node_export/node_export.gml b/scripts/node_export/node_export.gml index 6d856a54f..b375b8400 100644 --- a/scripts/node_export/node_export.gml +++ b/scripts/node_export/node_export.gml @@ -81,7 +81,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor newInput(8, nodeValue_Int("Framerate", self, 30)) .rejectArray(); - format_image = [ ".png", ".jpg", ".webp" ]; + format_image = [ ".png", ".jpg", ".webp", ".exr" ]; format_animation = [ ".gif", ".apng", ".webp", ".mp4" ]; newInput(9, nodeValue_Enum_Scroll("Format", self, 0, { data: format_image, update_hover: false })) @@ -554,6 +554,10 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor shell_execute_async(magick, shell_cmd, self); break; + + case ".exr": + surface_exr_encode(_surf, _pathOut); + break; } return _pathOut; @@ -591,6 +595,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor if(form == NODE_EXPORT_FORMAT.animation) { p = $"{directory}/{i}/{string_lead_zero(CURRENT_FRAME, 5)}.png"; + } else { if(is_array(path) && array_length(path) == array_length(surf)) p = pathString(array_safe_get_fast(path, i), i); diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index c746a4801..ae0a4f922 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -1,3 +1,22 @@ +#region globalvar + globalvar ALL_NODES, NODE_CATEGORY, NODE_PB_CATEGORY, NODE_PCX_CATEGORY; + globalvar SUPPORTER_NODES, NEW_NODES; + + globalvar NODE_PAGE_DEFAULT; + + ALL_NODES = ds_map_create(); + NODE_CATEGORY = ds_list_create(); + NODE_PB_CATEGORY = ds_list_create(); + NODE_PCX_CATEGORY = ds_list_create(); + SUPPORTER_NODES = ds_list_create(); + NEW_NODES = ds_list_create(); + + global.__currPage = ""; + global.__currNewPage = ""; + + #macro NODE_ADD_CAT if(!IS_CMD) addNodeCatagory +#endregion + function NodeObject(_name, _spr, _node, _tooltip = "") constructor { name = _name; spr = _spr; @@ -237,25 +256,6 @@ function NodeObject(_name, _spr, _node, _tooltip = "") constructor { } } -#region globalvar - globalvar ALL_NODES, NODE_CATEGORY, NODE_PB_CATEGORY, NODE_PCX_CATEGORY; - globalvar SUPPORTER_NODES, NEW_NODES; - - globalvar NODE_PAGE_DEFAULT; - - ALL_NODES = ds_map_create(); - NODE_CATEGORY = ds_list_create(); - NODE_PB_CATEGORY = ds_list_create(); - NODE_PCX_CATEGORY = ds_list_create(); - SUPPORTER_NODES = ds_list_create(); - NEW_NODES = ds_list_create(); - - global.__currPage = ""; - global.__currNewPage = ""; - - #macro NODE_ADD_CAT if(!IS_CMD) addNodeCatagory -#endregion - function nodeBuild(_name, _x, _y, _group = PANEL_GRAPH.getCurrentContext()) { INLINE @@ -516,9 +516,9 @@ function __initNodes() { addNodeObject(strandSim, "Output", Node_Group_Output).hideRecent().hideGlobal(); ds_list_add(strandSim, "System"); - addNodeObject(strandSim, "Strand Create", Node_Strand_Create, "Create strands from point, path, or mesh.").hideRecent().setVersion(1140); - addNodeObject(strandSim, "Strand Update", Node_Strand_Update, "Update strands by one step.").hideRecent().setVersion(1140); - addNodeObject(strandSim, "Strand Render", Node_Strand_Render, "Render strands to surface as a single path.").hideRecent().setVersion(1140); + addNodeObject(strandSim, "Strand Create", Node_Strand_Create, "Create strands from point, path, or mesh.").hideRecent().setVersion(1140); + addNodeObject(strandSim, "Strand Update", Node_Strand_Update, "Update strands by one step.").hideRecent().setVersion(1140); + addNodeObject(strandSim, "Strand Render", Node_Strand_Render, "Render strands to surface as a single path.").hideRecent().setVersion(1140); addNodeObject(strandSim, "Strand Render Texture", Node_Strand_Render_Texture, "Render strands to surface as a textured path.").hideRecent().setVersion(1140); ds_list_add(strandSim, "Affectors"); @@ -544,24 +544,24 @@ function __initNodes() { addNodeObject(input, "Animation", Node_Image_Animated, "Load multiple images from your computer as animation.").setBuild(Node_create_Image_Animated); addNodeObject(input, "SVG", Node_SVG, "Load a SVG file."); ds_list_add(input, "/Converters"); - addNodeObject(input, "Splice Spritesheet", Node_Image_Sheet, "Cut up spritesheet into animation or image array."); - addNodeObject(input, "Array to Anim", Node_Sequence_Anim, "Convert array of images into animation."); + addNodeObject(input, "Splice Spritesheet", Node_Image_Sheet, "Cut up spritesheet into animation or image array."); + addNodeObject(input, "Array to Anim", Node_Sequence_Anim, "Convert array of images into animation."); if(!DEMO) { ds_list_add(input, "/Exporters"); - addNodeObject(input, "Export", Node_Export, "Export image, image array to file, image sequence, animation.").setBuild(Node_create_Export); + addNodeObject(input, "Export", Node_Export, "Export image, image array to file, image sequence, animation.").setBuild(Node_create_Export); } ds_list_add(input, "Canvas"); - addNodeObject(input, "Canvas", Node_Canvas, "Draw on surface using brush, eraser, etc.").setTags(["draw"]); - addNodeObject(input, "Canvas Group", Node_Canvas_Group, "Create a group that combines multiple canvas nodes a layers.").setTags(["draw"]).setVersion(11740); - addNodeObject(input, "Active Canvas", Node_Active_Canvas, "Draw using parameterized brush.").setTags(["draw"]).setVersion(11570); + addNodeObject(input, "Canvas", Node_Canvas, "Draw on surface using brush, eraser, etc.").setTags(["draw"]); + addNodeObject(input, "Canvas Group", Node_Canvas_Group, "Create a group that combines multiple canvas nodes a layers.").setTags(["draw"]).setVersion(11740); + addNodeObject(input, "Active Canvas", Node_Active_Canvas, "Draw using parameterized brush.").setTags(["draw"]).setVersion(11570); ds_list_add(input, "Tileset"); ds_list_add(input, "/Creators"); - addNodeObject(input, "Tileset", Node_Tile_Tileset, "Create tileset object.").setVersion(1_18_03_0); - addNodeObject(input, "Tile Drawer", Node_Tile_Drawer, "Draw using tileset.").setVersion(1_18_03_0); - addNodeObject(input, "Tile Rule", Node_Tile_Rule, "Apply tileset rules.").setVersion(1_18_03_0); - addNodeObject(input, "Convert to Tilemap", Node_Tile_Convert, "Convert color image to tile data.").setVersion(1_18_03_0); + addNodeObject(input, "Tileset", Node_Tile_Tileset, "Create tileset object.").setVersion(1_18_03_0); + addNodeObject(input, "Tile Drawer", Node_Tile_Drawer, "Draw using tileset.").setVersion(1_18_03_0); + addNodeObject(input, "Tile Rule", Node_Tile_Rule, "Apply tileset rules.").setVersion(1_18_03_0); + addNodeObject(input, "Convert to Tilemap", Node_Tile_Convert, "Convert color image to tile data.").setVersion(1_18_03_0); ds_list_add(input, "/Exporters"); addNodeObject(input, "Render Tilemap", Node_Tile_Render, "Render tilemap to image.").setVersion(1_18_03_0); addNodeObject(input, "Export Tilemap", Node_Tile_Tilemap_Export, "Export tilemap to file.").setVersion(1_18_03_0); @@ -587,11 +587,11 @@ function __initNodes() { addNodeObject(input, "ASE Tag", Node_ASE_Tag, "Read tag from ASE file.").setSpr(s_node_ase_layer).setVersion(1_18_03_0); ds_list_add(input, "External"); - addNodeObject(input, "Websocket Receiver", Node_Websocket_Receiver, "Create websocket server to receive data from the network.").setVersion(1145); - addNodeObject(input, "Websocket Sender", Node_Websocket_Sender, "Create websocket server to send data to the network.").setVersion(1145); - addNodeObject(input, "Spout Sender", Node_Spout_Send, "Send surface through Spout.").setVersion(11600); - addNodeObject(input, "MIDI In", Node_MIDI_In, "Receive MIDI message.").setVersion(11630).notTest(); - addNodeObject(input, "HTTP", Node_HTTP_request, "Request data from the internet.").setVersion(11780); + addNodeObject(input, "Websocket Receiver", Node_Websocket_Receiver, "Create websocket server to receive data from the network.").setVersion(1145); + addNodeObject(input, "Websocket Sender", Node_Websocket_Sender, "Create websocket server to send data to the network.").setVersion(1145); + addNodeObject(input, "Spout Sender", Node_Spout_Send, "Send surface through Spout.").setVersion(11600); + addNodeObject(input, "MIDI In", Node_MIDI_In, "Receive MIDI message.").setVersion(11630).notTest(); + addNodeObject(input, "HTTP", Node_HTTP_request, "Request data from the internet.").setVersion(11780); ds_list_add(input, "Gamemaker"); addNodeObject(input, "GMRoom", Node_GMRoom).setSpr(s_gmroom).setVersion(1_18_04_1); @@ -610,24 +610,24 @@ function __initNodes() { addNodeObject(transform, "Polar Mirror", Node_Mirror_Polar, "Reflect the image along multiple reflection lines.").setTags(["kaleidoscope"]).setVersion(1_18_06_2); ds_list_add(transform, "Crops"); - addNodeObject(transform, "Crop", Node_Crop, "Crop out image to create smaller ones."); - addNodeObject(transform, "Crop Content", Node_Crop_Content, "Crop out empty pixel from the image."); + addNodeObject(transform, "Crop", Node_Crop, "Crop out image to create smaller ones."); + addNodeObject(transform, "Crop Content", Node_Crop_Content, "Crop out empty pixel from the image."); ds_list_add(transform, "Warps"); - addNodeObject(transform, "Warp", Node_Warp, "Warp image by freely moving the corners.").setTags(["warp corner"]); - // addNodeObject(transform, "Perspective Warp",Node_Warp_Perspective, "Warp image by modifying perspective.").setTags(["warp perspective"]); - addNodeObject(transform, "Skew", Node_Skew, "Skew image horizontally, or vertically.").setTags(["shear"]); - // addNodeObject(transform, "Grid Warp", Node_Grid_Warp, "Wrap image by modifying mesh lacttice."); - addNodeObject(transform, "Bend", Node_Bend, "Warp an image into a predefined shape.").setVersion(11650); - addNodeObject(transform, "Mesh Warp", Node_Mesh_Warp, "Wrap image by converting it to mesh, and using control points."); - addNodeObject(transform, "Polar", Node_Polar, "Convert image to polar coordinate."); - addNodeObject(transform, "Area Warp", Node_Wrap_Area, "Wrap image to fit an area value."); + addNodeObject(transform, "Warp", Node_Warp, "Warp image by freely moving the corners.").setTags(["warp corner"]); + // addNodeObject(transform, "Perspective Warp",Node_Warp_Perspective, "Warp image by modifying perspective.").setTags(["warp perspective"]); + addNodeObject(transform, "Skew", Node_Skew, "Skew image horizontally, or vertically.").setTags(["shear"]); + // addNodeObject(transform, "Grid Warp", Node_Grid_Warp, "Wrap image by modifying mesh lacttice."); + addNodeObject(transform, "Bend", Node_Bend, "Warp an image into a predefined shape.").setVersion(11650); + addNodeObject(transform, "Mesh Warp", Node_Mesh_Warp, "Wrap image by converting it to mesh, and using control points."); + addNodeObject(transform, "Polar", Node_Polar, "Convert image to polar coordinate."); + addNodeObject(transform, "Area Warp", Node_Wrap_Area, "Wrap image to fit an area value."); ds_list_add(transform, "Others"); - addNodeObject(transform, "Composite", Node_Composite, "Combine multiple images with controllable position, rotation, scale.").setTags(["merge"]); - addNodeObject(transform, "Nine Slice", Node_9Slice, "Cut image into 3x3 parts, and scale/repeat only the middle part.").setTags(["9 slice", "splice", "nine patch"]); - addNodeObject(transform, "Padding", Node_Padding, "Make image bigger by adding space in 4 directions."); - addNodeObject(transform, "Tile Random", Node_Tile_Random, "Repeat images on a larger surface randomly.").setVersion(11780); + addNodeObject(transform, "Composite", Node_Composite, "Combine multiple images with controllable position, rotation, scale.").setTags(["merge"]); + addNodeObject(transform, "Nine Slice", Node_9Slice, "Cut image into 3x3 parts, and scale/repeat only the middle part.").setTags(["9 slice", "splice", "nine patch"]); + addNodeObject(transform, "Padding", Node_Padding, "Make image bigger by adding space in 4 directions."); + addNodeObject(transform, "Tile Random", Node_Tile_Random, "Repeat images on a larger surface randomly.").setVersion(11780); #endregion #region filter @@ -699,7 +699,7 @@ function __initNodes() { addNodeObject(filter, "Erode", Node_Erode, "Remove pixel that are close to the border of the image."); addNodeObject(filter, "Round Corner", Node_Corner, "Round out sharp corner of the image.").setVersion(1110); ds_list_add(filter, "/Pixel Operations"); - addNodeObject(filter, "Pixel Math", Node_Pixel_Math, "Apply mathematical operation directly on RGBA value.").setBuild(Node_create_Pixel_Math).setTags(global.node_math_keys).setVersion(1_18_02_0); + addNodeObject(filter, "Pixel Math", Node_Pixel_Math, "Apply mathematical operation directly on RGBA value.").setBuild(Node_create_Pixel_Math).setTags(global.node_math_keys).setVersion(1_18_02_0); addNodeObject(filter, "Pixel Expand", Node_Atlas, "Replace transparent pixel with the closest non-transparent pixel.").setTags(["atlas"]); addNodeObject(filter, "Pixel Cloud", Node_Pixel_Cloud, "Displace each pixel of the image randomly."); addNodeObject(filter, "Pixel Sort", Node_Pixel_Sort, "Sort pixel by brightness in horizontal, or vertial axis."); @@ -769,21 +769,21 @@ function __initNodes() { ds_list_add(d3d, "Meshes"); ds_list_add(d3d, "/Creators"); - addNodeObject(d3d, "3D Object", Node_3D_Mesh_Obj, "Load .obj file from your computer as a 3D object.").setBuild(Node_create_3D_Obj).setVersion(11510); - addNodeObject(d3d, "3D Plane", Node_3D_Mesh_Plane, "Put 2D image on a plane in 3D space.").setVersion(11510); - addNodeObject(d3d, "3D Cube", Node_3D_Mesh_Cube).setVersion(11510); - addNodeObject(d3d, "3D Cylinder", Node_3D_Mesh_Cylinder).setVersion(11510); - addNodeObject(d3d, "3D UV Sphere", Node_3D_Mesh_Sphere_UV).setVersion(11510); - addNodeObject(d3d, "3D Icosphere", Node_3D_Mesh_Sphere_Ico).setVersion(11510); - addNodeObject(d3d, "3D Cone", Node_3D_Mesh_Cone).setVersion(11510); - addNodeObject(d3d, "3D Torus", Node_3D_Mesh_Torus).setVersion(1_18_01_0); + addNodeObject(d3d, "3D Object", Node_3D_Mesh_Obj, "Load .obj file from your computer as a 3D object.").setBuild(Node_create_3D_Obj).setVersion(11510); + addNodeObject(d3d, "3D Plane", Node_3D_Mesh_Plane, "Put 2D image on a plane in 3D space.").setVersion(11510); + addNodeObject(d3d, "3D Cube", Node_3D_Mesh_Cube, "Create 3D cube mesh.").setVersion(11510); + addNodeObject(d3d, "3D Cylinder", Node_3D_Mesh_Cylinder, "Create 3D cylinder mesh").setVersion(11510); + addNodeObject(d3d, "3D UV Sphere", Node_3D_Mesh_Sphere_UV, "Create 3D uv sphere mesh").setVersion(11510); + addNodeObject(d3d, "3D Icosphere", Node_3D_Mesh_Sphere_Ico, "Create 3D icosphere mesh").setVersion(11510); + addNodeObject(d3d, "3D Cone", Node_3D_Mesh_Cone, "Create 3D cone mesh").setVersion(11510); + addNodeObject(d3d, "3D Torus", Node_3D_Mesh_Torus, "Create 3D torus mesh").setVersion(1_18_01_0); addNodeObject(d3d, "3D Terrain", Node_3D_Mesh_Terrain, "Create 3D terrain from height map.").setVersion(11560); - addNodeObject(d3d, "3D Wall Builder", Node_3D_Mesh_Wall_Builder).setVersion(1_18_01_0); + addNodeObject(d3d, "3D Wall Builder", Node_3D_Mesh_Wall_Builder, "Create 3D wall be extruding 2D path.").setVersion(1_18_01_0); addNodeObject(d3d, "Surface Extrude", Node_3D_Mesh_Extrude, "Extrude 2D image into 3D object.").setVersion(11510); addNodeObject(d3d, "Path Extrude", Node_3D_Mesh_Path_Extrude, "Extrude path into 3D object.").setVersion(11750); ds_list_add(d3d, "/Exporters"); - addNodeObject(d3d, "Mesh Export", Node_3D_Mesh_Export, "Export 3D mesh as .obj file").setVersion(11740); - addNodeObject(d3d, "Slice Stack", Node_3D_Mesh_Stack_Slice).setVersion(11750); + addNodeObject(d3d, "Mesh Export", Node_3D_Mesh_Export, "Export 3D mesh as .obj file").setVersion(11740); + addNodeObject(d3d, "Slice Stack", Node_3D_Mesh_Stack_Slice, "Slice 3D object into array of 2d images.").setVersion(11750); ds_list_add(d3d, "Light"); addNodeObject(d3d, "Directional Light", Node_3D_Light_Directional, "Create directional light directed at the origin point.").setVersion(11510); @@ -791,28 +791,28 @@ function __initNodes() { ds_list_add(d3d, "Modify"); ds_list_add(d3d, "/Meshes"); - addNodeObject(d3d, "Transform", Node_3D_Transform, "Transform 3D object.").setVersion(11570); - addNodeObject(d3d, "Transform Scene", Node_3D_Transform_Scene, "Transform 3D scene, accepts array of transformations for each objects.").setVersion(11570); - addNodeObject(d3d, "Discretize vertex", Node_3D_Round_Vertex, "Round out vertex position to a specified step.").setVersion(11560); - addNodeObject(d3d, "3D Displace", Node_3D_Displace).setVersion(1_18_01_0); - addNodeObject(d3d, "3D Subdivide", Node_3D_Subdivide).setVersion(1_18_03_0); + addNodeObject(d3d, "Transform", Node_3D_Transform, "Transform 3D object.").setVersion(11570); + addNodeObject(d3d, "Transform Scene", Node_3D_Transform_Scene, "Transform 3D scene, accepts array of transformations for each objects.").setVersion(11570); + addNodeObject(d3d, "Discretize vertex", Node_3D_Round_Vertex, "Round out vertex position to a specified step.").setVersion(11560); + addNodeObject(d3d, "3D Displace", Node_3D_Displace, "Shift vertex of 3D mesh using 2D map.").setVersion(1_18_01_0); + addNodeObject(d3d, "3D Subdivide", Node_3D_Subdivide, "Subdivide faces in mesh.").setVersion(1_18_03_0); ds_list_add(d3d, "/Instances"); - addNodeObject(d3d, "3D Repeat", Node_3D_Repeat, "Repeat the same 3D mesh multiple times.").setVersion(11510); + addNodeObject(d3d, "3D Repeat", Node_3D_Repeat, "Repeat the same 3D mesh multiple times.").setVersion(11510); // addNodeObject(d3d, "3D Instancer", Node_3D_Instancer).setVersion(11560); // addNodeObject(d3d, "3D Particle", Node_3D_Particle).setVersion(11560); ds_list_add(d3d, "/Materials"); - addNodeObject(d3d, "Set Material", Node_3D_Set_Material, "Replace mesh material with a new one.").setVersion(11560); - addNodeObject(d3d, "UV Remap", Node_3D_UV_Remap, "Remap UV map using plane.").setVersion(11570); + addNodeObject(d3d, "Set Material", Node_3D_Set_Material, "Replace mesh material with a new one.").setVersion(11560); + addNodeObject(d3d, "UV Remap", Node_3D_UV_Remap, "Remap UV map using plane.").setVersion(11570); ds_list_add(d3d, "Points"); - addNodeObject(d3d, "Point Affector", Node_3D_Point_Affector, "Generate array of 3D points interpolating between two values based on the distance.").setVersion(11570); + addNodeObject(d3d, "Point Affector", Node_3D_Point_Affector, "Generate array of 3D points interpolating between two values based on the distance.").setVersion(11570); ds_list_add(d3d, "Ray Marching"); - addNodeObject(d3d, "RM Primitive", Node_RM_Primitive).setBuild(Node_create_RM_Primitive).setTags(global.node_rm_primitive_keys).setVersion(11720); - addNodeObject(d3d, "RM Terrain", Node_RM_Terrain).setTags(["ray marching"]).setVersion(11720); - addNodeObject(d3d, "RM Combine", Node_RM_Combine).setTags(["ray marching", "rm boolean"]).setVersion(11740); - addNodeObject(d3d, "RM Render", Node_RM_Render).setTags(["ray marching"]).setVersion(11740); - addNodeObject(d3d, "RM Cloud", Node_RM_Cloud, "Generate distance field cloud.").patreonExtra(); + addNodeObject(d3d, "RM Primitive", Node_RM_Primitive, "Create SDF object.").setBuild(Node_create_RM_Primitive).setTags(global.node_rm_primitive_keys).setVersion(11720); + addNodeObject(d3d, "RM Combine", Node_RM_Combine, "Combine 2 SDF objects using boolean operation.").setTags(["ray marching", "rm boolean"]).setVersion(11740); + addNodeObject(d3d, "RM Render", Node_RM_Render, "Render SDF object.").setTags(["ray marching"]).setVersion(11740); + addNodeObject(d3d, "RM Terrain", Node_RM_Terrain, "Generate SDF image from height map.").setTags(["ray marching"]).setVersion(11720); + addNodeObject(d3d, "RM Cloud", Node_RM_Cloud, "Generate distance field cloud texture.").patreonExtra(); #endregion #region generator @@ -835,7 +835,7 @@ function __initNodes() { addNodeObject(generator, "Draw Cross Section", Node_Cross_Section, "Map the brightness of pixels on a linear axis into a surface.").setVersion(11710); addNodeObject(generator, "Interpret Number", Node_Interpret_Number, "Convert array of number into surface.").setVersion(11530); addNodeObject(generator, "Pixel Builder", Node_Pixel_Builder, "Will break, do not create. please. Why is it here??").setVersion(11540); - addNodeObject(generator, "Tile Drawer", Node_Tile_Drawer).setVersion(1_18_03_0); + addNodeObject(generator, "Tile Drawer", Node_Tile_Drawer, "Draw using tileset.").setVersion(1_18_03_0); ds_list_add(generator, "Noises"); ds_list_add(generator, "/Basics"); @@ -900,43 +900,43 @@ function __initNodes() { addNodeObject(generator, "Flood Fill", Node_Flood_Fill, "Filled connected pixel given position and color.").setVersion(1133); ds_list_add(generator, "MK Effects"); - addNodeObject(generator, "MK Rain", Node_MK_Rain, "Generate deterministic rain.").setVersion(11600); - addNodeObject(generator, "MK GridBalls", Node_MK_GridBalls, "Generate controllable grid of spheres.").setVersion(11600); - addNodeObject(generator, "MK GridFlip", Node_MK_GridFlip, "Generate controllable grid of planes.").setVersion(11600); - addNodeObject(generator, "MK Saber", Node_MK_Saber, "Generate glowing saber from 2 points.").setVersion(11600); - addNodeObject(generator, "MK Tile", Node_MK_Tile, "Generate game engines-ready tileset.").setVersion(11600); - addNodeObject(generator, "MK Flag", Node_MK_Flag, "Generate waving flag.").setVersion(11600); - addNodeObject(generator, "MK Brownian", Node_MK_Brownian, "Generate random particle.").setVersion(11630); - addNodeObject(generator, "MK Fall", Node_MK_Fall, "Generate leaves falling effects.").setTags(["Leaf", "Leaves"]).setVersion(11630); - addNodeObject(generator, "MK Blinker", Node_MK_Blinker, "Flicker regions of the selected colors randomly.").setVersion(11630); - addNodeObject(generator, "MK Lens Flare", Node_MK_Flare, "Generate lens flare.").setVersion(11630); - addNodeObject(generator, "MK Delay Machine", Node_MK_Delay_Machine,"Combines multiple frames of animation into one.").setVersion(11680); - addNodeObject(generator, "MK Fracture", Node_MK_Fracture, "Deterministically fracture and image and apply basic physics.").patreonExtra(); - addNodeObject(generator, "MK Sparkle", Node_MK_Sparkle, "Generate random star animation.").patreonExtra(); - addNodeObject(generator, "MK Subpixel", Node_MK_Subpixel, "Apply subpixel filter on top of a surface.").setVersion(1_17_11_0); + addNodeObject(generator, "MK Rain", Node_MK_Rain, "Generate deterministic rain.").setVersion(11600); + addNodeObject(generator, "MK GridBalls", Node_MK_GridBalls, "Generate controllable grid of spheres.").setVersion(11600); + addNodeObject(generator, "MK GridFlip", Node_MK_GridFlip, "Generate controllable grid of planes.").setVersion(11600); + addNodeObject(generator, "MK Saber", Node_MK_Saber, "Generate glowing saber from 2 points.").setVersion(11600); + addNodeObject(generator, "MK Tile", Node_MK_Tile, "Generate game engines-ready tileset.").setVersion(11600); + addNodeObject(generator, "MK Flag", Node_MK_Flag, "Generate waving flag.").setVersion(11600); + addNodeObject(generator, "MK Brownian", Node_MK_Brownian, "Generate random particle.").setVersion(11630); + addNodeObject(generator, "MK Fall", Node_MK_Fall, "Generate leaves falling effects.").setTags(["Leaf", "Leaves"]).setVersion(11630); + addNodeObject(generator, "MK Blinker", Node_MK_Blinker, "Flicker regions of the selected colors randomly.").setVersion(11630); + addNodeObject(generator, "MK Lens Flare", Node_MK_Flare, "Generate lens flare.").setVersion(11630); + addNodeObject(generator, "MK Delay Machine", Node_MK_Delay_Machine, "Combines multiple frames of animation into one.").setVersion(11680); + addNodeObject(generator, "MK Fracture", Node_MK_Fracture, "Deterministically fracture and image and apply basic physics.").patreonExtra(); + addNodeObject(generator, "MK Sparkle", Node_MK_Sparkle, "Generate random star animation.").patreonExtra(); + addNodeObject(generator, "MK Subpixel", Node_MK_Subpixel, "Apply subpixel filter on top of a surface.").setVersion(1_17_11_0); #endregion #region compose var compose = ds_list_create(); addNodeCatagory("Compose", compose); ds_list_add(compose, "Composes"); - addNodeObject(compose, "Blend", Node_Blend, "Combine 2 images using different blend modes."); - addNodeObject(compose, "Composite", Node_Composite, "Combine multiple images with custom transformation."); - addNodeObject(compose, "Stack", Node_Stack, "Place image next to each other linearly, or on top of each other.").setVersion(1070); - addNodeObject(compose, "Image Grid", Node_Image_Grid, "Place image next to each other in grid pattern.").setVersion(11640); + addNodeObject(compose, "Blend", Node_Blend, "Combine 2 images using different blend modes."); + addNodeObject(compose, "Composite", Node_Composite, "Combine multiple images with custom transformation."); + addNodeObject(compose, "Stack", Node_Stack, "Place image next to each other linearly, or on top of each other.").setVersion(1070); + addNodeObject(compose, "Image Grid", Node_Image_Grid, "Place image next to each other in grid pattern.").setVersion(11640); addNodeObject(compose, "Camera", Node_Camera, "Create camera that crop image to fix dimension with control of position, zoom. Also can be use to create parallax effect."); addNodeObject(compose, "Render Spritesheet", Node_Render_Sprite_Sheet, "Create spritesheet from image array or animation."); - addNodeObject(compose, "Pack Sprites", Node_Pack_Sprites, "Combine array of images with different dimension using different algorithms.").setVersion(1140); + addNodeObject(compose, "Pack Sprites", Node_Pack_Sprites, "Combine array of images with different dimension using different algorithms.").setVersion(1140); ds_list_add(compose, "Armature"); ds_list_add(compose, "/Basics"); - addNodeObject(compose, "Armature Create", Node_Armature, "Create new armature system." ).setTags(["rigging", "bone"]).setVersion(1146); - addNodeObject(compose, "Armature Pose", Node_Armature_Pose, "Pose armature system." ).setTags(["rigging", "bone"]).setVersion(1146); - addNodeObject(compose, "Armature Bind", Node_Armature_Bind, "Bind and render image to an armature system." ).setTags(["rigging", "bone"]).setVersion(1146); - addNodeObject(compose, "Armature Mesh Rig", Node_Armature_Mesh_Rig, "Rig mesh to armature system." ).setTags(["rigging", "bone"]).setVersion(1_18_04_0); + addNodeObject(compose, "Armature Create", Node_Armature, "Create new armature system." ).setTags(["rigging", "bone"]).setVersion(1146); + addNodeObject(compose, "Armature Pose", Node_Armature_Pose, "Pose armature system." ).setTags(["rigging", "bone"]).setVersion(1146); + addNodeObject(compose, "Armature Bind", Node_Armature_Bind, "Bind and render image to an armature system." ).setTags(["rigging", "bone"]).setVersion(1146); + addNodeObject(compose, "Armature Mesh Rig", Node_Armature_Mesh_Rig, "Rig mesh to armature system." ).setTags(["rigging", "bone"]).setVersion(1_18_04_0); ds_list_add(compose, "/Convertors"); - addNodeObject(compose, "Armature Path", Node_Armature_Path, "Generate path from armature system." ).setTags(["rigging", "bone"]).setVersion(1146); - addNodeObject(compose, "Armature Sample", Node_Armature_Sample, "Sample point from armature system." ).setTags(["rigging", "bone"]).setVersion(1147); + addNodeObject(compose, "Armature Path", Node_Armature_Path, "Generate path from armature system." ).setTags(["rigging", "bone"]).setVersion(1146); + addNodeObject(compose, "Armature Sample", Node_Armature_Sample, "Sample point from armature system." ).setTags(["rigging", "bone"]).setVersion(1147); if(!DEMO) { ds_list_add(compose, "Export"); @@ -948,11 +948,11 @@ function __initNodes() { var values = ds_list_create(); addNodeCatagory("Values", values); ds_list_add(values, "Raw data"); - addNodeObject(values, "Number", Node_Number, "Generate number data."); - addNodeObject(values, "Boolean", Node_Boolean, "Generate boolean (true, false) data.").setVersion(1090); - addNodeObject(values, "Text", Node_String, "Generate text/string data."); - addNodeObject(values, "Path", Node_Path, "Generate path."); - addNodeObject(values, "Area", Node_Area, "Generate area data."); + addNodeObject(values, "Number", Node_Number, "Generate number data."); + addNodeObject(values, "Boolean", Node_Boolean, "Generate boolean (true, false) data.").setVersion(1090); + addNodeObject(values, "Text", Node_String, "Generate text/string data."); + addNodeObject(values, "Path", Node_Path, "Generate path."); + addNodeObject(values, "Area", Node_Area, "Generate area data."); ds_list_add(values, "Numbers"); ds_list_add(values, "/Creators"); @@ -1065,7 +1065,7 @@ function __initNodes() { ds_list_add(values, "/To Surface"); addNodeObject(values, "Fill Path", Node_Path_Fill, "Fill area inside path.").setVersion(1_18_06_2); addNodeObject(values, "Map Path", Node_Path_Map, "Map a texture between multiple paths.").setVersion(11640); - addNodeObject(values, "Morph Path", Node_Path_Morph).setVersion(1_18_06_2); + addNodeObject(values, "Morph Path", Node_Path_Morph, "Draw gradient connecting 2 paths.").setVersion(1_18_06_2); ds_list_add(values, "/Segments"); addNodeObject(values, "Filter Segments", Node_Segment_Filter, "Filter segment (vec2 array) based on a conditions.").setVersion(11780); diff --git a/scripts/surface_exr_encode/surface_exr_encode.gml b/scripts/surface_exr_encode/surface_exr_encode.gml new file mode 100644 index 000000000..7b9cec173 --- /dev/null +++ b/scripts/surface_exr_encode/surface_exr_encode.gml @@ -0,0 +1,166 @@ +function surface_exr_encode(surface, path, param = {}) { + if(!surface_exists(surface)) return; + + var _sw = surface_get_width(surface); + var _sh = surface_get_height(surface); + var _fr = surface_get_format(surface); + var _fb = surface_format_get_channel(_fr); + var _ty = surface_format_get_buffer_type(_fr); + + var _px = array_create(_sw * _sh * _fb); + var _sb = buffer_from_surface(surface, false); + var _gam = struct_try_get(param, "gamma")? 2.2 : 1; + var _lim = _fr == surface_rgba8unorm? 255 : 1; + buffer_to_start(_sb); + + for( var i = 0; i < _sh; i++ ) { + var _line = i * _sw * _fb; + + if(_fb == 1) { + for( var j = 0; j < _sw; j++ ) { + var _y = buffer_read(_sb, _ty); + + _px[_line + _sw * 0 + j] = power(_y, _gam) / _lim; + } + + } else if(_fb == 4) { + for( var j = 0; j < _sw; j++ ) { + var _a = buffer_read(_sb, _ty); + var _b = buffer_read(_sb, _ty); + var _g = buffer_read(_sb, _ty); + var _r = buffer_read(_sb, _ty); + + _px[_line + _sw * 0 + j] = power(_r, _gam) / _lim; + _px[_line + _sw * 1 + j] = power(_g, _gam) / _lim; + _px[_line + _sw * 2 + j] = power(_b, _gam) / _lim; + _px[_line + _sw * 3 + j] = _a / _lim; + } + } + } + + buffer_delete(_sb); + + var _offset_position = 0; + var _line_count = _sh; + var _line_offsets = array_create(_line_count); + + var _b = buffer_create(1, buffer_grow, 1); + buffer_to_start(_b); + + /// VERSION + + buffer_write(_b, buffer_u32, 20000630); + buffer_write(_b, buffer_u8, 2); + buffer_write(_b, buffer_u8, 0); + buffer_write(_b, buffer_u8, 0); + buffer_write(_b, buffer_u8, 0); + + /// HEADER + + buffer_write(_b, buffer_string, "channels"); + buffer_write(_b, buffer_string, "chlist"); + buffer_write(_b, buffer_u32, 18 * _fb + 1); + if(_fb == 1) { + buffer_write(_b, buffer_string, "Y"); + buffer_write(_b, buffer_u32, 2); + buffer_write(_b, buffer_u32, 0); + buffer_write(_b, buffer_u32, 1); + buffer_write(_b, buffer_u32, 1); + + } else { + buffer_write(_b, buffer_string, "R"); + buffer_write(_b, buffer_u32, 2); + buffer_write(_b, buffer_u32, 0); + buffer_write(_b, buffer_u32, 1); + buffer_write(_b, buffer_u32, 1); + + buffer_write(_b, buffer_string, "G"); + buffer_write(_b, buffer_u32, 2); + buffer_write(_b, buffer_u32, 0); + buffer_write(_b, buffer_u32, 1); + buffer_write(_b, buffer_u32, 1); + + buffer_write(_b, buffer_string, "B"); + buffer_write(_b, buffer_u32, 2); + buffer_write(_b, buffer_u32, 0); + buffer_write(_b, buffer_u32, 1); + buffer_write(_b, buffer_u32, 1); + + buffer_write(_b, buffer_string, "A"); + buffer_write(_b, buffer_u32, 2); + buffer_write(_b, buffer_u32, 0); + buffer_write(_b, buffer_u32, 1); + buffer_write(_b, buffer_u32, 1); + } + buffer_write(_b, buffer_u8, 0); + + buffer_write(_b, buffer_string, "compression"); + buffer_write(_b, buffer_string, "compression"); + buffer_write(_b, buffer_u32, 1); + buffer_write(_b, buffer_u8, 0); + + buffer_write(_b, buffer_string, "dataWindow"); + buffer_write(_b, buffer_string, "box2i"); + buffer_write(_b, buffer_u32, 16); + buffer_write(_b, buffer_u32, 0); + buffer_write(_b, buffer_u32, 0); + buffer_write(_b, buffer_u32, _sw - 1); + buffer_write(_b, buffer_u32, _sh - 1); + + buffer_write(_b, buffer_string, "displayWindow"); + buffer_write(_b, buffer_string, "box2i"); + buffer_write(_b, buffer_u32, 16); + buffer_write(_b, buffer_u32, 0); + buffer_write(_b, buffer_u32, 0); + buffer_write(_b, buffer_u32, _sw - 1); + buffer_write(_b, buffer_u32, _sh - 1); + + buffer_write(_b, buffer_string, "lineOrder"); + buffer_write(_b, buffer_string, "lineOrder"); + buffer_write(_b, buffer_u32, 1); + buffer_write(_b, buffer_u8, 0); + + buffer_write(_b, buffer_string, "pixelAspectRatio"); + buffer_write(_b, buffer_string, "float"); + buffer_write(_b, buffer_u32, 4); + buffer_write(_b, buffer_f32, 1); + + buffer_write(_b, buffer_string, "screenWindowCenter"); + buffer_write(_b, buffer_string, "v2f"); + buffer_write(_b, buffer_u32, 8); + buffer_write(_b, buffer_f32, 0); + buffer_write(_b, buffer_f32, 0); + + buffer_write(_b, buffer_string, "screenWindowWidth"); + buffer_write(_b, buffer_string, "float"); + buffer_write(_b, buffer_u32, 4); + buffer_write(_b, buffer_f32, 1); + + buffer_write(_b, buffer_u8, 0); + + /// OFFSETS + + _offset_position = buffer_tell(_b); + repeat(_line_count) buffer_write(_b, buffer_u64, 0); + + /// PIXEL + + for( var i = 0; i < _line_count; i++ ) { + _line_offsets[i] = buffer_tell(_b); + var _lo = i * _sw * _fb; + + buffer_write(_b, buffer_u32, i); + buffer_write(_b, buffer_u32, _sw * 4 * _fb); + + for( var j = 0; j < _sw * _fb; j++ ) + buffer_write(_b, buffer_f32, _px[_lo + j]); + } + + buffer_seek(_b, buffer_seek_start, _offset_position); + for( var i = 0; i < _line_count; i++ ) + buffer_write(_b, buffer_u64, _line_offsets[i]); + + buffer_save(_b, path); + buffer_delete(_b); + return 1; +} \ No newline at end of file diff --git a/scripts/surface_exr_encode/surface_exr_encode.yy b/scripts/surface_exr_encode/surface_exr_encode.yy new file mode 100644 index 000000000..4436e1677 --- /dev/null +++ b/scripts/surface_exr_encode/surface_exr_encode.yy @@ -0,0 +1,14 @@ +{ + "$GMScript":"v1", + "%Name":"surface_exr_encode", + "isCompatibility":false, + "isDnD":false, + "name":"surface_exr_encode", + "parent":{ + "name":"surface", + "path":"folders/functions/surface.yy", + }, + "resourceType":"GMScript", + "resourceVersion":"2.0", + "tags":[], +} \ No newline at end of file diff --git a/scripts/surface_functions/surface_functions.gml b/scripts/surface_functions/surface_functions.gml index 104e3e4a4..8200f16f9 100644 --- a/scripts/surface_functions/surface_functions.gml +++ b/scripts/surface_functions/surface_functions.gml @@ -509,6 +509,34 @@ function surface_reset_target_override() { __surface_reset_target(); winwin_draw return _arr; } + function surface_format_get_buffer_type(format) { + switch(format) { + case surface_rgba4unorm : return buffer_u8; break; + case surface_rgba8unorm : return buffer_u8; break; + case surface_rgba16float : return buffer_f16; break; + case surface_rgba32float : return buffer_f32; break; + + case surface_r8unorm : return buffer_u8; break; + case surface_r16float : return buffer_f16; break; + case surface_r32float : return buffer_f32; break; + } + return buffer_u8; + } + + function surface_format_get_channel(format) { + switch(format) { + case surface_rgba4unorm : + case surface_rgba8unorm : + case surface_rgba16float : + case surface_rgba32float : return 4; break; + + case surface_r8unorm : + case surface_r16float : + case surface_r32float : return 1; break; + } + return 1; + } + function surface_format_get_bytes(format) { switch(format) { case surface_rgba4unorm : return 4 * 0.5; break;