From db9a16ddb483f403f5bae16806987bcdfc52ff0f Mon Sep 17 00:00:00 2001 From: Tanasart Date: Thu, 19 Dec 2024 10:31:55 +0700 Subject: [PATCH] New Julia generate node. --- PixelComposer.resource_order | 77 ++++++++------- PixelComposer.yyp | 7 +- PixelComposer.yyp.css | 3 +- .../__node_module_test.gml} | 0 .../__node_module_test.yy} | 4 +- .../node_outline.yy | 0 scripts/d3d_object/d3d_object.gml | 2 +- scripts/file_functions/file_functions.gml | 2 +- scripts/globals/globals.gml | 2 +- scripts/node_export/node_export.gml | 43 ++++----- scripts/node_julia_set/node_julia_set.gml | 68 +++++++++++++ scripts/node_julia_set/node_julia_set.yy | 13 +++ scripts/node_registry/node_registry.gml | 1 + scripts/shell_functions/shell_functions.gml | 6 +- shaders/sh_julia_set/sh_julia_set.fsh | 35 +++++++ shaders/sh_julia_set/sh_julia_set.vsh | 19 ++++ shaders/sh_julia_set/sh_julia_set.yy | 12 +++ .../967a260d-7864-4afa-a218-b2c6bb9c86b6.png | Bin 0 -> 2670 bytes .../2fe3949f-683a-4d3d-b2ee-0d05f3945a26.png | Bin 0 -> 2670 bytes sprites/s_node_julia/s_node_julia.yy | 90 ++++++++++++++++++ 20 files changed, 314 insertions(+), 70 deletions(-) rename scripts/{node_module_test/node_module_test.gml => __node_module_test/__node_module_test.gml} (100%) rename scripts/{node_module_test/node_module_test.yy => __node_module_test/__node_module_test.yy} (75%) rename scripts/{node_module_test => __node_module_test}/node_outline.yy (100%) create mode 100644 scripts/node_julia_set/node_julia_set.gml create mode 100644 scripts/node_julia_set/node_julia_set.yy create mode 100644 shaders/sh_julia_set/sh_julia_set.fsh create mode 100644 shaders/sh_julia_set/sh_julia_set.vsh create mode 100644 shaders/sh_julia_set/sh_julia_set.yy create mode 100644 sprites/s_node_julia/967a260d-7864-4afa-a218-b2c6bb9c86b6.png create mode 100644 sprites/s_node_julia/layers/967a260d-7864-4afa-a218-b2c6bb9c86b6/2fe3949f-683a-4d3d-b2ee-0d05f3945a26.png create mode 100644 sprites/s_node_julia/s_node_julia.yy diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index ef9b2cb8b..6594bc410 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -108,7 +108,7 @@ {"name":"for_sort","order":5,"path":"folders/nodes/data/iterate/for_sort.yy",}, {"name":"for","order":2,"path":"folders/nodes/data/iterate/for.yy",}, {"name":"lua","order":9,"path":"folders/nodes/data/lua.yy",}, - {"name":"misc","order":20,"path":"folders/nodes/data/misc.yy",}, + {"name":"misc","order":19,"path":"folders/nodes/data/misc.yy",}, {"name":"tunnel","order":1,"path":"folders/nodes/data/misc/tunnel.yy",}, {"name":"MKFX","order":10,"path":"folders/nodes/data/MKFX.yy",}, {"name":"PCX","order":11,"path":"folders/nodes/data/PCX.yy",}, @@ -210,26 +210,25 @@ {"name":"morph","order":6,"path":"folders/shader/filter/morph.yy",}, {"name":"shadow_caster","order":7,"path":"folders/shader/filter/shadow_caster.yy",}, {"name":"shape_seperator","order":8,"path":"folders/shader/filter/shape_seperator.yy",}, + {"name":"shuffle","order":15,"path":"folders/shader/filter/shuffle.yy",}, {"name":"surface_replace","order":9,"path":"folders/shader/filter/surface_replace.yy",}, {"name":"warp","order":10,"path":"folders/shader/filter/warp.yy",}, {"name":"flood_fill","order":8,"path":"folders/shader/flood_fill.yy",}, {"name":"generator","order":9,"path":"folders/shader/generator.yy",}, - {"name":"blinker","order":19,"path":"folders/shader/generator/blinker.yy",}, - {"name":"cell","order":20,"path":"folders/shader/generator/cell.yy",}, - {"name":"grid","order":18,"path":"folders/shader/generator/grid.yy",}, - {"name":"interpret","order":17,"path":"folders/shader/generator/interpret.yy",}, - {"name":"random_shape","order":21,"path":"folders/shader/generator/random_shape.yy",}, - {"name":"reaction_diffusion","order":22,"path":"folders/shader/generator/reaction_diffusion.yy",}, - {"name":"region","order":23,"path":"folders/shader/generator/region.yy",}, - {"name":"sky model","order":31,"path":"folders/shader/generator/sky model.yy",}, - {"name":"texture repeat","order":28,"path":"folders/shader/generator/texture repeat.yy",}, - {"name":"vector_mapper","order":24,"path":"folders/shader/generator/vector_mapper.yy",}, + {"name":"blinker","order":2,"path":"folders/shader/generator/blinker.yy",}, + {"name":"cell","order":3,"path":"folders/shader/generator/cell.yy",}, + {"name":"grid","order":1,"path":"folders/shader/generator/grid.yy",}, + {"name":"random_shape","order":4,"path":"folders/shader/generator/random_shape.yy",}, + {"name":"reaction_diffusion","order":5,"path":"folders/shader/generator/reaction_diffusion.yy",}, + {"name":"region","order":6,"path":"folders/shader/generator/region.yy",}, + {"name":"sky model","order":9,"path":"folders/shader/generator/sky model.yy",}, + {"name":"texture repeat","order":8,"path":"folders/shader/generator/texture repeat.yy",}, + {"name":"vector_mapper","order":7,"path":"folders/shader/generator/vector_mapper.yy",}, {"name":"mask","order":10,"path":"folders/shader/mask.yy",}, {"name":"misc","order":11,"path":"folders/shader/misc.yy",}, {"name":"find_boundary","order":7,"path":"folders/shader/misc/find_boundary.yy",}, {"name":"MK effects","order":12,"path":"folders/shader/MK effects.yy",}, {"name":"Fracture","order":2,"path":"folders/shader/MK effects/Fracture.yy",}, - {"name":"shuffle","order":15,"path":"folders/shader/filter/shuffle.yy",}, {"name":"Subpixel","order":3,"path":"folders/shader/MK effects/Subpixel.yy",}, {"name":"Tile","order":1,"path":"folders/shader/MK effects/Tile.yy",}, {"name":"noise","order":19,"path":"folders/shader/noise.yy",}, @@ -420,14 +419,15 @@ {"name":"__node_custom","order":14,"path":"scripts/__node_custom/__node_custom.yy",}, {"name":"__node_iterator_inline","order":7,"path":"scripts/__node_iterator_inline/__node_iterator_inline.yy",}, {"name":"__node_iterator","order":6,"path":"scripts/__node_iterator/__node_iterator.yy",}, + {"name":"__node_module_test","order":25,"path":"scripts/__node_module_test/__node_module_test.yy",}, {"name":"__node_module","order":13,"path":"scripts/__node_module/__node_module.yy",}, {"name":"__node_PCX","order":5,"path":"scripts/__node_PCX/__node_PCX.yy",}, - {"name":"__node_process_template","order":22,"path":"scripts/__node_process_template/__node_process_template.yy",}, - {"name":"__node_shader_generator","order":25,"path":"scripts/__node_shader_generator/__node_shader_generator.yy",}, - {"name":"__node_shader_processor","order":26,"path":"scripts/__node_shader_processor/__node_shader_processor.yy",}, - {"name":"__node_shader","order":24,"path":"scripts/__node_shader/__node_shader.yy",}, + {"name":"__node_process_template","order":21,"path":"scripts/__node_process_template/__node_process_template.yy",}, + {"name":"__node_shader_generator","order":23,"path":"scripts/__node_shader_generator/__node_shader_generator.yy",}, + {"name":"__node_shader_processor","order":24,"path":"scripts/__node_shader_processor/__node_shader_processor.yy",}, + {"name":"__node_shader","order":22,"path":"scripts/__node_shader/__node_shader.yy",}, {"name":"__node_surface_filter","order":15,"path":"scripts/__node_surface_filter/__node_surface_filter.yy",}, - {"name":"__node_template","order":21,"path":"scripts/__node_template/__node_template.yy",}, + {"name":"__node_template","order":20,"path":"scripts/__node_template/__node_template.yy",}, {"name":"__node_value_array","order":12,"path":"scripts/__node_value_array/__node_value_array.yy",}, {"name":"__node_value_object","order":3,"path":"scripts/__node_value_object/__node_value_object.yy",}, {"name":"__node_value_processor","order":5,"path":"scripts/__node_value_processor/__node_value_processor.yy",}, @@ -916,6 +916,7 @@ {"name":"node_jpeg","order":25,"path":"scripts/node_jpeg/node_jpeg.yy",}, {"name":"node_json_file_read","order":5,"path":"scripts/node_json_file_read/node_json_file_read.yy",}, {"name":"node_json_file_write","order":9,"path":"scripts/node_json_file_write/node_json_file_write.yy",}, + {"name":"node_julia_set","order":17,"path":"scripts/node_julia_set/node_julia_set.yy",}, {"name":"node_keyframe","order":4,"path":"scripts/node_keyframe/node_keyframe.yy",}, {"name":"node_kuwahara","order":22,"path":"scripts/node_kuwahara/node_kuwahara.yy",}, {"name":"node_lerp","order":3,"path":"scripts/node_lerp/node_lerp.yy",}, @@ -950,7 +951,6 @@ {"name":"node_mk_sparkle","order":14,"path":"scripts/node_mk_sparkle/node_mk_sparkle.yy",}, {"name":"node_mk_subpixel","order":16,"path":"scripts/node_mk_subpixel/node_mk_subpixel.yy",}, {"name":"node_mk_tile","order":7,"path":"scripts/node_mk_tile/node_mk_tile.yy",}, - {"name":"node_module_test","order":23,"path":"scripts/node_module_test/node_module_test.yy",}, {"name":"node_monitor_capture","order":21,"path":"scripts/node_monitor_capture/node_monitor_capture.yy",}, {"name":"node_morph_surface","order":5,"path":"scripts/node_morph_surface/node_morph_surface.yy",}, {"name":"node_move_point","order":9,"path":"scripts/node_move_point/node_move_point.yy",}, @@ -1413,14 +1413,14 @@ {"name":"window_functions","order":2,"path":"scripts/window_functions/window_functions.yy",}, {"name":"winwin_extras","order":6,"path":"scripts/winwin_extras/winwin_extras.yy",}, {"name":"winwin_utils","order":7,"path":"scripts/winwin_utils/winwin_utils.yy",}, - {"name":"sh_2d_light_apply","order":32,"path":"shaders/sh_2d_light_apply/sh_2d_light_apply.yy",}, - {"name":"sh_2d_light","order":10,"path":"shaders/sh_2d_light/sh_2d_light.yy",}, + {"name":"sh_2d_light_apply","order":31,"path":"shaders/sh_2d_light_apply/sh_2d_light_apply.yy",}, + {"name":"sh_2d_light","order":20,"path":"shaders/sh_2d_light/sh_2d_light.yy",}, {"name":"sh_3d_depth","order":6,"path":"shaders/sh_3d_depth/sh_3d_depth.yy",}, {"name":"sh_3d_extrude_corner","order":7,"path":"shaders/sh_3d_extrude_corner/sh_3d_extrude_corner.yy",}, {"name":"sh_3d_extrude_filler_depth","order":9,"path":"shaders/sh_3d_extrude_filler_depth/sh_3d_extrude_filler_depth.yy",}, {"name":"sh_3d_extrude_filler","order":8,"path":"shaders/sh_3d_extrude_filler/sh_3d_extrude_filler.yy",}, {"name":"sh_ace","order":22,"path":"shaders/sh_ace/sh_ace.yy",}, - {"name":"sh_active_canvas_ink","order":13,"path":"shaders/sh_active_canvas_ink/sh_active_canvas_ink.yy",}, + {"name":"sh_active_canvas_ink","order":23,"path":"shaders/sh_active_canvas_ink/sh_active_canvas_ink.yy",}, {"name":"sh_alpha_grey","order":1,"path":"shaders/sh_alpha_grey/sh_alpha_grey.yy",}, {"name":"sh_alpha_hash","order":2,"path":"shaders/sh_alpha_hash/sh_alpha_hash.yy",}, {"name":"sh_atlas_scan","order":53,"path":"shaders/sh_atlas_scan/sh_atlas_scan.yy",}, @@ -1502,7 +1502,7 @@ {"name":"sh_channel_R2R","order":14,"path":"shaders/sh_channel_R2R/sh_channel_R2R.yy",}, {"name":"sh_channel_S","order":5,"path":"shaders/sh_channel_S/sh_channel_S.yy",}, {"name":"sh_channel_V","order":6,"path":"shaders/sh_channel_V/sh_channel_V.yy",}, - {"name":"sh_checkerboard","order":3,"path":"shaders/sh_checkerboard/sh_checkerboard.yy",}, + {"name":"sh_checkerboard","order":13,"path":"shaders/sh_checkerboard/sh_checkerboard.yy",}, {"name":"sh_chromatic_aberration","order":32,"path":"shaders/sh_chromatic_aberration/sh_chromatic_aberration.yy",}, {"name":"sh_clean_shape","order":37,"path":"shaders/sh_clean_shape/sh_clean_shape.yy",}, {"name":"sh_color_adjust","order":4,"path":"shaders/sh_color_adjust/sh_color_adjust.yy",}, @@ -1521,8 +1521,8 @@ {"name":"sh_coord","order":30,"path":"shaders/sh_coord/sh_coord.yy",}, {"name":"sh_corner_erode","order":1,"path":"shaders/sh_corner_erode/sh_corner_erode.yy",}, {"name":"sh_corner_iterate","order":2,"path":"shaders/sh_corner_iterate/sh_corner_iterate.yy",}, - {"name":"sh_cross_histogram","order":26,"path":"shaders/sh_cross_histogram/sh_cross_histogram.yy",}, - {"name":"sh_cross_section","order":25,"path":"shaders/sh_cross_section/sh_cross_section.yy",}, + {"name":"sh_cross_histogram","order":27,"path":"shaders/sh_cross_histogram/sh_cross_histogram.yy",}, + {"name":"sh_cross_section","order":26,"path":"shaders/sh_cross_section/sh_cross_section.yy",}, {"name":"sh_curve_hsv","order":54,"path":"shaders/sh_curve_hsv/sh_curve_hsv.yy",}, {"name":"sh_curve","order":20,"path":"shaders/sh_curve/sh_curve.yy",}, {"name":"sh_d3d_3d_transform","order":16,"path":"shaders/sh_d3d_3d_transform/sh_d3d_3d_transform.yy",}, @@ -1599,10 +1599,10 @@ {"name":"sh_get_max_downsampled","order":8,"path":"shaders/sh_get_max_downsampled/sh_get_max_downsampled.yy",}, {"name":"sh_get_min_downsampled","order":9,"path":"shaders/sh_get_min_downsampled/sh_get_min_downsampled.yy",}, {"name":"sh_glow","order":35,"path":"shaders/sh_glow/sh_glow.yy",}, - {"name":"sh_gradient_display_alpha","order":12,"path":"shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.yy",}, - {"name":"sh_gradient_display","order":7,"path":"shaders/sh_gradient_display/sh_gradient_display.yy",}, - {"name":"sh_gradient_points","order":8,"path":"shaders/sh_gradient_points/sh_gradient_points.yy",}, - {"name":"sh_gradient","order":6,"path":"shaders/sh_gradient/sh_gradient.yy",}, + {"name":"sh_gradient_display_alpha","order":22,"path":"shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.yy",}, + {"name":"sh_gradient_display","order":17,"path":"shaders/sh_gradient_display/sh_gradient_display.yy",}, + {"name":"sh_gradient_points","order":18,"path":"shaders/sh_gradient_points/sh_gradient_points.yy",}, + {"name":"sh_gradient","order":16,"path":"shaders/sh_gradient/sh_gradient.yy",}, {"name":"sh_grain","order":24,"path":"shaders/sh_grain/sh_grain.yy",}, {"name":"sh_grey_alpha","order":12,"path":"shaders/sh_grey_alpha/sh_grey_alpha.yy",}, {"name":"sh_greyscale","order":13,"path":"shaders/sh_greyscale/sh_greyscale.yy",}, @@ -1616,6 +1616,7 @@ {"name":"sh_interlaced","order":58,"path":"shaders/sh_interlaced/sh_interlaced.yy",}, {"name":"sh_invert","order":17,"path":"shaders/sh_invert/sh_invert.yy",}, {"name":"sh_jpeg_recons","order":1,"path":"shaders/sh_jpeg_recons/sh_jpeg_recons.yy",}, + {"name":"sh_julia_set","order":32,"path":"shaders/sh_julia_set/sh_julia_set.yy",}, {"name":"sh_kuwahara_ani_pass1","order":1,"path":"shaders/sh_kuwahara_ani_pass1/sh_kuwahara_ani_pass1.yy",}, {"name":"sh_kuwahara_ani_pass2","order":2,"path":"shaders/sh_kuwahara_ani_pass2/sh_kuwahara_ani_pass2.yy",}, {"name":"sh_kuwahara_ani_pass3","order":3,"path":"shaders/sh_kuwahara_ani_pass3/sh_kuwahara_ani_pass3.yy",}, @@ -1683,7 +1684,7 @@ {"name":"sh_palette_mixer_atlas_expand_palette","order":3,"path":"shaders/sh_palette_mixer_atlas_expand_palette/sh_palette_mixer_atlas_expand_palette.yy",}, {"name":"sh_palette_replace","order":38,"path":"shaders/sh_palette_replace/sh_palette_replace.yy",}, {"name":"sh_palette_shift","order":19,"path":"shaders/sh_palette_shift/sh_palette_shift.yy",}, - {"name":"sh_path_fill_profile","order":15,"path":"shaders/sh_path_fill_profile/sh_path_fill_profile.yy",}, + {"name":"sh_path_fill_profile","order":25,"path":"shaders/sh_path_fill_profile/sh_path_fill_profile.yy",}, {"name":"sh_pb_blob","order":1,"path":"shaders/sh_pb_blob/sh_pb_blob.yy",}, {"name":"sh_pb_brick","order":9,"path":"shaders/sh_pb_brick/sh_pb_brick.yy",}, {"name":"sh_pb_draw_mask","order":8,"path":"shaders/sh_pb_draw_mask/sh_pb_draw_mask.yy",}, @@ -1698,16 +1699,16 @@ {"name":"sh_perlin_smear","order":14,"path":"shaders/sh_perlin_smear/sh_perlin_smear.yy",}, {"name":"sh_perlin_tiled","order":15,"path":"shaders/sh_perlin_tiled/sh_perlin_tiled.yy",}, {"name":"sh_perlin","order":12,"path":"shaders/sh_perlin/sh_perlin.yy",}, - {"name":"sh_pixel_cloud","order":4,"path":"shaders/sh_pixel_cloud/sh_pixel_cloud.yy",}, + {"name":"sh_pixel_cloud","order":14,"path":"shaders/sh_pixel_cloud/sh_pixel_cloud.yy",}, {"name":"sh_pixel_math","order":57,"path":"shaders/sh_pixel_math/sh_pixel_math.yy",}, - {"name":"sh_pixel_sample","order":27,"path":"shaders/sh_pixel_sample/sh_pixel_sample.yy",}, + {"name":"sh_pixel_sample","order":28,"path":"shaders/sh_pixel_sample/sh_pixel_sample.yy",}, {"name":"sh_pixel_sort","order":34,"path":"shaders/sh_pixel_sort/sh_pixel_sort.yy",}, {"name":"sh_polar","order":1,"path":"shaders/sh_polar/sh_polar.yy",}, {"name":"sh_posterize_palette","order":21,"path":"shaders/sh_posterize_palette/sh_posterize_palette.yy",}, {"name":"sh_posterize","order":25,"path":"shaders/sh_posterize/sh_posterize.yy",}, {"name":"sh_preview_histogram_outline","order":1,"path":"shaders/sh_preview_histogram_outline/sh_preview_histogram_outline.yy",}, {"name":"sh_pytagorean_tile","order":4,"path":"shaders/sh_pytagorean_tile/sh_pytagorean_tile.yy",}, - {"name":"sh_quarsicrystal","order":14,"path":"shaders/sh_quarsicrystal/sh_quarsicrystal.yy",}, + {"name":"sh_quarsicrystal","order":24,"path":"shaders/sh_quarsicrystal/sh_quarsicrystal.yy",}, {"name":"sh_random_tile","order":6,"path":"shaders/sh_random_tile/sh_random_tile.yy",}, {"name":"sh_rd_add","order":3,"path":"shaders/sh_rd_add/sh_rd_add.yy",}, {"name":"sh_rd_propagate","order":1,"path":"shaders/sh_rd_propagate/sh_rd_propagate.yy",}, @@ -1731,7 +1732,7 @@ {"name":"sh_rm_terrain","order":1,"path":"shaders/sh_rm_terrain/sh_rm_terrain.yy",}, {"name":"sh_rsh_erode","order":2,"path":"shaders/sh_rsh_erode/sh_rsh_erode.yy",}, {"name":"sh_rsh_rotate","order":1,"path":"shaders/sh_rsh_rotate/sh_rsh_rotate.yy",}, - {"name":"sh_sample_points","order":9,"path":"shaders/sh_sample_points/sh_sample_points.yy",}, + {"name":"sh_sample_points","order":19,"path":"shaders/sh_sample_points/sh_sample_points.yy",}, {"name":"sh_sao","order":4,"path":"shaders/sh_sao/sh_sao.yy",}, {"name":"sh_scale_cleanedge","order":55,"path":"shaders/sh_scale_cleanedge/sh_scale_cleanedge.yy",}, {"name":"sh_scale2x","order":28,"path":"shaders/sh_scale2x/sh_scale2x.yy",}, @@ -1745,15 +1746,16 @@ {"name":"sh_shadow_cast_light_sep","order":1,"path":"shaders/sh_shadow_cast_light_sep/sh_shadow_cast_light_sep.yy",}, {"name":"sh_shape_map_circle","order":14,"path":"shaders/sh_shape_map_circle/sh_shape_map_circle.yy",}, {"name":"sh_shape_map_polygon","order":15,"path":"shaders/sh_shape_map_polygon/sh_shape_map_polygon.yy",}, + {"name":"sh_shape","order":10,"path":"shaders/sh_shape/sh_shape.yy",}, {"name":"sh_simplex","order":16,"path":"shaders/sh_simplex/sh_simplex.yy",}, {"name":"sh_skew","order":6,"path":"shaders/sh_skew/sh_skew.yy",}, {"name":"sh_sky_hosek","order":2,"path":"shaders/sh_sky_hosek/sh_sky_hosek.yy",}, {"name":"sh_sky_scattering","order":1,"path":"shaders/sh_sky_scattering/sh_sky_scattering.yy",}, {"name":"sh_slice_spritesheet_empty_scan","order":6,"path":"shaders/sh_slice_spritesheet_empty_scan/sh_slice_spritesheet_empty_scan.yy",}, {"name":"sh_smear","order":13,"path":"shaders/sh_smear/sh_smear.yy",}, - {"name":"sh_solid","order":5,"path":"shaders/sh_solid/sh_solid.yy",}, + {"name":"sh_solid","order":15,"path":"shaders/sh_solid/sh_solid.yy",}, {"name":"sh_spherize","order":11,"path":"shaders/sh_spherize/sh_spherize.yy",}, - {"name":"sh_stripe","order":1,"path":"shaders/sh_stripe/sh_stripe.yy",}, + {"name":"sh_stripe","order":11,"path":"shaders/sh_stripe/sh_stripe.yy",}, {"name":"sh_surface_replace_fast_find","order":2,"path":"shaders/sh_surface_replace_fast_find/sh_surface_replace_fast_find.yy",}, {"name":"sh_surface_replace_fast_replace","order":3,"path":"shaders/sh_surface_replace_fast_replace/sh_surface_replace_fast_replace.yy",}, {"name":"sh_surface_replace_replace","order":1,"path":"shaders/sh_surface_replace_replace/sh_surface_replace_replace.yy",}, @@ -1783,10 +1785,10 @@ {"name":"sh_voronoi_extra","order":17,"path":"shaders/sh_voronoi_extra/sh_voronoi_extra.yy",}, {"name":"sh_warp_4points_pers","order":10,"path":"shaders/sh_warp_4points_pers/sh_warp_4points_pers.yy",}, {"name":"sh_warp_4points","order":9,"path":"shaders/sh_warp_4points/sh_warp_4points.yy",}, - {"name":"sh_water_caustic","order":11,"path":"shaders/sh_water_caustic/sh_water_caustic.yy",}, + {"name":"sh_water_caustic","order":21,"path":"shaders/sh_water_caustic/sh_water_caustic.yy",}, {"name":"sh_widget_rotator_range","order":5,"path":"shaders/sh_widget_rotator_range/sh_widget_rotator_range.yy",}, {"name":"sh_widget_rotator","order":4,"path":"shaders/sh_widget_rotator/sh_widget_rotator.yy",}, - {"name":"sh_zigzag","order":2,"path":"shaders/sh_zigzag/sh_zigzag.yy",}, + {"name":"sh_zigzag","order":12,"path":"shaders/sh_zigzag/sh_zigzag.yy",}, {"name":"credit_badge_popular","order":2,"path":"sprites/credit_badge_popular/credit_badge_popular.yy",}, {"name":"credit_badge_value","order":1,"path":"sprites/credit_badge_value/credit_badge_value.yy",}, {"name":"s_3d_preview_settings","order":1,"path":"sprites/s_3d_preview_settings/s_3d_preview_settings.yy",}, @@ -2327,6 +2329,7 @@ {"name":"s_node_JPEG","order":64,"path":"sprites/s_node_JPEG/s_node_JPEG.yy",}, {"name":"s_node_json_file_read","order":33,"path":"sprites/s_node_json_file_read/s_node_json_file_read.yy",}, {"name":"s_node_json_file_write","order":32,"path":"sprites/s_node_json_file_write/s_node_json_file_write.yy",}, + {"name":"s_node_julia","order":58,"path":"sprites/s_node_julia/s_node_julia.yy",}, {"name":"s_node_junction_add","order":18,"path":"sprites/s_node_junction_add/s_node_junction_add.yy",}, {"name":"s_node_junction_inspector","order":19,"path":"sprites/s_node_junction_inspector/s_node_junction_inspector.yy",}, {"name":"s_node_junction_name_bg","order":20,"path":"sprites/s_node_junction_name_bg/s_node_junction_name_bg.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 61e5dd497..00f5256b0 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -291,6 +291,7 @@ {"$GMFolder":"","%Name":"morph","folderPath":"folders/shader/filter/morph.yy","name":"morph","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"shadow_caster","folderPath":"folders/shader/filter/shadow_caster.yy","name":"shadow_caster","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"shape_seperator","folderPath":"folders/shader/filter/shape_seperator.yy","name":"shape_seperator","resourceType":"GMFolder","resourceVersion":"2.0",}, + {"$GMFolder":"","%Name":"shuffle","folderPath":"folders/shader/filter/shuffle.yy","name":"shuffle","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"surface_replace","folderPath":"folders/shader/filter/surface_replace.yy","name":"surface_replace","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"warp","folderPath":"folders/shader/filter/warp.yy","name":"warp","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"flood_fill","folderPath":"folders/shader/flood_fill.yy","name":"flood_fill","resourceType":"GMFolder","resourceVersion":"2.0",}, @@ -311,7 +312,6 @@ {"$GMFolder":"","%Name":"MK effects","folderPath":"folders/shader/MK effects.yy","name":"MK effects","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"Flag","folderPath":"folders/shader/MK effects/Flag.yy","name":"Flag","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"Fracture","folderPath":"folders/shader/MK effects/Fracture.yy","name":"Fracture","resourceType":"GMFolder","resourceVersion":"2.0",}, - {"$GMFolder":"","%Name":"shuffle","folderPath":"folders/shader/filter/shuffle.yy","name":"shuffle","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"Subpixel","folderPath":"folders/shader/MK effects/Subpixel.yy","name":"Subpixel","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"Tile","folderPath":"folders/shader/MK effects/Tile.yy","name":"Tile","resourceType":"GMFolder","resourceVersion":"2.0",}, {"$GMFolder":"","%Name":"noise","folderPath":"folders/shader/noise.yy","name":"noise","resourceType":"GMFolder","resourceVersion":"2.0",}, @@ -876,6 +876,7 @@ {"id":{"name":"__node_custom","path":"scripts/__node_custom/__node_custom.yy",},}, {"id":{"name":"__node_iterator_inline","path":"scripts/__node_iterator_inline/__node_iterator_inline.yy",},}, {"id":{"name":"__node_iterator","path":"scripts/__node_iterator/__node_iterator.yy",},}, + {"id":{"name":"__node_module_test","path":"scripts/__node_module_test/__node_module_test.yy",},}, {"id":{"name":"__node_module","path":"scripts/__node_module/__node_module.yy",},}, {"id":{"name":"__node_PCX","path":"scripts/__node_PCX/__node_PCX.yy",},}, {"id":{"name":"__node_process_template","path":"scripts/__node_process_template/__node_process_template.yy",},}, @@ -1449,6 +1450,7 @@ {"id":{"name":"node_jpeg","path":"scripts/node_jpeg/node_jpeg.yy",},}, {"id":{"name":"node_json_file_read","path":"scripts/node_json_file_read/node_json_file_read.yy",},}, {"id":{"name":"node_json_file_write","path":"scripts/node_json_file_write/node_json_file_write.yy",},}, + {"id":{"name":"node_julia_set","path":"scripts/node_julia_set/node_julia_set.yy",},}, {"id":{"name":"node_keyframe","path":"scripts/node_keyframe/node_keyframe.yy",},}, {"id":{"name":"node_kuwahara","path":"scripts/node_kuwahara/node_kuwahara.yy",},}, {"id":{"name":"node_lerp","path":"scripts/node_lerp/node_lerp.yy",},}, @@ -1485,7 +1487,6 @@ {"id":{"name":"node_mk_sparkle","path":"scripts/node_mk_sparkle/node_mk_sparkle.yy",},}, {"id":{"name":"node_mk_subpixel","path":"scripts/node_mk_subpixel/node_mk_subpixel.yy",},}, {"id":{"name":"node_mk_tile","path":"scripts/node_mk_tile/node_mk_tile.yy",},}, - {"id":{"name":"node_module_test","path":"scripts/node_module_test/node_module_test.yy",},}, {"id":{"name":"node_monitor_capture","path":"scripts/node_monitor_capture/node_monitor_capture.yy",},}, {"id":{"name":"node_morph_surface","path":"scripts/node_morph_surface/node_morph_surface.yy",},}, {"id":{"name":"node_move_point","path":"scripts/node_move_point/node_move_point.yy",},}, @@ -2239,6 +2240,7 @@ {"id":{"name":"sh_invert","path":"shaders/sh_invert/sh_invert.yy",},}, {"id":{"name":"sh_jpeg_dct","path":"shaders/sh_jpeg_dct/sh_jpeg_dct.yy",},}, {"id":{"name":"sh_jpeg_recons","path":"shaders/sh_jpeg_recons/sh_jpeg_recons.yy",},}, + {"id":{"name":"sh_julia_set","path":"shaders/sh_julia_set/sh_julia_set.yy",},}, {"id":{"name":"sh_kuwahara_ani_pass1","path":"shaders/sh_kuwahara_ani_pass1/sh_kuwahara_ani_pass1.yy",},}, {"id":{"name":"sh_kuwahara_ani_pass2","path":"shaders/sh_kuwahara_ani_pass2/sh_kuwahara_ani_pass2.yy",},}, {"id":{"name":"sh_kuwahara_ani_pass3","path":"shaders/sh_kuwahara_ani_pass3/sh_kuwahara_ani_pass3.yy",},}, @@ -3018,6 +3020,7 @@ {"id":{"name":"s_node_json_file_read","path":"sprites/s_node_json_file_read/s_node_json_file_read.yy",},}, {"id":{"name":"s_node_json_file_write","path":"sprites/s_node_json_file_write/s_node_json_file_write.yy",},}, {"id":{"name":"s_node_json_parse","path":"sprites/s_node_json_parse/s_node_json_parse.yy",},}, + {"id":{"name":"s_node_julia","path":"sprites/s_node_julia/s_node_julia.yy",},}, {"id":{"name":"s_node_junction_add","path":"sprites/s_node_junction_add/s_node_junction_add.yy",},}, {"id":{"name":"s_node_junction_inspector","path":"sprites/s_node_junction_inspector/s_node_junction_inspector.yy",},}, {"id":{"name":"s_node_junction_name_bg","path":"sprites/s_node_junction_name_bg/s_node_junction_name_bg.yy",},}, diff --git a/PixelComposer.yyp.css b/PixelComposer.yyp.css index c1cc6a022..945709b14 100644 --- a/PixelComposer.yyp.css +++ b/PixelComposer.yyp.css @@ -16,4 +16,5 @@ .treeview .dir[data-rel-path="folders/nodes/data/"] > .header:before { background: url("file:///D:/Project/MakhamDev/LTS-PixelComposer/RESOURCE/data/ide/dir_nodes.png") center/contain no-repeat; } .treeview .dir[data-rel-path="folders/nodes/__base__/"] > .header:before { background: url("file:///D:/Project/MakhamDev/LTS-PixelComposer/RESOURCE/data/ide/dir_empty.png") center/contain no-repeat; } .treeview .dir[data-rel-path="folders/__extensions/"] > .header:before { background: url("file:///D:/Project/MakhamDev/LTS-PixelComposer/RESOURCE/data/ide/dir_empty.png") center/contain no-repeat; } -.treeview .dir[data-rel-path="folders/game engines/gamemaker/"] > .header:before { background: url("file:///D:/Project/MakhamDev/LTS-PixelComposer/RESOURCE/data/default/graphics/_unused/s_gamemaker.png") center/contain no-repeat; } \ No newline at end of file +.treeview .dir[data-rel-path="folders/game engines/gamemaker/"] > .header:before { background: url("file:///D:/Project/MakhamDev/LTS-PixelComposer/RESOURCE/data/default/graphics/_unused/s_gamemaker.png") center/contain no-repeat; } +.treeview .dir[data-rel-path="datafiles/"] > .header:before { background: url("file:///C:/Users/Makham/AppData/Roaming/AceGM/GMEdit/themes/dracula/tree_empty.png") center/contain no-repeat; } \ No newline at end of file diff --git a/scripts/node_module_test/node_module_test.gml b/scripts/__node_module_test/__node_module_test.gml similarity index 100% rename from scripts/node_module_test/node_module_test.gml rename to scripts/__node_module_test/__node_module_test.gml diff --git a/scripts/node_module_test/node_module_test.yy b/scripts/__node_module_test/__node_module_test.yy similarity index 75% rename from scripts/node_module_test/node_module_test.yy rename to scripts/__node_module_test/__node_module_test.yy index bd5cc90c7..1317bd39b 100644 --- a/scripts/node_module_test/node_module_test.yy +++ b/scripts/__node_module_test/__node_module_test.yy @@ -1,9 +1,9 @@ { "$GMScript":"v1", - "%Name":"node_module_test", + "%Name":"__node_module_test", "isCompatibility":false, "isDnD":false, - "name":"node_module_test", + "name":"__node_module_test", "parent":{ "name":"data", "path":"folders/nodes/data.yy", diff --git a/scripts/node_module_test/node_outline.yy b/scripts/__node_module_test/node_outline.yy similarity index 100% rename from scripts/node_module_test/node_outline.yy rename to scripts/__node_module_test/node_outline.yy diff --git a/scripts/d3d_object/d3d_object.gml b/scripts/d3d_object/d3d_object.gml index b73b8f24d..1c064c3b5 100644 --- a/scripts/d3d_object/d3d_object.gml +++ b/scripts/d3d_object/d3d_object.gml @@ -220,7 +220,7 @@ function __3dObject() constructor { if(NVB != noone) { shader_set(sh_d3d_wireframe); shader_set_color("blend", c_white); - array_foreach(NVB, function(n) /*=>*/ {return vertex_submit(n, pr_linelist, -1)}); + array_foreach(NVB, function(n) /*=>*/ {vertex_submit(n, pr_linelist, -1)}); shader_reset(); } } diff --git a/scripts/file_functions/file_functions.gml b/scripts/file_functions/file_functions.gml index 34660ac6b..f2c98ebb1 100644 --- a/scripts/file_functions/file_functions.gml +++ b/scripts/file_functions/file_functions.gml @@ -1,4 +1,4 @@ -function file_exists_empty(path) { INLINE path = string(path); return path != "" && file_exists(path); } +function file_exists_empty(path) { return is_string(path) && path != "" && file_exists(path); } function file_copy_override(src, dest) { if(file_exists_empty(dest)) file_delete(dest); diff --git a/scripts/globals/globals.gml b/scripts/globals/globals.gml index f1c9fcaf1..52a87fbd7 100644 --- a/scripts/globals/globals.gml +++ b/scripts/globals/globals.gml @@ -44,7 +44,7 @@ LATEST_VERSION = 1_18_00_0; VERSION = 1_18_05_1; SAVE_VERSION = 1_18_05_0; - VERSION_STRING = MAC? "1.18.003m" : "1.18.6.006"; + VERSION_STRING = MAC? "1.18.003m" : "1.18.6.007"; BUILD_NUMBER = 1_18_05_6; var _vsp = string_split(VERSION_STRING, "."); diff --git a/scripts/node_export/node_export.gml b/scripts/node_export/node_export.gml index f3bfa437c..6d856a54f 100644 --- a/scripts/node_export/node_export.gml +++ b/scripts/node_export/node_export.gml @@ -209,26 +209,25 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor ffmpeg = filepath_resolve(PREFERENCES.ffmpeg_path) + "bin/ffmpeg.exe"; if(OS == os_windows) { - if(!file_exists_empty(converter) || !file_exists_empty(magick)) noti_warning($"No ImageMagick detected at {magick}, please make sure the installation is complete and ImageMagick path is set properly in preference."); - if(!file_exists_empty(webp)) noti_warning($"No webp detected at {webp}, please make sure the installation is complete and webp path is set properly in preference."); - if(!file_exists_empty(gifski)) noti_warning($"No gifski detected at {gifski}, please make sure the installation is complete and gifski path is set properly in preference."); - if(!file_exists_empty(ffmpeg)) noti_warning($"No FFmpeg detected at {ffmpeg}, please make sure the installation is complete and FFmpeg path is set properly in preference."); + var _w = function(str, pth) /*=>*/ {return $"No {str} detected at {pth}, please make sure the installation is complete and {str} path is set correctly in the preference."}; + + if(!file_exists_empty(converter)) noti_warning(_w("ImageMagick", magick)); + if(!file_exists_empty(magick)) noti_warning(_w("ImageMagick", magick)); + if(!file_exists_empty(webp)) noti_warning(_w("webp", webp)); + if(!file_exists_empty(gifski)) noti_warning(_w("gifski", gifski)); + if(!file_exists_empty(ffmpeg)) noti_warning(_w("FFmpeg", ffmpeg)); } else if(OS == os_macosx) { - var check_convert = ExecutedProcessReadFromStandardOutput(shell_execute("convert", "")); - if(string_pos(check_convert, "not found")) noti_warning($"No ImageMagick installed, please install imagemagick with homebrew or use the provided 'mac-libraries-installer.command'."); + var _w = function(str) /*=>*/ {return $"No {str} installed, please install {str} with homebrew or use the provided 'mac-libraries-installer.command'."}; - var check_webp = ExecutedProcessReadFromStandardOutput(shell_execute("webp", "")); - if(string_pos(check_webp, "not found")) noti_warning($"No webp installed, please install webp with homwbrew or use the provided 'mac-libraries-installer.command'."); + if(string_pos(shell_execute_output("convert", ""), "not found")) noti_warning(_w("ImageMagick")); + if(string_pos(shell_execute_output("webp", ""), "not found")) noti_warning(_w("webp")); + if(string_pos(shell_execute_output("ffmpeg", ""), "not found")) noti_warning(_w("FFmpeg")); - var check_ffmpeg = ExecutedProcessReadFromStandardOutput(shell_execute("ffmpeg", "")); - if(string_pos(check_ffmpeg, "not found")) noti_warning($"No FFmpeg installed, please install FFmpeg with homebrew or use the provided 'mac-libraries-installer.command'."); - - var _opt = "/opt/homebrew/bin/"; - converter = _opt + "convert"; - magick = _opt + "magick"; - webp = _opt + "webp"; - ffmpeg = _opt + "ffmpeg"; + converter = "/opt/homebrew/bin/convert"; + magick = "/opt/homebrew/bin/magick"; + webp = "/opt/homebrew/bin/webp"; + ffmpeg = "/opt/homebrew/bin/ffmpeg"; } static onValueUpdate = function(_index) { @@ -239,12 +238,8 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor switch(form) { case 0 : - case 1 : - inputs[1].display_data = _format_still; - break; - case 2 : - inputs[1].display_data = _format_anim; - break; + case 1 : inputs[1].display_data = _format_still; break; + case 2 : inputs[1].display_data = _format_anim; break; } } @@ -274,15 +269,17 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor inputs[3].setValue(0); inputs[9].setValue(0); break; + case ".jpg" : inputs[3].setValue(0); inputs[9].setValue(1); break; - + case ".gif" : inputs[3].setValue(2); inputs[9].setValue(0); break; + case ".webp" : inputs[3].setValue(2); inputs[9].setValue(1); diff --git a/scripts/node_julia_set/node_julia_set.gml b/scripts/node_julia_set/node_julia_set.gml new file mode 100644 index 000000000..438a018f8 --- /dev/null +++ b/scripts/node_julia_set/node_julia_set.gml @@ -0,0 +1,68 @@ +function Node_Julia_Set(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { + name = "Julia"; + + newInput(0, nodeValue_Dimension(self)); + + newInput(1, nodeValue_Vec2("C", self, [ -1, 0 ])) + .setUnitRef(function(i) /*=>*/ {return getDimension(i)}, VALUE_UNIT.reference); + + newInput(2, nodeValue_Vec2("Position", self, [ 0, 0 ])) + + newInput(3, nodeValue_Vec2("Scale", self, [ 1, 1 ])); + + newInput(4, nodeValue_Rotation("Rotation", self, 0)); + + newInput(5, nodeValue_Int("Max Iteration", self, 128)); + + newInput(6, nodeValue_Float("Diverge Threshold", self, 4)); + + newOutput(0, nodeValue_Output("Surface", self, VALUE_TYPE.surface, noone)); + + input_display_list = [ 0, + ["Julia", false], 1, 5, 6, + ["Transform", false], 2, 3, 4, + ]; + + static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { + var _pos = current_data[2]; + var _px = _x + _pos[0] * _s; + var _py = _y + _pos[1] * _s; + inputs[2].drawOverlay(hover, active, _x, _y, _s, _mx, _my, _snx, _sny); + inputs[4].drawOverlay(hover, active, _px, _py, _s, _mx, _my, _snx, _sny); + + var _dim = current_data[0]; + var _px = _x + _dim[0] / 2 * _s; + var _py = _y + _dim[1] / 2 * _s; + inputs[1].drawOverlay(hover, active, _px, _py, _s, _mx, _my, _snx, _sny); + } + + static step = function() { + + } + + static processData = function(_outSurf, _data, _output_index, _array_index = 0) { + var _dim = _data[0]; + var _c = _data[1]; + var _pos = _data[2]; + var _sca = _data[3]; + var _rot = _data[4]; + var _itr = _data[5]; + var _div = _data[6]; + + surface_set_shader(_outSurf, sh_julia_set); + shader_set_2("dimension", _dim); + shader_set_i("iteration", _itr); + shader_set_2("juliaC", _c); + shader_set_f("diverge", _div); + + shader_set_2("position", _pos); + shader_set_2("scale", _sca); + shader_set_f("rotation", degtorad(_rot)); + + draw_empty(); + surface_reset_shader(); + + return _outSurf; + + } +} \ No newline at end of file diff --git a/scripts/node_julia_set/node_julia_set.yy b/scripts/node_julia_set/node_julia_set.yy new file mode 100644 index 000000000..90b17f118 --- /dev/null +++ b/scripts/node_julia_set/node_julia_set.yy @@ -0,0 +1,13 @@ +{ + "$GMScript":"v1", + "%Name":"node_julia_set", + "isCompatibility":false, + "isDnD":false, + "name":"node_julia_set", + "parent":{ + "name":"generator", + "path":"folders/nodes/data/generator.yy", + }, + "resourceType":"GMScript", + "resourceVersion":"2.0", +} \ No newline at end of file diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index d503321ca..2b5aeb61f 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -817,6 +817,7 @@ function __initNodes() { addNodeObject(generator, "Box Pattern", s_node_box_pattern, "Node_Box_Pattern", [1, Node_Box_Pattern],, "Generate square-based patterns..").setVersion(11750); addNodeObject(generator, "Quasicrystal", s_node_quasicircle, "Node_Quasicrystal", [1, Node_Quasicrystal],, "Generate Quasicrystal pattern.").setVersion(11660); addNodeObject(generator, "Pixel Sampler", s_node_pixel_sampler, "Node_Pixel_Sampler", [1, Node_Pixel_Sampler],, "Map image on to each individual pixels of another image.").setVersion(11730); + addNodeObject(generator, "Julia", s_node_julia, "Node_Julia_Set", [1, Node_Julia_Set],, "Generate Julia fractal.").setVersion(1_18_05_6); ds_list_add(generator, "Populate"); addNodeObject(generator, "Repeat", s_node_repeat, "Node_Repeat", [0, Node_create_Repeat], global.node_repeat_keys, "Repeat image multiple times linearly, or in grid pattern.").setVersion(1100); diff --git a/scripts/shell_functions/shell_functions.gml b/scripts/shell_functions/shell_functions.gml index 97a40b997..34e3e534b 100644 --- a/scripts/shell_functions/shell_functions.gml +++ b/scripts/shell_functions/shell_functions.gml @@ -12,12 +12,14 @@ function shellOpenExplorer(path) { return 0; } +function shell_execute_output(path, command, ref = noone, _log = true) { return ExecutedProcessReadFromStandardOutput(shell_execute(path, command)); } + function shell_execute(path, command, ref = noone, _log = true) { INLINE // if(OS == os_macosx) { - path = string_replace_all(path, "\\", "/"); - command = string_replace_all(command, "\\", "/"); + path = string_replace_all(path, "\\", "/"); + command = string_replace_all(command, "\\", "/"); // } var cmd = $"{path} {command}"; diff --git a/shaders/sh_julia_set/sh_julia_set.fsh b/shaders/sh_julia_set/sh_julia_set.fsh new file mode 100644 index 000000000..d0e48ea84 --- /dev/null +++ b/shaders/sh_julia_set/sh_julia_set.fsh @@ -0,0 +1,35 @@ +const int MAX_ITERATIONS = 128; + +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec2 dimension; +uniform int iteration; +uniform vec2 juliaC; +uniform float diverge; + +uniform vec2 position; +uniform float rotation; +uniform vec2 scale; + +vec2 sqrC(in vec2 c) { return vec2(c.x * c.x - c.y * c.y, 2. * c.y * c.x); } + +int julia(in vec2 z) { + vec2 _c = juliaC / dimension; + + for(int n = 0; n < iteration; n++) { + if(dot(z,z) > diverge) return n; + z = sqrC(z) + _c; + } + + return iteration; +} + +void main() { + vec2 px = (v_vTexcoord - position / dimension - .5) * 4. / scale; + px *= mat2(cos(rotation), -sin(rotation), sin(rotation), cos(rotation)); + + float j = float(julia(px)) / float(iteration); + + gl_FragColor = vec4(vec3(j), 1.); +} \ No newline at end of file diff --git a/shaders/sh_julia_set/sh_julia_set.vsh b/shaders/sh_julia_set/sh_julia_set.vsh new file mode 100644 index 000000000..3900c20f4 --- /dev/null +++ b/shaders/sh_julia_set/sh_julia_set.vsh @@ -0,0 +1,19 @@ +// +// Simple passthrough vertex shader +// +attribute vec3 in_Position; // (x,y,z) +//attribute vec3 in_Normal; // (x,y,z) unused in this shader. +attribute vec4 in_Colour; // (r,g,b,a) +attribute vec2 in_TextureCoord; // (u,v) + +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +void main() +{ + vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); + gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; + + v_vColour = in_Colour; + v_vTexcoord = in_TextureCoord; +} diff --git a/shaders/sh_julia_set/sh_julia_set.yy b/shaders/sh_julia_set/sh_julia_set.yy new file mode 100644 index 000000000..4b04ab2f7 --- /dev/null +++ b/shaders/sh_julia_set/sh_julia_set.yy @@ -0,0 +1,12 @@ +{ + "$GMShader":"", + "%Name":"sh_julia_set", + "name":"sh_julia_set", + "parent":{ + "name":"generator", + "path":"folders/shader/generator.yy", + }, + "resourceType":"GMShader", + "resourceVersion":"2.0", + "type":1, +} \ No newline at end of file diff --git a/sprites/s_node_julia/967a260d-7864-4afa-a218-b2c6bb9c86b6.png b/sprites/s_node_julia/967a260d-7864-4afa-a218-b2c6bb9c86b6.png new file mode 100644 index 0000000000000000000000000000000000000000..dc37d60108ea7d545db68bcfaefcf771adfe2b9c GIT binary patch literal 2670 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":"", + "Keyframes":[], + "resourceType":"KeyframeStore", + "resourceVersion":"2.0", + }, + "eventStubScript":null, + "eventToFunction":{}, + "length":1.0, + "lockOrigin":false, + "moments":{ + "$KeyframeStore":"", + "Keyframes":[], + "resourceType":"KeyframeStore", + "resourceVersion":"2.0", + }, + "name":"s_node_julia", + "playback":1, + "playbackSpeed":30.0, + "playbackSpeedType":0, + "resourceType":"GMSequence", + "resourceVersion":"2.0", + "showBackdrop":true, + "showBackdropImage":false, + "timeUnits":1, + "tracks":[ + {"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore":"","Keyframes":[ + {"$Keyframe":"","Channels":{ + "0":{"$SpriteFrameKeyframe":"","Id":{"name":"967a260d-7864-4afa-a218-b2c6bb9c86b6","path":"sprites/s_node_julia/s_node_julia.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",}, + },"Disabled":false,"id":"767156e8-7a01-4f07-aafa-a8a55e2f5a28","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe","resourceVersion":"2.0","Stretch":false,}, + ],"resourceType":"KeyframeStore","resourceVersion":"2.0",},"modifiers":[],"name":"frames","resourceType":"GMSpriteFramesTrack","resourceVersion":"2.0","spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange":null, + "volume":1.0, + "xorigin":32, + "yorigin":32, + }, + "swatchColours":null, + "swfPrecision":0.5, + "textureGroupId":{ + "name":"Default", + "path":"texturegroups/Default", + }, + "type":0, + "VTile":false, + "width":64, +} \ No newline at end of file