From 20a75e42c985b98b1dad89842add8beb1a1c1718 Mon Sep 17 00:00:00 2001 From: Tanasart Date: Mon, 8 Jan 2024 14:10:50 +0700 Subject: [PATCH] add alpha channel to nodes --- PixelComposer.resource_order | 3 +- PixelComposer.yyp | 3 +- fonts/_f_sdf/_f_sdf.old.png | Bin 82361 -> 82361 bytes fonts/_f_sdf/_f_sdf.png | Bin 82361 -> 82361 bytes fonts/_f_sdf_medium/_f_sdf_medium.old.png | Bin 59906 -> 59906 bytes fonts/_f_sdf_medium/_f_sdf_medium.png | Bin 59906 -> 59906 bytes objects/o_dialog_color_selector/Create_0.gml | 2 +- objects/o_dialog_gradient/Create_0.gml | 22 ++- objects/o_dialog_gradient/Draw_64.gml | 3 +- objects/o_dialog_palette/Create_0.gml | 2 +- scripts/buttonColor/buttonColor.gml | 23 ++- scripts/colToVec4/colToVec4.gml | 3 +- scripts/color_function/color_function.gml | 66 +++++++-- scripts/color_selector/color_selector.gml | 139 +++++++++++------- scripts/coltovec4/colToVec4.gml | 3 +- scripts/draw_set_text/draw_set_text.gml | 6 - scripts/draw_setter/draw_setter.gml | 35 +++++ .../draw_setter.yy} | 2 +- .../gradients_function/gradients_function.gml | 78 ++++++---- scripts/node_2d_light/node_2d_light.gml | 2 +- .../node_active_canvas/node_active_canvas.gml | 4 +- scripts/node_canvas/node_canvas.gml | 12 +- .../node_color_adjustment.gml | 2 +- scripts/node_color_mix/node_color_mix.gml | 22 +-- .../node_color_palette_replacement.gml | 16 +- .../node_display_text/node_display_text.gml | 4 +- scripts/node_flood_fill/node_flood_fill.gml | 30 ++-- scripts/node_frame/node_frame.gml | 13 +- scripts/node_glow/node_glow.gml | 6 +- scripts/node_gradient/node_gradient.gml | 2 +- .../node_gradient_output.gml | 2 +- .../node_grey_to_alpha/node_grey_to_alpha.gml | 24 +-- scripts/node_keyframe/node_keyframe.gml | 1 + .../node_normal_light/node_normal_light.gml | 32 ++-- scripts/node_padding/node_padding.gml | 2 +- scripts/node_plot_linear/node_plot_linear.gml | 3 +- .../node_polygonal_shape.gml | 8 +- scripts/node_posterize/node_posterize.gml | 10 +- scripts/node_repeat/node_repeat.gml | 29 ++-- .../node_seperate_shapes.gml | 2 +- scripts/node_shadow/node_shadow.gml | 24 +-- .../node_simple_shape/node_simple_shape.gml | 5 +- scripts/node_solid/node_solid.gml | 4 +- .../node_sprite_stack/node_sprite_stack.gml | 10 +- scripts/node_stripe/node_stripe.gml | 4 +- .../node_surface_from_color.gml | 5 +- scripts/node_text/node_text.gml | 7 +- scripts/node_value/node_value.gml | 1 + scripts/panel_inspector/panel_inspector.gml | 10 +- scripts/random_function/random_function.gml | 4 + scripts/slider/slider.gml | 6 +- .../string_hexadecimal/string_hexadecimal.gml | 5 +- shaders/sh_blur_gaussian/sh_blur_gaussian.fsh | 4 +- shaders/sh_blur_simple/sh_blur_simple.fsh | 4 +- shaders/sh_checkerboard/sh_checkerboard.fsh | 4 +- .../sh_colours_replace/sh_colours_replace.fsh | 2 +- .../sh_gradient_display.fsh | 13 +- .../sh_gradient_display_alpha.fsh | 84 +++++++++++ .../sh_gradient_display_alpha.vsh | 19 +++ .../sh_gradient_display_alpha.yy | 10 ++ shaders/sh_grey_alpha/sh_grey_alpha.fsh | 5 +- shaders/sh_grid/sh_grid.fsh | 7 +- shaders/sh_grid_hex/sh_grid_hex.fsh | 2 +- shaders/sh_grid_tri/sh_grid_tri.fsh | 2 +- shaders/sh_normal_light/sh_normal_light.fsh | 4 +- shaders/sh_outline/sh_outline.fsh | 16 +- .../sh_palette_replace/sh_palette_replace.fsh | 24 ++- shaders/sh_solid/sh_solid.fsh | 2 +- shaders/sh_stripe/sh_stripe.fsh | 4 +- shaders/sh_zigzag/sh_zigzag.fsh | 12 +- 70 files changed, 581 insertions(+), 338 deletions(-) delete mode 100644 scripts/draw_set_text/draw_set_text.gml create mode 100644 scripts/draw_setter/draw_setter.gml rename scripts/{draw_set_text/draw_set_text.yy => draw_setter/draw_setter.yy} (87%) create mode 100644 shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.fsh create mode 100644 shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.vsh create mode 100644 shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.yy diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index faba4f972..919b9da38 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -526,6 +526,7 @@ {"name":"node_3d_transform","order":6,"path":"scripts/node_3d_transform/node_3d_transform.yy",}, {"name":"node_iterator_each_size","order":3,"path":"scripts/node_iterator_each_size/node_iterator_each_size.yy",}, {"name":"panel_console","order":8,"path":"scripts/panel_console/panel_console.yy",}, + {"name":"sh_gradient_display_alpha","order":37,"path":"shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.yy",}, {"name":"s_node_HSV_combine","order":44,"path":"sprites/s_node_HSV_combine/s_node_HSV_combine.yy",}, {"name":"Obj_FirebaseFirestore_Collection_Query_GreaterEqual","order":5,"path":"objects/Obj_FirebaseFirestore_Collection_Query_GreaterEqual/Obj_FirebaseFirestore_Collection_Query_GreaterEqual.yy",}, {"name":"s_node_pb_box_contract","order":25,"path":"sprites/s_node_pb_box_contract/s_node_pb_box_contract.yy",}, @@ -751,7 +752,7 @@ {"name":"node_registry","order":11,"path":"scripts/node_registry/node_registry.yy",}, {"name":"sh_checkerboard","order":12,"path":"shaders/sh_checkerboard/sh_checkerboard.yy",}, {"name":"node_unicode","order":1,"path":"scripts/node_unicode/node_unicode.yy",}, - {"name":"draw_set_text","order":1,"path":"scripts/draw_set_text/draw_set_text.yy",}, + {"name":"draw_setter","order":1,"path":"scripts/draw_setter/draw_setter.yy",}, {"name":"node_pb_draw","order":1,"path":"scripts/node_pb_draw/node_pb_draw.yy",}, {"name":"node_iterator_filter_inline_output","order":2,"path":"scripts/node_iterator_filter_inline_output/node_iterator_filter_inline_output.yy",}, {"name":"s_node_warp","order":9,"path":"sprites/s_node_warp/s_node_warp.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index fc3ac2471..9dd5f0350 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -751,6 +751,7 @@ {"id":{"name":"sh_trans_node_prev_drop","path":"shaders/sh_trans_node_prev_drop/sh_trans_node_prev_drop.yy",},}, {"id":{"name":"fd_draw_self_to_collision_mask_surface","path":"scripts/fd_draw_self_to_collision_mask_surface/fd_draw_self_to_collision_mask_surface.yy",},}, {"id":{"name":"panel_console","path":"scripts/panel_console/panel_console.yy",},}, + {"id":{"name":"sh_gradient_display_alpha","path":"shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.yy",},}, {"id":{"name":"spr_gameframe_border","path":"sprites/spr_gameframe_border/spr_gameframe_border.yy",},}, {"id":{"name":"s_node_HSV_combine","path":"sprites/s_node_HSV_combine/s_node_HSV_combine.yy",},}, {"id":{"name":"Obj_FirebaseFirestore_Collection_Query_GreaterEqual","path":"objects/Obj_FirebaseFirestore_Collection_Query_GreaterEqual/Obj_FirebaseFirestore_Collection_Query_GreaterEqual.yy",},}, @@ -1012,7 +1013,7 @@ {"id":{"name":"node_registry","path":"scripts/node_registry/node_registry.yy",},}, {"id":{"name":"sh_checkerboard","path":"shaders/sh_checkerboard/sh_checkerboard.yy",},}, {"id":{"name":"node_unicode","path":"scripts/node_unicode/node_unicode.yy",},}, - {"id":{"name":"draw_set_text","path":"scripts/draw_set_text/draw_set_text.yy",},}, + {"id":{"name":"draw_setter","path":"scripts/draw_setter/draw_setter.yy",},}, {"id":{"name":"node_pb_draw","path":"scripts/node_pb_draw/node_pb_draw.yy",},}, {"id":{"name":"node_iterator_filter_inline_output","path":"scripts/node_iterator_filter_inline_output/node_iterator_filter_inline_output.yy",},}, {"id":{"name":"s_node_array","path":"sprites/s_node_array/s_node_array.yy",},}, diff --git a/fonts/_f_sdf/_f_sdf.old.png b/fonts/_f_sdf/_f_sdf.old.png index b1defb0635fb27252f0b739c3cdd9f17e373f18b..4ac7273162944b41653a307f5290720e00d7575f 100644 GIT binary patch delta 96 zcmdnl%(}CgwP6dRiKB=`h=H+{sgad|k+y+>m4U%(>({l@JscTjF=TF~1s|MV>By*{ WfUc*vxJZrx2s~Z=T-G@yGywo8JQ_Rz delta 96 zcmdnl%(}CgwP6dRiKB>Fh=HM%fti(wp|*j6m4SiU?+u5hdpI)6V#tIqBy*{ WfUbvOv*tnuAnBy*{ WfUZaO|C8AaK;Y@>=d#Wzp$Py!RvT&n delta 96 zcmdnl%(}CgwP6dRiKB>lh=GBXsfm?|kv5QFU?Au}&t$rXBcm*aOoEVF$Mi}^Mg;|Q UJ?8A};S50F>FVdQ&MBb@0G~M){r~^~ diff --git a/fonts/_f_sdf_medium/_f_sdf_medium.old.png b/fonts/_f_sdf_medium/_f_sdf_medium.old.png index 87782c2e63b442d212ddbb25192e85942f91592c..b3bc6187400b9ec32e4786a696f2f61bea2bc44d 100644 GIT binary patch delta 119 zcmZp=!rXL)c|+|>5sMH5V=Gf5D+42K0|P4qgVolrYbQ^9DI0<=aVstOAOiz~Mu}@g uNlIc#s#Qs5ZfbE!Vr~J0k%5tku7RPh0lJ>v;vzYq9tKZWKbLh*2~7a?Un711 delta 119 zcmZp=!rXL)c|+|>5wj2jLn{L_D-$Da0|P4q199P1@slUMlnp_bNb?hV%)r2)QQ{g= ul9E`GYE_b%n_66wm|MVLWME{XYhb8rfUd_d+SmrDhr!d;&t;ucLK6U393db8 diff --git a/fonts/_f_sdf_medium/_f_sdf_medium.png b/fonts/_f_sdf_medium/_f_sdf_medium.png index 0a09e6d0ddacebf7d4b56aa4dbf3b75202807fe8..809e08a8eb382d575cd18a720f13e32364a06b39 100644 GIT binary patch delta 119 zcmZp=!rXL)c|+|>5sMH56Dt!_D?>|d0|P4q1MBUzKPFFnDI0<=;q~gM3j+g#Mu}@g vNlIc#s#Qs5ZfbE!Vr~J0k%5tku7RPh0lFU9|4(KE^)Pt4`njxgN@xNA4b&v8 delta 119 zcmZp=!rXL)c|+|>5%UlO11nP#D-$DaAj7~w(0`uEgw#417#K84Tq8hXeI6c)I$ztaD0e0st}1AV2^B diff --git a/objects/o_dialog_color_selector/Create_0.gml b/objects/o_dialog_color_selector/Create_0.gml index 65090d74a..0ba4c952e 100644 --- a/objects/o_dialog_color_selector/Create_0.gml +++ b/objects/o_dialog_color_selector/Create_0.gml @@ -11,7 +11,7 @@ event_inherited(); name = __txtx("color_selector_title", "Color selector"); previous_color = c_black; - selector = new colorSelector(); + selector = new colorSelector(); drop_target = noone; function setDefault(color) { diff --git a/objects/o_dialog_gradient/Create_0.gml b/objects/o_dialog_gradient/Create_0.gml index 85ed3595c..1918b19bf 100644 --- a/objects/o_dialog_gradient/Create_0.gml +++ b/objects/o_dialog_gradient/Create_0.gml @@ -33,8 +33,10 @@ event_inherited(); function setGradient(grad) { gradient = grad; - if(array_length(grad.keys)) - key_selecting = grad.keys[0]; + if(array_empty(grad.keys)) return; + + key_selecting = grad.keys[0]; + selector.setColor(key_selecting.value, false); } selector = new colorSelector(setColor); @@ -108,8 +110,14 @@ event_inherited(); if(_hover && isHover) { if(mouse_press(mb_left, interactable && sFOCUS)) { gradient.keys = []; - for( var i = 0, n = array_length(_gradient.gradient.keys); i < n; i++ ) - gradient.keys[i] = _gradient.gradient.keys[i].clone(); + for( var i = 0, n = array_length(_gradient.gradient.keys); i < n; i++ ) { + var k = _gradient.gradient.keys[i].clone(); + gradient.keys[i] = k; + + if(is_real(k.value)) k.value = cola(k.value); + } + + onApply(gradient); } if(mouse_press(mb_right, interactable && sFOCUS)) { @@ -195,7 +203,11 @@ event_inherited(); var _index = m_gy * col + m_gx; if(_index < pre_amo && _index >= 0) { - selector.setColor(pal.palette[_index]); + var c = pal.palette[_index]; + + if(is_real(c)) c = cola(c); + + selector.setColor(c); selector.setHSV(); } } else if(isHover) { diff --git a/objects/o_dialog_gradient/Draw_64.gml b/objects/o_dialog_gradient/Draw_64.gml index 466018cd3..002a0d415 100644 --- a/objects/o_dialog_gradient/Draw_64.gml +++ b/objects/o_dialog_gradient/Draw_64.gml @@ -178,9 +178,10 @@ if !ready exit; var tt = clamp((mouse_mx - gr_x) / gr_w, 0, 1); var cc = gradient.eval(tt); + var _newkey = new gradientKey(tt, cc); gradient.add(_newkey, true); - + key_selecting = _newkey; key_dragging = _newkey; key_drag_sx = tt; diff --git a/objects/o_dialog_palette/Create_0.gml b/objects/o_dialog_palette/Create_0.gml index 94a17ff23..5ad96c280 100644 --- a/objects/o_dialog_palette/Create_0.gml +++ b/objects/o_dialog_palette/Create_0.gml @@ -86,7 +86,7 @@ event_inherited(); palette[j] = pal.palette[j]; } - if(mouse_press(mb_right, interactable && sFOCUS)) { + if(i >= 0 && mouse_press(mb_right, interactable && sFOCUS)) { hovering_name = pal.path; menuCall("palette_window_preset_menu",,, [ menuItem(__txtx("palette_editor_delete", "Delete palette"), function() { diff --git a/scripts/buttonColor/buttonColor.gml b/scripts/buttonColor/buttonColor.gml index ef637999a..520c04e73 100644 --- a/scripts/buttonColor/buttonColor.gml +++ b/scripts/buttonColor/buttonColor.gml @@ -115,10 +115,27 @@ function buttonColor(_onApply, dialog = noone) : widget() constructor { if(mouse_press(mb_left)) deactivate(); } + var _bx = _x + ui(4); + var _by = _y + ui(4); + var _bw = _cw - ui(8); + var _bh = _h - ui(8); + if(is_array(current_color)) - drawPalette(current_color, _x + ui(4), _y + ui(4), _cw - ui(8), _h - ui(8)); - else if(is_real(current_color)) - draw_sprite_stretched_ext(THEME.palette_mask, 1, _x + ui(4), _y + ui(4), _cw - ui(8), _h - ui(8), current_color, 1); + drawPalette(current_color, _bx, _by, _bw, _bh); + else if(is_real(current_color)) + draw_sprite_stretched_ext(THEME.palette_mask, 1, _bx, _by, _bw, _bh, current_color, 1); + else if(is_int64(current_color)) { + var _a = _color_get_alpha(current_color); + + if(_a == 1) { + draw_sprite_stretched_ext(THEME.palette_mask, 1, _bx, _by, _bw, _bh, current_color, 1); + } else { + draw_sprite_stretched_ext(THEME.palette_mask, 1, _bx, _by, _bw, _bh - ui(8), current_color, 1); + + draw_sprite_stretched_ext(THEME.palette_mask, 1, _bx, _by + _bh - ui(6), _bw, ui(6), c_black, 1); + draw_sprite_stretched_ext(THEME.palette_mask, 1, _bx, _by + _bh - ui(6), _bw * _a, ui(6), c_white, 1); + } + } if(WIDGET_CURRENT == self) draw_sprite_stretched_ext(THEME.widget_selecting, 0, _x - ui(3), _y - ui(3), _w + ui(6), _h + ui(6), COLORS._main_accent, 1); diff --git a/scripts/colToVec4/colToVec4.gml b/scripts/colToVec4/colToVec4.gml index 7a6a1c0ac..e0d89d07a 100644 --- a/scripts/colToVec4/colToVec4.gml +++ b/scripts/colToVec4/colToVec4.gml @@ -1,5 +1,6 @@ function colToVec4(color, alpha = 1) { - return [ color_get_red(color) / 255, color_get_green(color) / 255, color_get_blue(color) / 255, alpha ]; + var a = is_int64(color)? _color_get_alpha(color) : alpha; + return [ _color_get_red(color), _color_get_green(color), _color_get_blue(color), a ]; } function colaToVec4(color) { diff --git a/scripts/color_function/color_function.gml b/scripts/color_function/color_function.gml index 52ed5f8ab..fc8c08843 100644 --- a/scripts/color_function/color_function.gml +++ b/scripts/color_function/color_function.gml @@ -1,3 +1,7 @@ +function cola(color, alpha = 1) { INLINE return int64((color & 0xFFFFFF) + (round(alpha * 255) << 24)); } +function _cola(color, alpha) { INLINE return int64((color & 0xFFFFFF) + (alpha << 24)); } +function colda(color) { INLINE return real(color & 0xFFFFFF); } + function colorFromRGBArray(arr) { #region var r = round(real(arr[0]) * 255); var g = round(real(arr[1]) * 255); @@ -5,14 +9,15 @@ function colorFromRGBArray(arr) { #region return make_color_rgb(r, g, b); } #endregion -function color_get_alpha(color) { #region - INLINE - return (color & (0xFF << 24)) >> 24; -} #endregion +function color_get_alpha(color) { INLINE return (color & (0xFF << 24)) >> 24; } +function _color_get_alpha(color) { INLINE return is_real(color)? 1 : color_get_alpha(color) / 255; } +function _color_get_red(color) { INLINE return color_get_red(color) / 255; } +function _color_get_green(color) { INLINE return color_get_green(color) / 255; } +function _color_get_blue(color) { INLINE return color_get_blue(color) / 255; } function colorArrayFromReal(clr) { #region INLINE - return [color_get_red(clr) / 255, color_get_green(clr) / 255, color_get_blue(clr) / 255 ]; + return [ _color_get_red(clr), _color_get_green(clr), _color_get_blue(clr) ]; } #endregion function colorBrightness(clr, normalize = true) { #region @@ -28,15 +33,18 @@ function colorMultiply(c1, c2) { #region if(c1 == c_white) return c2; if(c2 == c_white) return c1; - var r1 = color_get_red(c1); - var g1 = color_get_green(c1); - var b1 = color_get_blue(c1); + var r1 = _color_get_red(c1); + var g1 = _color_get_green(c1); + var b1 = _color_get_blue(c1); + var a1 = _color_get_alpha(c1); - var r2 = color_get_red(c2); - var g2 = color_get_green(c2); - var b2 = color_get_blue(c2); + var r2 = _color_get_red(c2); + var g2 = _color_get_green(c2); + var b2 = _color_get_blue(c2); + var a2 = _color_get_alpha(c2); - return make_color_rgb((r1 * r2) / 255, (g1 * g2) / 255, (b1 * b2) / 255); + if(is_real(c1)) return make_color_rgb((r1 * r2) * 255, (g1 * g2) * 255, (b1 * b2) * 255); + return make_color_rgba((r1 * r2) * 255, (g1 * g2) * 255, (b1 * b2) * 255, (a1 * a2) * 255); } #endregion function colorAdd(c1, c2) { #region @@ -89,6 +97,40 @@ function color_rgb(col) { #region return [ color_get_red(col) / 255, color_get_green(col) / 255, color_get_blue(col) / 255 ]; } #endregion +function make_color_rgba(r, g, b, a) { INLINE return int64(round(r) + (round(g) << 8) + (round(b) << 16) + (round(a) << 24)); } +function make_color_hsva(h, s, v, a) { INLINE return _cola(make_color_hsv(h, s, v), a); } + +#macro merge_color merge_color_ext +#macro __merge_color merge_color + +function merge_color_ext(c0, c1, t) { #region + INLINE + if(is_real(c0)) return __merge_color(c0, c1, t); + + return make_color_rgba( + clamp(round(lerp(color_get_red(c0), color_get_red(c1), t)), 0, 255), + clamp(round(lerp(color_get_green(c0), color_get_green(c1), t)), 0, 255), + clamp(round(lerp(color_get_blue(c0), color_get_blue(c1), t)), 0, 255), + clamp(round(lerp(color_get_alpha(c0), color_get_alpha(c1), t)), 0, 255), + ); +} #endregion + +function merge_color_hsv(c0, c1, t) { #region + INLINE + if(is_real(c0)) return make_color_hsv( + clamp(round(lerp(color_get_hue(c0), color_get_hue(c1), t)), 0, 255), + clamp(round(lerp(color_get_saturation(c0), color_get_saturation(c1), t)), 0, 255), + clamp(round(lerp(color_get_value(c0), color_get_value(c1), t)), 0, 255), + ); + + return make_color_hsva( + clamp(round(lerp(color_get_hue(c0), color_get_hue(c1), t)), 0, 255), + clamp(round(lerp(color_get_saturation(c0), color_get_saturation(c1), t)), 0, 255), + clamp(round(lerp(color_get_value(c0), color_get_value(c1), t)), 0, 255), + clamp(round(lerp(color_get_alpha(c0), color_get_alpha(c1), t)), 0, 255), + ); +} #endregion + #region sorting functions function __valHSV(c, h, s, v) { return color_get_hue(c) * h + color_get_saturation(c) * s + color_get_value(c) * v; } function __valRGB(c, r, g, b) { return color_get_red(c) * r + color_get_green(c) * g + color_get_blue(c) * b; } diff --git a/scripts/color_selector/color_selector.gml b/scripts/color_selector/color_selector.gml index ee42ff2a6..86ad02428 100644 --- a/scripts/color_selector/color_selector.gml +++ b/scripts/color_selector/color_selector.gml @@ -3,9 +3,9 @@ function colorSelector(onApply = noone) constructor { current_color = c_white; - hue = 1; - sat = 0; - val = 0; + hue = 1; + sat = 0; + val = 0; area_dragging = false; side_dragging = false; @@ -26,53 +26,76 @@ function colorSelector(onApply = noone) constructor { if(!interactable) return; hue = clamp(_val, 0, 255); setHSV(); - }) + }); + tb_sat = new slider(0, 255, 1, function(_val) { if(!interactable) return; sat = clamp(_val, 0, 255); setHSV(); - }) + }); + tb_val= new slider(0, 255, 1, function(_val) { if(!interactable) return; val = clamp(_val, 0, 255); setHSV(); - }) - - tb_hue.hdw = ui(16); - tb_sat.hdw = ui(16); - tb_val.hdw = ui(16); + }); tb_red = new slider(0, 255, 1, function(_val) { if(!interactable) return; var r = clamp(_val, 0, 255); var g = color_get_green(current_color); var b = color_get_blue(current_color); + var a = color_get_alpha(current_color); - current_color = make_color_rgb(r, g, b); + current_color = make_color_rgba(r, g, b, a); resetHSV(); - }) + }); + tb_green = new slider(0, 255, 1, function(_val) { if(!interactable) return; var r = color_get_red(current_color); var g = clamp(_val, 0, 255); var b = color_get_blue(current_color); + var a = color_get_alpha(current_color); - current_color = make_color_rgb(r, g, b); + current_color = make_color_rgba(r, g, b, a); resetHSV(); - }) + }); + tb_blue = new slider(0, 255, 1, function(_val) { if(!interactable) return; var r = color_get_red(current_color); var g = color_get_green(current_color); var b = clamp(_val, 0, 255); + var a = color_get_alpha(current_color); - current_color = make_color_rgb(r, g, b); + current_color = make_color_rgba(r, g, b, a); resetHSV(); - }) + }); - tb_red.hdw = ui(16); + tb_alpha = new slider(0, 255, 1, function(_val) { + if(!interactable) return; + var alp = clamp(_val, 0, 255); + + current_color = _cola(current_color, alp); + resetHSV(); + }); + + tb_hue.hdw = ui(16); + tb_sat.hdw = ui(16); + tb_val.hdw = ui(16); + tb_red.hdw = ui(16); tb_green.hdw = ui(16); - tb_blue.hdw = ui(16); + tb_blue.hdw = ui(16); + tb_alpha.hdw = ui(16); + + tb_hue.font = f_p1; + tb_sat.font = f_p1; + tb_val.font = f_p1; + tb_red.font = f_p1; + tb_green.font = f_p1; + tb_blue.font = f_p1; + tb_alpha.font = f_p1; tb_hex = new textBox(TEXTBOX_INPUT.text, function(str) { if(!interactable) return; @@ -82,29 +105,34 @@ function colorSelector(onApply = noone) constructor { var _r = string_hexadecimal(string_copy(str, 1, 2)); var _g = string_hexadecimal(string_copy(str, 3, 2)); var _b = string_hexadecimal(string_copy(str, 5, 2)); + var _a = string_length(str) > 6? string_hexadecimal(string_copy(str, 7, 2)) : 255; - current_color = make_color_rgb(_r, _g, _b); + current_color = make_color_rgba(_r, _g, _b, _a); resetHSV(); - }) + }); scr_disp = new buttonGroup(["Hue", "Value"], function(mode) { disp_mode = mode; } ); - function resetHSV() { + function resetHSV(_apply = true) { hue = round(color_get_hue(current_color)); sat = round(color_get_saturation(current_color)); val = round(color_get_value(current_color)); - if(onApply != noone) onApply(current_color); - } - function setHSV() { - if(!interactable) return; - current_color = make_color_hsv(hue, sat, val); - if(onApply != noone) onApply(current_color); + if(_apply && onApply != noone) onApply(current_color); } - function setColor(color) { + function setHSV(_apply = true) { + if(!interactable) return; + var alp = color_get_alpha(current_color); + current_color = make_color_hsva(hue, sat, val, alp); + + if(_apply && onApply != noone) onApply(current_color); + } + + function setColor(color, _apply = true) { current_color = color; - resetHSV(); + + resetHSV(_apply); } function colorPicker() { @@ -160,7 +188,7 @@ function colorSelector(onApply = noone) constructor { #region side control var hue_x = col_x + ui(280); var hue_y = col_y; - + draw_sprite_stretched(THEME.ui_panel_bg, 1, hue_x - ui(8), hue_y - ui(8), ui(32), ui(256 + 16)); if(disp_mode == 0) { @@ -275,34 +303,42 @@ function colorSelector(onApply = noone) constructor { #region data var data_x = hue_x + ui(40); var data_y = col_y + ui(40); + var wdw = ui(160); + var wdh = ui( 27); + var txh = wdh + ui(4); draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text); - draw_text(data_x, data_y + ui(36 * 0 + 15), "H"); - draw_text(data_x, data_y + ui(36 * 1 + 15), "S") - draw_text(data_x, data_y + ui(36 * 2 + 15), "V"); - + draw_text(data_x, data_y + txh * 0 + ui(15), "H"); + draw_text(data_x, data_y + txh * 1 + ui(15), "S") + draw_text(data_x, data_y + txh * 2 + ui(15), "V"); + tb_hue.setFocusHover(focus, hover); tb_sat.setFocusHover(focus, hover); tb_val.setFocusHover(focus, hover); - - tb_hue.draw(data_x + ui(28), data_y + ui(36 * 0), ui(160), ui(30), round(color_get_hue(current_color)), mouse_ui); - tb_sat.draw(data_x + ui(28), data_y + ui(36 * 1), ui(160), ui(30), round(color_get_saturation(current_color)), mouse_ui); - tb_val.draw(data_x + ui(28), data_y + ui(36 * 2), ui(160), ui(30), round(color_get_value(current_color)), mouse_ui); - - data_y = data_y + ui(36 * 3 + 8); - + + tb_hue.draw(data_x + ui(28), data_y + txh * 0, wdw, wdh, round(color_get_hue(current_color)), mouse_ui); + tb_sat.draw(data_x + ui(28), data_y + txh * 1, wdw, wdh, round(color_get_saturation(current_color)), mouse_ui); + tb_val.draw(data_x + ui(28), data_y + txh * 2, wdw, wdh, round(color_get_value(current_color)), mouse_ui); + + data_y = data_y + txh * 3 + ui(8); + draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text); - draw_text(data_x, data_y + ui(36 * 0 + 15), "R"); - draw_text(data_x, data_y + ui(36 * 1 + 15), "G"); - draw_text(data_x, data_y + ui(36 * 2 + 15), "B"); + draw_text(data_x, data_y + txh * 0 + ui(15), "R"); + draw_text(data_x, data_y + txh * 1 + ui(15), "G"); + draw_text(data_x, data_y + txh * 2 + ui(15), "B"); + draw_text(data_x, data_y + txh * 3 + ui(15), "A"); - tb_red.setFocusHover(focus, hover); + tb_red.setFocusHover (focus, hover); tb_green.setFocusHover(focus, hover); - tb_blue.setFocusHover(focus, hover); + tb_blue.setFocusHover (focus, hover); + tb_alpha.setFocusHover(focus, hover); - tb_red.draw (data_x + ui(28), data_y + ui(36 * 0), ui(160), ui(30), color_get_red(current_color), mouse_ui); - tb_green.draw(data_x + ui(28), data_y + ui(36 * 1), ui(160), ui(30), color_get_green(current_color), mouse_ui); - tb_blue.draw (data_x + ui(28), data_y + ui(36 * 2), ui(160), ui(30), color_get_blue(current_color), mouse_ui); + tb_red.draw (data_x + ui(28), data_y + txh * 0, wdw, wdh, round(color_get_red(current_color)), mouse_ui); + tb_green.draw(data_x + ui(28), data_y + txh * 1, wdw, wdh, round(color_get_green(current_color)), mouse_ui); + tb_blue.draw (data_x + ui(28), data_y + txh * 2, wdw, wdh, round(color_get_blue(current_color)), mouse_ui); + tb_alpha.draw(data_x + ui(28), data_y + txh * 3, wdw, wdh, round(color_get_alpha(current_color)), mouse_ui); + + ////////////////////////////////////////////////////////////////// tb_hex.active = focus; tb_hex.hover = hover; tb_hex.draw(hue_x - ui(128), col_y + ui(256 + 24), ui(108), TEXTBOX_HEIGHT, color_get_hex(current_color), mouse_ui); @@ -310,9 +346,10 @@ function colorSelector(onApply = noone) constructor { var cx = col_x + ui(16); var cy = col_y + ui(296); - + var aa = _color_get_alpha(current_color); + draw_sprite_stretched_ext(THEME.color_picker_box, 0, cx - ui(20), cy - ui(20), ui(40), ui(40), COLORS._main_icon_dark, 1); - draw_sprite_stretched_ext(THEME.color_picker_box, 1, cx - ui(18), cy - ui(18), ui(36), ui(36), current_color, 1); + draw_sprite_stretched_ext(THEME.color_picker_box, 1, cx - ui(18), cy - ui(18), ui(36), ui(36), current_color, aa); cx += ui(48); if(buttonInstant(THEME.button_hide, cx - ui(18), cy - ui(18), ui(36), ui(36), mouse_ui, focus, hover, "", THEME.color_picker_dropper, 0, c_white) == 2) diff --git a/scripts/coltovec4/colToVec4.gml b/scripts/coltovec4/colToVec4.gml index 7a6a1c0ac..e0d89d07a 100644 --- a/scripts/coltovec4/colToVec4.gml +++ b/scripts/coltovec4/colToVec4.gml @@ -1,5 +1,6 @@ function colToVec4(color, alpha = 1) { - return [ color_get_red(color) / 255, color_get_green(color) / 255, color_get_blue(color) / 255, alpha ]; + var a = is_int64(color)? _color_get_alpha(color) : alpha; + return [ _color_get_red(color), _color_get_green(color), _color_get_blue(color), a ]; } function colaToVec4(color) { diff --git a/scripts/draw_set_text/draw_set_text.gml b/scripts/draw_set_text/draw_set_text.gml deleted file mode 100644 index 87fdf31da..000000000 --- a/scripts/draw_set_text/draw_set_text.gml +++ /dev/null @@ -1,6 +0,0 @@ -function draw_set_text(font, halign, valign) { - if(argument_count > 3) draw_set_color(argument[3]); - draw_set_font(font); - draw_set_halign(halign); - draw_set_valign(valign); -} \ No newline at end of file diff --git a/scripts/draw_setter/draw_setter.gml b/scripts/draw_setter/draw_setter.gml new file mode 100644 index 000000000..c40603e8e --- /dev/null +++ b/scripts/draw_setter/draw_setter.gml @@ -0,0 +1,35 @@ +#macro draw_set_color draw_set_color_ext +#macro __draw_set_color draw_set_color + +#macro draw_clear draw_clear_ext +#macro __draw_clear draw_clear + +function draw_set_color_ext(col) { + INLINE + + __draw_set_color(col); + if(is_real(col)) return; + + var a = _color_get_alpha(col); + draw_set_alpha(a); +} + +function draw_clear_ext(col) { + if(is_real(col)) { + __draw_clear(col); + return; + } + + var a = _color_get_alpha(col); + draw_clear_alpha(col, a); +} + +function draw_set_text(font, halign, valign) { + INLINE + + if(argument_count > 3) draw_set_color(argument[3]); + + draw_set_font(font); + draw_set_halign(halign); + draw_set_valign(valign); +} \ No newline at end of file diff --git a/scripts/draw_set_text/draw_set_text.yy b/scripts/draw_setter/draw_setter.yy similarity index 87% rename from scripts/draw_set_text/draw_set_text.yy rename to scripts/draw_setter/draw_setter.yy index e1ac0eb6c..4cb803163 100644 --- a/scripts/draw_set_text/draw_set_text.yy +++ b/scripts/draw_setter/draw_setter.yy @@ -1,7 +1,7 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "draw_set_text", + "name": "draw_setter", "isCompatibility": false, "isDnD": false, "parent": { diff --git a/scripts/gradients_function/gradients_function.gml b/scripts/gradients_function/gradients_function.gml index 3b57f9cf7..a0aa54310 100644 --- a/scripts/gradients_function/gradients_function.gml +++ b/scripts/gradients_function/gradients_function.gml @@ -24,7 +24,8 @@ function gradientObject(color = c_black) constructor { #region var g = new gradientObject(); for( var i = 0, n = array_length(keys); i < n; i++ ) g.keys[i] = keys[i].clone(); - g.type = type; + + g.type = type; return g; } #endregion @@ -56,7 +57,7 @@ function gradientObject(color = c_black) constructor { #region var _len = array_length(keys); if(_len == 0) return c_black; if(_len == 1) return keys[0].value; - + if(position <= keys[0].time) return keys[0].value; if(position >= keys[_len - 1].time) return keys[_len - 1].value; @@ -67,11 +68,12 @@ function gradientObject(color = c_black) constructor { #region if(_key.time < position) continue; if(_key.time == position) return keys[i].value; - if(type == GRADIENT_INTER.smooth) { - var rat = (position - _pkey.time) / (_key.time - _pkey.time); - return merge_color(_pkey.value, _key.value, rat); - } else if(type == GRADIENT_INTER.none) { - return _pkey.value; + var rat = (position - _pkey.time) / (_key.time - _pkey.time); + + switch(type) { + case GRADIENT_INTER.smooth : return merge_color(_pkey.value, _key.value, rat); + case GRADIENT_INTER.hue : return merge_color_hsv(_pkey.value, _key.value, rat); + case GRADIENT_INTER.none : return _pkey.value; } _pkey = _key; @@ -90,40 +92,59 @@ function gradientObject(color = c_black) constructor { #region var _grad_time = []; var len = min(128, array_length(keys)); + var aa = false; for(var i = 0; i < len; i++) { - if(keys[i].value == undefined) return; - - _grad_color[i * 4 + 0] = color_get_red(keys[i].value) / 255; - _grad_color[i * 4 + 1] = color_get_green(keys[i].value) / 255; - _grad_color[i * 4 + 2] = color_get_blue(keys[i].value) / 255; - _grad_color[i * 4 + 3] = 1; + var _val = keys[i].value; + if(_val == undefined) return; + + _grad_color[i * 4 + 0] = _color_get_red(_val); + _grad_color[i * 4 + 1] = _color_get_green(_val); + _grad_color[i * 4 + 2] = _color_get_blue(_val); + _grad_color[i * 4 + 3] = _color_get_alpha(_val); _grad_time[i] = keys[i].time; + + if(_grad_color[i * 4 + 3] != 1) aa = true; } surf = surface_verify(surf, _w, _h); surface_set_target(surf); DRAW_CLEAR + var _gh = aa? _h - ui(8) : _h; + draw_sprite_stretched_ext(THEME.gradient_mask, 0, 0, 0, _w, _gh, c_white, _a) - gpu_set_colorwriteenable(0, 0, 0, 1); - draw_sprite_stretched_ext(THEME.gradient_mask, 0, 0, 0, _w, _h, c_white, _a) - gpu_set_colorwriteenable(1, 1, 1, 0); - - if(len == 0) { - draw_sprite_stretched_ext(s_fx_pixel, 0, 0, 0, _w, _h, c_white, 1); - } else { + if(len) { + BLEND_MULTIPLY + shader_set(sh_gradient_display); shader_set_uniform_i(uniform_grad_blend, type); shader_set_uniform_f_array_safe(uniform_grad, _grad_color, GRADIENT_LIMIT * 4); shader_set_uniform_f_array_safe(uniform_grad_time, _grad_time); shader_set_uniform_i(uniform_grad_key, len); - - draw_sprite_stretched_ext(s_fx_pixel, 0, 0, 0, _w, _h, c_white, 1); + + draw_sprite_stretched_ext(s_fx_pixel, 0, 0, 0, _w, _gh, c_white, 1); shader_reset(); + + BLEND_NORMAL } - gpu_set_colorwriteenable(1, 1, 1, 1); + if(aa) { + draw_sprite_stretched_ext(THEME.gradient_mask, 0, 0, _h - ui(6), _w, ui(6), c_white, _a) + + BLEND_MULTIPLY + + shader_set(sh_gradient_display_alpha); + shader_set_uniform_i(uniform_grad_blend, type); + shader_set_uniform_f_array_safe(uniform_grad, _grad_color, GRADIENT_LIMIT * 4); + shader_set_uniform_f_array_safe(uniform_grad_time, _grad_time); + shader_set_uniform_i(uniform_grad_key, len); + + draw_sprite_stretched_ext(s_fx_pixel, 0, 0, _h - ui(6), _w, ui(6), c_white, 1); + shader_reset(); + + BLEND_NORMAL + } surface_reset_target(); draw_surface(surf, _x, _y); @@ -133,12 +154,13 @@ function gradientObject(color = c_black) constructor { #region var _grad_color = [], _grad_time = []; for(var i = 0; i < array_length(keys); i++) { - if(is_undefined(keys[i].value)) continue; + var _val = keys[i].value; + if(is_undefined(_val)) continue; - _grad_color[i * 4 + 0] = color_get_red(keys[i].value) / 255; - _grad_color[i * 4 + 1] = color_get_green(keys[i].value) / 255; - _grad_color[i * 4 + 2] = color_get_blue(keys[i].value) / 255; - _grad_color[i * 4 + 3] = 1; + _grad_color[i * 4 + 0] = _color_get_red(_val); + _grad_color[i * 4 + 1] = _color_get_green(_val); + _grad_color[i * 4 + 2] = _color_get_blue(_val); + _grad_color[i * 4 + 3] = _color_get_alpha(_val); _grad_time[i] = keys[i].time; } diff --git a/scripts/node_2d_light/node_2d_light.gml b/scripts/node_2d_light/node_2d_light.gml index ebc0a64cb..91a1464b0 100644 --- a/scripts/node_2d_light/node_2d_light.gml +++ b/scripts/node_2d_light/node_2d_light.gml @@ -159,7 +159,7 @@ function Node_2D_light(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) shader_set(shader); gpu_set_colorwriteenable(1, 1, 1, 0); - shader_set_uniform_f(uniform_intn, _inten); + shader_set_uniform_f(uniform_intn, _inten * _color_get_alpha(_color)); shader_set_uniform_f(uniform_band, _band); shader_set_uniform_f(uniform_attn, _attn); shader_set_uniform_f_array_safe(uniform_colr, [ color_get_red(_color) / 255, color_get_green(_color) / 255, color_get_blue(_color) / 255 ]); diff --git a/scripts/node_active_canvas/node_active_canvas.gml b/scripts/node_active_canvas/node_active_canvas.gml index 10f9c6fd5..9d1ecb296 100644 --- a/scripts/node_active_canvas/node_active_canvas.gml +++ b/scripts/node_active_canvas/node_active_canvas.gml @@ -29,7 +29,7 @@ function Node_Active_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) const input_display_list = [ 0, [ "Brush transform", false ], 7, 2, 3, 4, - [ "Brush properties", false ], 1, 5, 6, 8, + [ "Brush properties", false ], 1, 5, 8, ]; brush_prev = noone; @@ -61,7 +61,7 @@ function Node_Active_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) const var _brot = getInputData(3); var _bsca = getInputData(4); var _bcol = getInputData(5); - var _balp = getInputData(6); + var _balp = _color_get_alpha(_bcol); var _bact = getInputData(7); var _bdst = getInputData(8); diff --git a/scripts/node_canvas/node_canvas.gml b/scripts/node_canvas/node_canvas.gml index 62027196c..9f3699d1b 100644 --- a/scripts/node_canvas/node_canvas.gml +++ b/scripts/node_canvas/node_canvas.gml @@ -156,9 +156,9 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor input_display_list = [ ["Output", false], 0, frame_renderer, 12, 13, - ["Brush", false], 6, 2, 1, 11, 15, 17, 16, + ["Brush", false], 6, 2, 1, 15, 17, 16, ["Fill", false], 3, 4, - ["Display", false], 8, 10, 14, 9, + ["Background", true, 10], 8, 14, 9, ]; #region ++++ data ++++ @@ -341,7 +341,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor } #endregion function apply_draw_surface() { #region - var _alp = getInputData(11); + var _alp = _color_get_alpha(getInputData(1)); storeAction(); @@ -526,7 +526,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor } #endregion function flood_fill_scanline(_x, _y, _surf, _thres, _corner = false) { #region - var _alp = getInputData(11); + var _alp = _color_get_alpha(getInputData(1)); var colorFill = draw_get_color() + (255 << 24); var colorBase = get_color_buffer(_x, _y); @@ -617,7 +617,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor } #endregion function canvas_fill(_x, _y, _surf, _thres) { #region - var _alp = getInputData(11); + var _alp = _color_get_alpha(getInputData(1)); var w = surface_get_width_safe(_surf); var h = surface_get_height_safe(_surf); @@ -975,7 +975,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var _bg = getInputData(8); var _bga = getInputData(9); var _bgr = getInputData(10); - var _alp = getInputData(11); + var _alp = _color_get_alpha(getInputData(1)); var __s = surface_get_target(); diff --git a/scripts/node_color_adjustment/node_color_adjustment.gml b/scripts/node_color_adjustment/node_color_adjustment.gml index 4428d36f7..b5d038c85 100644 --- a/scripts/node_color_adjustment/node_color_adjustment.gml +++ b/scripts/node_color_adjustment/node_color_adjustment.gml @@ -240,7 +240,7 @@ function Node_Color_adjust(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro shader_set_f_map_s("val", _val, _data[22], inputs[| 5]); shader_set_color("blend", _bl); - shader_set_f_map_s("blendAmount", _bla, _data[23], inputs[| 7]); + shader_set_f_map_s("blendAmount", _bla * _color_get_alpha(_bl), _data[23], inputs[| 7]); shader_set_i("blendMode", _blm); shader_set_f_map_s("alpha", _alp, _data[24], inputs[| 9]); diff --git a/scripts/node_color_mix/node_color_mix.gml b/scripts/node_color_mix/node_color_mix.gml index decd4ca1f..648c3a439 100644 --- a/scripts/node_color_mix/node_color_mix.gml +++ b/scripts/node_color_mix/node_color_mix.gml @@ -1,7 +1,6 @@ function Node_Color_Mix(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { - name = "Mix Color"; - - w = 96; + name = "Mix Color"; + w = 96; inputs[| 0] = nodeValue("Color from", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white); @@ -19,21 +18,8 @@ function Node_Color_Mix(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) static processData = function(_output, _data, _output_index, _array_index = 0) { switch(_data[3]) { - case 0 : return merge_color(_data[0], _data[1], _data[2]); - case 1 : - var h0 = color_get_hue(_data[0]); - var s0 = color_get_saturation(_data[0]); - var v0 = color_get_value(_data[0]); - - var h1 = color_get_hue(_data[1]); - var s1 = color_get_saturation(_data[1]); - var v1 = color_get_value(_data[1]); - - return make_color_hsv( - lerp(h0, h1, _data[2]), - lerp(s0, s1, _data[2]), - lerp(v0, v1, _data[2]), - ); + case 0 : return merge_color_ext(_data[0], _data[1], _data[2]); + case 1 : return merge_color_hsv(_data[0], _data[1], _data[2]); } } diff --git a/scripts/node_color_palette_replacement/node_color_palette_replacement.gml b/scripts/node_color_palette_replacement/node_color_palette_replacement.gml index 6073057ce..df9ccc8bf 100644 --- a/scripts/node_color_palette_replacement/node_color_palette_replacement.gml +++ b/scripts/node_color_palette_replacement/node_color_palette_replacement.gml @@ -56,18 +56,18 @@ function Node_Color_replace(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr var _colorFrom = array_create(array_length(fr) * 4); for(var i = 0; i < array_length(fr); i++) { - _colorFrom[i * 4 + 0] = color_get_red(fr[i]) / 255; - _colorFrom[i * 4 + 1] = color_get_green(fr[i]) / 255; - _colorFrom[i * 4 + 2] = color_get_blue(fr[i]) / 255; - _colorFrom[i * 4 + 3] = 1; + _colorFrom[i * 4 + 0] = _color_get_red(fr[i]); + _colorFrom[i * 4 + 1] = _color_get_green(fr[i]); + _colorFrom[i * 4 + 2] = _color_get_blue(fr[i]); + _colorFrom[i * 4 + 3] = _color_get_alpha(fr[i]); } var _colorTo = array_create(array_length(to) * 4); for(var i = 0; i < array_length(to); i++) { - _colorTo[i * 4 + 0] = color_get_red(to[i]) / 255; - _colorTo[i * 4 + 1] = color_get_green(to[i]) / 255; - _colorTo[i * 4 + 2] = color_get_blue(to[i]) / 255; - _colorTo[i * 4 + 3] = 1; + _colorTo[i * 4 + 0] = _color_get_red(to[i]); + _colorTo[i * 4 + 1] = _color_get_green(to[i]); + _colorTo[i * 4 + 2] = _color_get_blue(to[i]); + _colorTo[i * 4 + 3] = _color_get_alpha(to[i]); } surface_set_shader(_outSurf, sh_palette_replace); diff --git a/scripts/node_display_text/node_display_text.gml b/scripts/node_display_text/node_display_text.gml index ed44986bd..3f7614929 100644 --- a/scripts/node_display_text/node_display_text.gml +++ b/scripts/node_display_text/node_display_text.gml @@ -42,7 +42,7 @@ function Node_Display_Text(_x, _y, _group = noone) : Node(_x, _y, _group) constr .rejectArray(); input_display_list = [1, - ["Styling", false], 2, 0, 3, 4, + ["Styling", false], 2, 0, 4, ["Display", false], 5, 6, ]; @@ -355,7 +355,7 @@ function Node_Display_Text(_x, _y, _group = noone) : Node(_x, _y, _group) constr if(txt == "") txt = "..." var sty = getInputData(2); - var alp = getInputData(3); + var alp = _color_get_alpha(color); var wid = getInputData(4); var posi = getInputData(5); smooth = getInputData(6); diff --git a/scripts/node_flood_fill/node_flood_fill.gml b/scripts/node_flood_fill/node_flood_fill.gml index 8384c5a35..2b930eb56 100644 --- a/scripts/node_flood_fill/node_flood_fill.gml +++ b/scripts/node_flood_fill/node_flood_fill.gml @@ -15,7 +15,7 @@ function Node_Flood_Fill(_x, _y, _group = noone) : Node_Processor(_x, _y, _group inputs[| 4] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ]) .setDisplay(VALUE_DISPLAY.vector); - inputs[| 5] = nodeValue("Colors", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_black ) + inputs[| 5] = nodeValue("Colors", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, cola(c_black) ) inputs[| 6] = nodeValue("Threshold", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.1) .setDisplay(VALUE_DISPLAY.slider); @@ -90,30 +90,18 @@ function Node_Flood_Fill(_x, _y, _group = noone) : Node_Processor(_x, _y, _group repeat(it) { ind = !ind; - surface_set_target(temp_surface[ind]); - DRAW_CLEAR - - shader_set(sh_flood_fill_it); - shader_set_f("dimension", [ sw, sh ]); - shader_set_i("diagonal", _dia); - BLEND_OVERRIDE + surface_set_shader(temp_surface[ind], sh_flood_fill_it); + shader_set_f("dimension", [ sw, sh ]); + shader_set_i("diagonal", _dia); draw_surface_safe(temp_surface[!ind], 0, 0); - BLEND_NORMAL - shader_reset(); - surface_reset_target(); + surface_reset_shader(); } - surface_set_target(_outSurf); - DRAW_CLEAR - - shader_set(sh_flood_fill_replace); - shader_set_f("color", colToVec4(_col)); - shader_set_surface("mask", temp_surface[ind]); - BLEND_OVERRIDE + surface_set_shader(_outSurf, sh_flood_fill_replace); + shader_set_color("color", _col); + shader_set_surface("mask", temp_surface[ind]); draw_surface_safe(inSurf, 0, 0); - BLEND_NORMAL - shader_reset(); - surface_reset_target(); + surface_reset_shader(); __process_mask_modifier(_data); _outSurf = mask_apply(_data[0], _outSurf, _data[1], _data[2]); diff --git a/scripts/node_frame/node_frame.gml b/scripts/node_frame/node_frame.gml index a7c19a152..8b0db51b3 100644 --- a/scripts/node_frame/node_frame.gml +++ b/scripts/node_frame/node_frame.gml @@ -1,10 +1,9 @@ global.__FRAME_LABEL_SCALE = 1; function Node_Frame(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { - name = "Frame"; - w = 240; - h = 160; - alpha = 1; + name = "Frame"; + w = 240; + h = 160; bg_spr = THEME.node_frame_bg; size_dragging = false; @@ -26,7 +25,7 @@ function Node_Frame(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { .setDisplay(VALUE_DISPLAY.vector) .rejectArray(); - inputs[| 1] = nodeValue("Color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white ) + inputs[| 1] = nodeValue("Color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, cola(c_white) ) .rejectArray(); inputs[| 2] = nodeValue("Alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.75 ) @@ -41,6 +40,8 @@ function Node_Frame(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { .setDisplay(VALUE_DISPLAY.slider) .rejectArray(); + input_display_list = [ 0, 1, 3, 4 ]; + static onValueUpdate = function(index = 3) { #region global.__FRAME_LABEL_SCALE = getInputData(3); } #endregion @@ -51,7 +52,7 @@ function Node_Frame(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { h = si[1]; color = getInputData(1); - alpha = getInputData(2); + alpha = _color_get_alpha(color); scale = getInputData(3); label_color = getInputData(4); } #endregion diff --git a/scripts/node_glow/node_glow.gml b/scripts/node_glow/node_glow.gml index 62dca9f99..95758652e 100644 --- a/scripts/node_glow/node_glow.gml +++ b/scripts/node_glow/node_glow.gml @@ -58,11 +58,7 @@ function Node_Glow(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons var s = surface_apply_gaussian(pass1, _size, false, c_black, 1, noone); - surface_set_target(_outSurf); - DRAW_CLEAR - BLEND_OVERRIDE - - shader_set(sh_lum2alpha); + surface_set_shader(_outSurf, sh_lum2alpha); shader_set_color("color", cl); shader_set_f("intensity", _stre); draw_surface_ext_safe(s, 0, 0, 1, 1, 0, c_white, 1); diff --git a/scripts/node_gradient/node_gradient.gml b/scripts/node_gradient/node_gradient.gml index a882c8298..18a2f2b88 100644 --- a/scripts/node_gradient/node_gradient.gml +++ b/scripts/node_gradient/node_gradient.gml @@ -4,7 +4,7 @@ function Node_Gradient(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF ) .setDisplay(VALUE_DISPLAY.vector); - inputs[| 1] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.gradient, new gradientObject([ c_black, c_white ]) ); + inputs[| 1] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.gradient, new gradientObject([ cola(c_black), cola(c_white) ]) ); inputs[| 2] = nodeValue("Type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) .setDisplay(VALUE_DISPLAY.enum_scroll, [ "Linear", "Circular", "Radial" ]); diff --git a/scripts/node_gradient_output/node_gradient_output.gml b/scripts/node_gradient_output/node_gradient_output.gml index b89d54e98..1873c1136 100644 --- a/scripts/node_gradient_output/node_gradient_output.gml +++ b/scripts/node_gradient_output/node_gradient_output.gml @@ -2,7 +2,7 @@ function Node_Gradient_Out(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro name = "Gradient"; w = 96; - inputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.gradient, new gradientObject([ c_black, c_white ]) ); + inputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.gradient, new gradientObject([ cola(c_black), cola(c_white) ]) ); inputs[| 1] = nodeValue("Sample", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0, "Position to sample a color from the gradient.") .setDisplay(VALUE_DISPLAY.slider) diff --git a/scripts/node_grey_to_alpha/node_grey_to_alpha.gml b/scripts/node_grey_to_alpha/node_grey_to_alpha.gml index 00af15297..bf43b0950 100644 --- a/scripts/node_grey_to_alpha/node_grey_to_alpha.gml +++ b/scripts/node_grey_to_alpha/node_grey_to_alpha.gml @@ -1,10 +1,6 @@ function Node_Grey_Alpha(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { name = "Grey to Alpha"; - shader = sh_grey_alpha; - uniform_rep = shader_get_uniform(shader, "replace"); - uniform_col = shader_get_uniform(shader, "color"); - inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); inputs[| 1] = nodeValue("Replace color", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true, "Replace output with solid color."); @@ -16,8 +12,8 @@ function Node_Grey_Alpha(_x, _y, _group = noone) : Node_Processor(_x, _y, _group outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); - input_display_list = [ 3, - ["Effect", false], 0, 1, 2, + input_display_list = [ 3, 0, + ["Replace Color", false, 1], 2, ] attribute_surface_depth(); @@ -31,18 +27,12 @@ function Node_Grey_Alpha(_x, _y, _group = noone) : Node_Processor(_x, _y, _group var _replace = getInputData(1); var _color = getInputData(2); - surface_set_target(_outSurf); - DRAW_CLEAR - BLEND_OVERRIDE; - - shader_set(shader); - shader_set_uniform_i(uniform_rep, _replace); - shader_set_uniform_f_array_safe(uniform_col, colToVec4(_color)); + surface_set_shader(_outSurf, sh_grey_alpha); + shader_set_i("replace", _replace); + shader_set_color("color", _color); + draw_surface_safe(_data[0], 0, 0); - shader_reset(); - - BLEND_NORMAL; - surface_reset_target(); + surface_reset_shader(); return _outSurf; } #endregion diff --git a/scripts/node_keyframe/node_keyframe.gml b/scripts/node_keyframe/node_keyframe.gml index 3b835fedd..18310dc34 100644 --- a/scripts/node_keyframe/node_keyframe.gml +++ b/scripts/node_keyframe/node_keyframe.gml @@ -431,6 +431,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor { case VALUE_TYPE.integer : case VALUE_TYPE.float : return _val; case VALUE_TYPE.text : return string_real(_val); + case VALUE_TYPE.color : return is_real(_val)? cola(_val) : _val; case VALUE_TYPE.surface : if(is_string(_val)) return get_asset(_val); diff --git a/scripts/node_normal_light/node_normal_light.gml b/scripts/node_normal_light/node_normal_light.gml index d2462f47b..b2709c11c 100644 --- a/scripts/node_normal_light/node_normal_light.gml +++ b/scripts/node_normal_light/node_normal_light.gml @@ -1,17 +1,6 @@ function Node_Normal_Light(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { name = "Normal Light"; - shader = sh_normal_light; - uniform_map = shader_get_sampler_index(shader, "normalMap"); - uniform_hei = shader_get_uniform(shader, "normalHeight"); - uniform_dim = shader_get_uniform(shader, "dimension"); - - uniform_amb = shader_get_uniform(shader, "ambiance"); - uniform_light_pos = shader_get_uniform(shader, "lightPosition"); - uniform_light_col = shader_get_uniform(shader, "lightColor"); - uniform_light_int = shader_get_uniform(shader, "lightIntensity"); - uniform_light_typ = shader_get_uniform(shader, "lightType"); - inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); inputs[| 1] = nodeValue("Normal map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); @@ -65,19 +54,18 @@ function Node_Normal_Light(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro var _light_col = _data[7]; var _light_typ = _data[8]; - surface_set_shader(_outSurf, shader); - - texture_set_stage(uniform_map, surface_get_texture(_map)); - shader_set_uniform_f(uniform_hei, _hei); - shader_set_uniform_f_array_safe(uniform_dim, [ surface_get_width_safe(_data[0]), surface_get_height_safe(_data[0]) ]); - shader_set_uniform_f_array_safe(uniform_amb, [color_get_red(_amb) / 255, color_get_green(_amb) / 255, color_get_blue(_amb) / 255]); + surface_set_shader(_outSurf, sh_normal_light); + shader_set_surface("normalMap", _map); + shader_set_f("normalHeight", _hei); + shader_set_f("dimension", surface_get_width_safe(_data[0]), surface_get_height_safe(_data[0])); + shader_set_color("ambiance", _amb); - shader_set_uniform_f_array_safe(uniform_light_pos, [ _light_pos[0], _light_pos[1], _light_pos[2] / 100, _light_ran ] ); - shader_set_uniform_f_array_safe(uniform_light_col, [color_get_red(_light_col) / 255, color_get_green(_light_col) / 255, color_get_blue(_light_col) / 255]); - shader_set_uniform_f(uniform_light_int, _light_int); - shader_set_uniform_i(uniform_light_typ, _light_typ); + shader_set_f("lightPosition", _light_pos[0], _light_pos[1], _light_pos[2] / 100, _light_ran ); + shader_set_color("lightColor", _light_col); + shader_set_f("lightIntensity", _light_int); + shader_set_i("lightType", _light_typ); - draw_surface_safe(_data[0], 0, 0); + draw_surface_safe(_data[0], 0, 0); surface_reset_shader(); return _outSurf; diff --git a/scripts/node_padding/node_padding.gml b/scripts/node_padding/node_padding.gml index 01af655e9..2ab1f56a8 100644 --- a/scripts/node_padding/node_padding.gml +++ b/scripts/node_padding/node_padding.gml @@ -92,7 +92,7 @@ function Node_Padding(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c DRAW_CLEAR BLEND_OVERRIDE; } else if(fill == 1) - draw_clear_alpha(fillClr, 1); + draw_clear(fillClr); var sx = 0; var sy = 0; diff --git a/scripts/node_plot_linear/node_plot_linear.gml b/scripts/node_plot_linear/node_plot_linear.gml index a82420d8e..53e76d062 100644 --- a/scripts/node_plot_linear/node_plot_linear.gml +++ b/scripts/node_plot_linear/node_plot_linear.gml @@ -71,7 +71,8 @@ function Node_Plot_Linear(_x, _y, _group = noone) : Node_Processor(_x, _y, _grou input_display_list = [ 0, ["Data", true], 1, 12, 21, 14, 2, 3, 15, 16, ["Plot", false], 11, 4, 10, 20, 5, 22, 23, - ["Render", false], 6, 13, 24, 25, 26, 7, 17, 18, 19, 8, 9, + ["Render", false], 6, 13, 24, 25, 26, 7, 17, 18, 19, + ["Background", true, 8], 9, ]; attribute_surface_depth(); diff --git a/scripts/node_polygonal_shape/node_polygonal_shape.gml b/scripts/node_polygonal_shape/node_polygonal_shape.gml index d284002a4..94c1f2bd0 100644 --- a/scripts/node_polygonal_shape/node_polygonal_shape.gml +++ b/scripts/node_polygonal_shape/node_polygonal_shape.gml @@ -62,7 +62,8 @@ function Node_Shape_Polygon(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr ["Output", false], 0, ["Transform", false], 5, 6, 7, ["Shape", false], 4, 8, 9, 10, 11, 12, 13, 14, 15, - ["Render", true], 1, 2, 3, + ["Render", true], 3, + ["Background", true, 1], 2, ]; attribute_surface_depth(); @@ -134,7 +135,7 @@ function Node_Shape_Polygon(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr }; surface_set_target(_outSurf); - if(_bg) draw_clear_alpha(_bgc, 1); + if(_bg) draw_clear(_bgc); else DRAW_CLEAR draw_set_color(_shc); @@ -191,7 +192,7 @@ function Node_Shape_Polygon(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr mesh.triangles = []; for( var i = 0, n = array_length(shapes); i < n; i++ ) { var triangles = shapes[i]; - + for( var j = 0; j < array_length(triangles); j++ ) { var tri = triangles[j]; @@ -204,6 +205,7 @@ function Node_Shape_Polygon(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr } } draw_primitive_end(); + draw_set_alpha(1); surface_reset_target(); diff --git a/scripts/node_posterize/node_posterize.gml b/scripts/node_posterize/node_posterize.gml index e74ca0897..7950e4d74 100644 --- a/scripts/node_posterize/node_posterize.gml +++ b/scripts/node_posterize/node_posterize.gml @@ -52,12 +52,12 @@ function Node_Posterize(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) if(_use_gra) { var _colors = array_create(array_length(_gra) * 4); for(var i = 0; i < array_length(_gra); i++) { - _colors[i * 4 + 0] = color_get_red(_gra[i]) / 255; - _colors[i * 4 + 1] = color_get_green(_gra[i]) / 255; - _colors[i * 4 + 2] = color_get_blue(_gra[i]) / 255; - _colors[i * 4 + 3] = 1; + _colors[i * 4 + 0] = _color_get_red(_gra[i]); + _colors[i * 4 + 1] = _color_get_green(_gra[i]); + _colors[i * 4 + 2] = _color_get_blue(_gra[i]); + _colors[i * 4 + 3] = _color_get_alpha(_gra[i]); } - + surface_set_shader(_outSurf, sh_posterize_palette); shader_set_f("palette", _colors); shader_set_i("keys", array_length(_gra)); diff --git a/scripts/node_repeat/node_repeat.gml b/scripts/node_repeat/node_repeat.gml index 0964c3e8b..91bf2911e 100644 --- a/scripts/node_repeat/node_repeat.gml +++ b/scripts/node_repeat/node_repeat.gml @@ -39,7 +39,7 @@ function Node_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) constructor inputs[| 13] = nodeValue("Path shift", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0); - inputs[| 14] = nodeValue("Color over copy", self, JUNCTION_CONNECT.input, VALUE_TYPE.gradient, new gradientObject(c_white) ); + inputs[| 14] = nodeValue("Color over copy", self, JUNCTION_CONNECT.input, VALUE_TYPE.gradient, new gradientObject(cola(c_white)) ); inputs[| 15] = nodeValue("Alpha over copy", self, JUNCTION_CONNECT.input, VALUE_TYPE.curve, CURVE_DEF_11 ); @@ -74,11 +74,13 @@ function Node_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) constructor inputs[| 26] = nodeValue("Stack", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0, "Place each copy next to each other, taking surface dimension into account.") .setDisplay(VALUE_DISPLAY.enum_button, [ "None", "X", "Y" ]); - inputs[| 27] = nodeValue("Animator blend", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white); + inputs[| 27] = nodeValue("Animator blend", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, cola(c_white)); inputs[| 28] = nodeValue("Animator alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) .setDisplay(VALUE_DISPLAY.slider); - + + inputs[| 29] = nodeValue("Animator", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false) + outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); input_display_list = [ @@ -86,8 +88,8 @@ function Node_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) constructor ["Pattern", false], 3, 9, 2, 18, 7, 8, ["Path", true], 11, 12, 13, ["Transform", false], 4, 26, 19, 5, 6, 10, - ["Render", false], 14, 15, - ["Animator", true], 20, 21, 25, 22, 23, 24, 27, 28, + ["Render", false], 14, + ["Animator", true, 29], 20, 21, 25, 22, 23, 24, 27, ]; attribute_surface_depth(); @@ -144,7 +146,7 @@ function Node_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var _prsh = getInputData(13); var _grad = getInputData(14); - var _alph = getInputData(15); + //var _alph = getInputData(15); var _arr = getInputData(16); var _sed = getInputData(17); @@ -152,6 +154,8 @@ function Node_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var _col = getInputData(18); var _cls = getInputData(19); + var _an_use = getInputData(29); + var _an_mid = getInputData(20); var _an_ran = getInputData(21); var _an_fal = getInputData(25); @@ -160,7 +164,7 @@ function Node_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var _an_sca = getInputData(24); var _an_bld = getInputData(27); - var _an_alp = getInputData(28); + var _an_alp = _color_get_alpha(_an_bld); var _surf, runx, runy, posx, posy, scax, scay, rot; @@ -206,7 +210,7 @@ function Node_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var _an_dist = abs(i - _an_mid * (_amo - 1)); var _inf = 0; - if(_an_dist < _an_ran * _amo) { + if(_an_use && _an_dist < _an_ran * _amo) { _inf = eval_curve_x(_an_fal, _an_dist / (_an_ran * _amo)); posx += _an_pos[0] * _inf; posy += _an_pos[1] * _inf; @@ -238,10 +242,13 @@ function Node_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var pos = point_rotate(-sw / 2, -sh / 2, 0, 0, rot); var cc = _grad.eval(i / (_amo - 1)); - var aa = eval_curve_x(_alph, i / (_amo - 1)); + var aa = _color_get_alpha(cc); - cc = merge_color(cc, colorMultiply(cc, _an_bld), _inf); - aa += _an_alp * _inf; + cc = colda(cc); + if(_an_use) { + cc = merge_color(cc, colorMultiply(cc, _an_bld), _inf); + aa += _an_alp * _inf; + } draw_surface_ext_safe(_surf, posx + pos[0], posy + pos[1], scax, scay, rot, cc, aa); diff --git a/scripts/node_seperate_shapes/node_seperate_shapes.gml b/scripts/node_seperate_shapes/node_seperate_shapes.gml index a9492271a..eb3822952 100644 --- a/scripts/node_seperate_shapes/node_seperate_shapes.gml +++ b/scripts/node_seperate_shapes/node_seperate_shapes.gml @@ -24,7 +24,7 @@ function Node_Seperate_Shape(_x, _y, _group = noone) : Node(_x, _y, _group) cons input_display_list = [ ["Shape", false], 0, 1, 4, - ["Render", false], 2, 3, + ["Override Color", true, 2], 3, ] attribute_surface_depth(); diff --git a/scripts/node_shadow/node_shadow.gml b/scripts/node_shadow/node_shadow.gml index 7cfa20422..b97abf294 100644 --- a/scripts/node_shadow/node_shadow.gml +++ b/scripts/node_shadow/node_shadow.gml @@ -1,11 +1,6 @@ function Node_Shadow(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { name = "Shadow"; - shader = sh_outline_only; - uniform_dim = shader_get_uniform(shader, "dimension"); - uniform_size = shader_get_uniform(shader, "borderSize"); - uniform_colr = shader_get_uniform(shader, "borderColor"); - inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); inputs[| 1] = nodeValue("Color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_black); @@ -68,23 +63,18 @@ function Node_Shadow(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co var pass1 = surface_create_valid(surface_get_width_safe(_outSurf), surface_get_height_safe(_outSurf), attrDepth()); - surface_set_target(pass1); - DRAW_CLEAR - BLEND_OVERRIDE; - shader_set(shader); - shader_set_uniform_f_array_safe(uniform_dim, [ surface_get_width_safe(_outSurf), surface_get_height_safe(_outSurf) ]); - shader_set_uniform_f(uniform_size, _border); - shader_set_uniform_f_array_safe(uniform_colr, [1., 1., 1., 1.0]); + surface_set_shader(pass1, sh_outline_only); + shader_set_f("dimension", [ surface_get_width_safe(_outSurf), surface_get_height_safe(_outSurf) ]); + shader_set_f("borderSize", _border); + shader_set_f("borderColor", [1., 1., 1., 1.0]); - draw_surface_safe(_data[0], _shf[0], _shf[1]); - shader_reset(); - BLEND_NORMAL; - surface_reset_target(); + draw_surface_safe(_data[0], _shf[0], _shf[1]); + surface_reset_shader(); surface_set_target(_outSurf); DRAW_CLEAR BLEND_OVERRIDE; - draw_surface_ext_safe(surface_apply_gaussian(pass1, _size, false, cl), 0, 0, 1, 1, 0, cl, _stre); + draw_surface_ext_safe(surface_apply_gaussian(pass1, _size, false, cl), 0, 0, 1, 1, 0, cl, _stre * _color_get_alpha(cl)); BLEND_NORMAL; draw_surface_safe(_data[0], 0, 0); surface_reset_target(); diff --git a/scripts/node_simple_shape/node_simple_shape.gml b/scripts/node_simple_shape/node_simple_shape.gml index a017e8e4e..7a80d87bb 100644 --- a/scripts/node_simple_shape/node_simple_shape.gml +++ b/scripts/node_simple_shape/node_simple_shape.gml @@ -65,7 +65,8 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con ["Output", false], 0, 6, ["Transform", false], 15, 3, 16, 17, ["Shape", false], 14, 2, 9, 4, 13, 5, 7, 8, - ["Render", true], 10, 1, 11, 12, 18 + ["Render", true], 10, 12, 18, + ["Background", true, 1], 11, ]; temp_surface = [ noone ]; @@ -295,7 +296,7 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con shader_set_f("center", _center); shader_set_f("scale", _scale ); - draw_sprite_stretched_ext(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1], _color, 1); + draw_sprite_stretched_ext(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1], _color, _color_get_alpha(_color)); surface_reset_shader(); return _outSurf; diff --git a/scripts/node_solid/node_solid.gml b/scripts/node_solid/node_solid.gml index 803c73235..4aa2a7501 100644 --- a/scripts/node_solid/node_solid.gml +++ b/scripts/node_solid/node_solid.gml @@ -4,7 +4,7 @@ function Node_Solid(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF ) .setDisplay(VALUE_DISPLAY.vector); - inputs[| 1] = nodeValue("Color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white); + inputs[| 1] = nodeValue("Color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, cola(c_white)); inputs[| 2] = nodeValue("Empty", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); @@ -44,7 +44,7 @@ function Node_Solid(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con if(_maskUse) { surface_set_shader(_outSurf, sh_solid); - draw_surface_stretched_ext(_msk, 0, 0, _dim[0], _dim[1], _col, 1); + draw_surface_stretched_ext(_msk, 0, 0, _dim[0], _dim[1], _col, _color_get_alpha(_col)); surface_reset_shader(); return _outSurf; diff --git a/scripts/node_sprite_stack/node_sprite_stack.gml b/scripts/node_sprite_stack/node_sprite_stack.gml index 19d91e358..d19ef341f 100644 --- a/scripts/node_sprite_stack/node_sprite_stack.gml +++ b/scripts/node_sprite_stack/node_sprite_stack.gml @@ -42,7 +42,7 @@ function Node_Sprite_Stack(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro input_display_list = [ ["Surface", false], 0, 1, 12, ["Stack", false], 2, 3, 8, 4, 5, - ["Render", false], 6, 7, 9, 10, 11, + ["Render", false], 6, 7, 9, 10, ]; attribute_surface_depth(); @@ -206,7 +206,7 @@ function Node_Sprite_Stack(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro var _hig = _data[ 9]; var _hiC = _data[10]; - var _hiA = _data[11]; + //var _hiA = _data[11]; var _arr = _data[12]; _pos = [ _pos[0], _pos[1] ]; @@ -238,10 +238,10 @@ function Node_Sprite_Stack(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro shader_set_f("dimension", _ww, _hh); shader_set_f("shift", _shf[0] / _ww, _shf[1] / _hh); shader_set_f("angle", degtorad(_rot)); - draw_surface_ext_safe(_in, _po[0] + _pos[0], _po[1] + _pos[1], 1, 1, _rot, _hiC, _hiA); + draw_surface_ext_safe(_in, _po[0] + _pos[0], _po[1] + _pos[1], 1, 1, _rot, _hiC, _color_get_alpha(_hiC)); shader_reset(); } else - draw_surface_ext_safe(_in, _po[0] + _pos[0], _po[1] + _pos[1], 1, 1, _rot, _col, aa); + draw_surface_ext_safe(_in, _po[0] + _pos[0], _po[1] + _pos[1], 1, 1, _rot, _col, _color_get_alpha(_col) * aa); _pos[0] -= _shf[0]; _pos[1] -= _shf[1]; @@ -259,7 +259,7 @@ function Node_Sprite_Stack(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro var _hh = surface_get_height_safe(_surf); var _po = point_rotate(0, 0, _ww / 2, _hh / 2, _rot); - draw_surface_ext_safe(_surf, _po[0] + _pos[0], _po[1] + _pos[1], 1, 1, _rot, _col, 1); + draw_surface_ext_safe(_surf, _po[0] + _pos[0], _po[1] + _pos[1], 1, 1, _rot, _col, _color_get_alpha(_col)); _pos[0] += _shf[0]; _pos[1] += _shf[1]; } diff --git a/scripts/node_stripe/node_stripe.gml b/scripts/node_stripe/node_stripe.gml index b711df937..4b69d2b1e 100644 --- a/scripts/node_stripe/node_stripe.gml +++ b/scripts/node_stripe/node_stripe.gml @@ -98,8 +98,8 @@ function Node_Stripe(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co shader_set_f_map("randomAmount", _data[ 5], _data[13], inputs[| 5]); shader_set_f_map("ratio", _data[10], _data[14], inputs[| 10]); - shader_set_f("color0", colToVec4(_clr0)); - shader_set_f("color1", colToVec4(_clr1)); + shader_set_color("color0", _clr0); + shader_set_color("color1", _clr1); shader_set_i("gradient_use", _grad_use); _gra.shader_submit(); diff --git a/scripts/node_surface_from_color/node_surface_from_color.gml b/scripts/node_surface_from_color/node_surface_from_color.gml index 6a81c89d9..2ed26fc69 100644 --- a/scripts/node_surface_from_color/node_surface_from_color.gml +++ b/scripts/node_surface_from_color/node_surface_from_color.gml @@ -16,8 +16,11 @@ function Node_Surface_From_Color(_x, _y, _group = noone) : Node_Processor(_x, _y _outSurf = surface_verify(_outSurf, w, 1); surface_set_target(_outSurf); - for( var i = 0, n = array_length(_col); i < n; i++ ) + for( var i = 0, n = array_length(_col); i < n; i++ ) { + draw_set_alpha(_color_get_alpha(_col[i])); draw_point_color(i, 0, _col[i]); + } + draw_set_alpha(1); surface_reset_target(); return _outSurf; diff --git a/scripts/node_text/node_text.gml b/scripts/node_text/node_text.gml index 615d3f593..2b89a329d 100644 --- a/scripts/node_text/node_text.gml +++ b/scripts/node_text/node_text.gml @@ -64,7 +64,8 @@ function Node_Text(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons ["Output", true], 9, 6, 10, ["Text", false], 0, 13, 14, 7, 8, ["Font", false], 1, 2, 15, 3, 11, 12, - ["Rendering", false], 5, 16, 17, + ["Rendering", false], 5, + ["Background", true, 16], 17, ["Wave", true, 18], 22, 19, 20, 21, ]; @@ -75,7 +76,7 @@ function Node_Text(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons _font_current = ""; _size_current = 0; _aa_current = false; - seed = irandom_range(10000, 99999); + seed = seed_random(); static generateFont = function(_path, _size, _aa) { #region if(PROJECT.animator.is_playing) return; @@ -97,7 +98,6 @@ function Node_Text(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons static step = function() { #region var _dimt = getSingleValue(9); var _path = getSingleValue(13); - var _ubg = getSingleValue(16); var _use_path = _path != noone && struct_has(_path, "getPointDistance"); @@ -107,7 +107,6 @@ function Node_Text(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons inputs[| 9].setVisible(!_use_path); inputs[| 14].setVisible( _use_path); inputs[| 15].setVisible(_dimt == 0 && !_use_path); - inputs[| 17].setVisible(_ubg); } #endregion static waveGet = function(_ind) { #region diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index dbecf887a..9159f116d 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -610,6 +610,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru node.inputs_data[index] = _value; node.input_value_map[$ internalName] = _value; + #endregion #region ---- draw ---- diff --git a/scripts/panel_inspector/panel_inspector.gml b/scripts/panel_inspector/panel_inspector.gml index 0bf0b94b1..c1f8b3aa2 100644 --- a/scripts/panel_inspector/panel_inspector.gml +++ b/scripts/panel_inspector/panel_inspector.gml @@ -468,8 +468,9 @@ function Panel_Inspector() : PanelContent() constructor { } #endregion var color_picker_selecting = noone; - var color_picker_index = 0; + var color_picker_index = 0; var pickers = []; + var _colsp = false; for(var i = 0; i < amo; i++) { var yy = hh + _y; @@ -490,6 +491,10 @@ function Panel_Inspector() : PanelContent() constructor { continue; } if(is_array(jun_disp)) { // LABEL + var pad = i && _colsp == false? ui(4) : 0 + _colsp = false; + yy += pad; + var txt = __txt(jun_disp[0]); var coll = jun_disp[1] && filter_text == ""; var lbh = lineBreak? ui(32) : ui(26); @@ -537,9 +542,10 @@ function Panel_Inspector() : PanelContent() constructor { draw_text_add(ltx, yy + lbh / 2, txt); draw_set_alpha(1); - hh += lbh + ui(lineBreak? 8 : 6); + hh += lbh + ui(lineBreak? 8 : 6) + pad; if(coll) { // skip + _colsp = true; var j = i + 1; var _len = array_length(_inspecting.input_display_list); diff --git a/scripts/random_function/random_function.gml b/scripts/random_function/random_function.gml index 21881d6f6..96a8a2bd8 100644 --- a/scripts/random_function/random_function.gml +++ b/scripts/random_function/random_function.gml @@ -26,6 +26,10 @@ function irandom_range_seed(from, to, seed) { #region return irandom_range(from, to); } #endregion +function seed_random(digits = 6) { #region + return irandom_range(power(10, digits - 1), power(10, digits) - 1); +} #endregion + function random_seed(val, seed) { #region random_set_seed(floor(seed)); var _s0 = random(val); diff --git a/scripts/slider/slider.gml b/scripts/slider/slider.gml index 6f04f458f..98ac62319 100644 --- a/scripts/slider/slider.gml +++ b/scripts/slider/slider.gml @@ -28,6 +28,7 @@ function slider(_min, _max, _step, _onModify = noone, _onRelease = noone) : widg handle_w = ui(20); tb_value = new textBox(TEXTBOX_INPUT.number, onApply); + font = noone; static modifyValue = function(value) { #region value = clamp(value, curr_minn, curr_maxx); @@ -39,7 +40,7 @@ function slider(_min, _max, _step, _onModify = noone, _onRelease = noone) : widg } #endregion static setInteract = function(interactable = noone) { #region - self.interactable = interactable; + self.interactable = interactable; tb_value.interactable = interactable; } #endregion @@ -89,6 +90,7 @@ function slider(_min, _max, _step, _onModify = noone, _onRelease = noone) : widg if(tb_w > 0) { sw = _w - (tb_w + ui(16)); + tb_value.font = font; tb_value.setFocusHover(active, hover); tb_value.draw(_x + sw + ui(16), _y, tb_w, _h, current_value, _m); tb_value.setRange(curr_minn, curr_maxx); @@ -106,7 +108,7 @@ function slider(_min, _max, _step, _onModify = noone, _onRelease = noone) : widg var _pg = clamp((current_value - curr_minn) / (curr_maxx - curr_minn), 0, 1) * sw; var _kx = _x + _pg; - draw_sprite_stretched_ext(spr, 1, _kx - handle_w / 2, _y, handle_w, _h, blend, 1); + draw_sprite_stretched_ext(spr, 1, _kx - handle_w / 2, _y, handle_w, _h, blend, interactable * 0.75 + 0.25); if(dragging) { draw_sprite_stretched_ext(spr, 3, _kx - handle_w / 2, _y, handle_w, _h, COLORS._main_accent, 1); diff --git a/scripts/string_hexadecimal/string_hexadecimal.gml b/scripts/string_hexadecimal/string_hexadecimal.gml index e5cfdd825..481e4a943 100644 --- a/scripts/string_hexadecimal/string_hexadecimal.gml +++ b/scripts/string_hexadecimal/string_hexadecimal.gml @@ -32,15 +32,14 @@ function number_to_hex(val) { return ss; } -function color_get_hex(color, alpha = false) { +function color_get_hex(color) { var arr = is_array(color) && array_length(color) == 4; var r = arr? round(color[0] * 256) : color_get_red(color); var g = arr? round(color[1] * 256) : color_get_green(color); var b = arr? round(color[2] * 256) : color_get_blue(color); var a = arr? round(color[3] * 256) : color_get_alpha(color); - var hex = number_to_hex(r) + number_to_hex(g) + number_to_hex(b) + (alpha? " " + number_to_hex(a) : ""); - return hex; + return number_to_hex(r) + number_to_hex(g) + number_to_hex(b) + (is_int64(color)? number_to_hex(a) : ""); } function color_from_rgb(str) { diff --git a/shaders/sh_blur_gaussian/sh_blur_gaussian.fsh b/shaders/sh_blur_gaussian/sh_blur_gaussian.fsh index 32bcfbc6b..8d744af70 100644 --- a/shaders/sh_blur_gaussian/sh_blur_gaussian.fsh +++ b/shaders/sh_blur_gaussian/sh_blur_gaussian.fsh @@ -61,7 +61,9 @@ void main() { result.a = wgh; gl_FragColor = result; - if(overrideColor == 1) + if(overrideColor == 1) { gl_FragColor.rgb = overColor.rgb; + gl_FragColor.a *= overColor.a; + } } diff --git a/shaders/sh_blur_simple/sh_blur_simple.fsh b/shaders/sh_blur_simple/sh_blur_simple.fsh index 3dd71c511..0f265febc 100644 --- a/shaders/sh_blur_simple/sh_blur_simple.fsh +++ b/shaders/sh_blur_simple/sh_blur_simple.fsh @@ -67,6 +67,8 @@ void main() { clr /= totalWeight; gl_FragColor = clr; - if(overrideColor == 1) + if(overrideColor == 1) { gl_FragColor.rgb = overColor.rgb; + gl_FragColor.a *= overColor.a; + } } diff --git a/shaders/sh_checkerboard/sh_checkerboard.fsh b/shaders/sh_checkerboard/sh_checkerboard.fsh index 836b78f9d..0828eda71 100644 --- a/shaders/sh_checkerboard/sh_checkerboard.fsh +++ b/shaders/sh_checkerboard/sh_checkerboard.fsh @@ -41,7 +41,7 @@ void main() { float _a = 1. / amo; if(mod(floor(_x / _a) + floor(_y / _a), 2.) > 0.5) - gl_FragColor = vec4(col1.rgb, 1.); + gl_FragColor = col1; else - gl_FragColor = vec4(col2.rgb, 1.); + gl_FragColor = col2; } diff --git a/shaders/sh_colours_replace/sh_colours_replace.fsh b/shaders/sh_colours_replace/sh_colours_replace.fsh index d933ffcc1..3a9cb99f1 100644 --- a/shaders/sh_colours_replace/sh_colours_replace.fsh +++ b/shaders/sh_colours_replace/sh_colours_replace.fsh @@ -27,5 +27,5 @@ void main() { } } - gl_FragColor = vec4(colorTo[index].rgb, p.a); + gl_FragColor = vec4(colorTo[index].rgb, p.a * colorTo[index].a); } diff --git a/shaders/sh_gradient_display/sh_gradient_display.fsh b/shaders/sh_gradient_display/sh_gradient_display.fsh index 9939dd0e0..5bff77832 100644 --- a/shaders/sh_gradient_display/sh_gradient_display.fsh +++ b/shaders/sh_gradient_display/sh_gradient_display.fsh @@ -46,7 +46,7 @@ vec3 hsvMix(vec3 c1, vec3 c2, float t) { return hsv2rgb(h); } -vec3 gradientEval(in float prog) { +vec4 gradientEval(in float prog) { vec4 col = vec4(0.); for(int i = 0; i < GRADIENT_LIMIT; i++) { @@ -63,18 +63,21 @@ vec3 gradientEval(in float prog) { else if(gradient_blend == 1) col = gradient_color[i - 1]; else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), 1.); + col = vec4( + hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), + mix(gradient_color[i - 1].a, gradient_color[i].a, t) + ); } break; } if(i >= gradient_keys - 1) - return gradient_color[gradient_keys - 1].rgb; + return gradient_color[gradient_keys - 1]; } - return col.rgb; + return col; } void main() { - gl_FragColor = vec4(gradientEval(v_vTexcoord.x), v_vColour.a); + gl_FragColor = gradientEval(v_vTexcoord.x); } diff --git a/shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.fsh b/shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.fsh new file mode 100644 index 000000000..202ad5bc4 --- /dev/null +++ b/shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.fsh @@ -0,0 +1,84 @@ +// +// Simple passthrough fragment shader +// +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +#define TAU 6.283185307179586 +#define GRADIENT_LIMIT 128 + +uniform int gradient_blend; +uniform vec4 gradient_color[GRADIENT_LIMIT]; +uniform float gradient_time[GRADIENT_LIMIT]; +uniform int gradient_keys; + +vec3 rgb2hsv(vec3 c) { #region + vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); + vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); + + float d = q.x - min(q.w, q.y); + float e = 0.0000000001; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} #endregion + +vec3 hsv2rgb(vec3 c) { #region + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} #endregion + +float hueDist(float a0, float a1, float t) { #region + float da = fract(a1 - a0); + float ds = fract(2. * da) - da; + return a0 + ds * t; +} #endregion + +vec3 hsvMix(vec3 c1, vec3 c2, float t) { #region + vec3 h1 = rgb2hsv(c1); + vec3 h2 = rgb2hsv(c2); + + vec3 h = vec3(0.); + h.x = h.x + hueDist(h1.x, h2.x, t); + h.y = mix(h1.y, h2.y, t); + h.z = mix(h1.z, h2.z, t); + + return hsv2rgb(h); +} #endregion + +vec4 gradientEval(in float prog) { #region + vec4 col = vec4(0.); + + for(int i = 0; i < GRADIENT_LIMIT; i++) { + if(gradient_time[i] == prog) { + col = gradient_color[i]; + break; + } else if(gradient_time[i] > prog) { + if(i == 0) + col = gradient_color[i]; + else { + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + if(gradient_blend == 0) + col = mix(gradient_color[i - 1], gradient_color[i], t); + else if(gradient_blend == 1) + col = gradient_color[i - 1]; + else if(gradient_blend == 2) + col = vec4( + hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), + mix(gradient_color[i - 1].a, gradient_color[i].a, t) + ); + } + break; + } + + if(i >= gradient_keys - 1) + return gradient_color[gradient_keys - 1]; + } + + return col; +} #endregion + +void main() { + float a = gradientEval(v_vTexcoord.x).a; + gl_FragColor = vec4(a, a, a, 1.); +} diff --git a/shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.vsh b/shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.vsh new file mode 100644 index 000000000..3900c20f4 --- /dev/null +++ b/shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.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_gradient_display_alpha/sh_gradient_display_alpha.yy b/shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.yy new file mode 100644 index 000000000..344b6726c --- /dev/null +++ b/shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.yy @@ -0,0 +1,10 @@ +{ + "resourceType": "GMShader", + "resourceVersion": "1.0", + "name": "sh_gradient_display_alpha", + "parent": { + "name": "generator", + "path": "folders/shader/generator.yy", + }, + "type": 1, +} \ No newline at end of file diff --git a/shaders/sh_grey_alpha/sh_grey_alpha.fsh b/shaders/sh_grey_alpha/sh_grey_alpha.fsh index 2ca183125..fc535816d 100644 --- a/shaders/sh_grey_alpha/sh_grey_alpha.fsh +++ b/shaders/sh_grey_alpha/sh_grey_alpha.fsh @@ -1,6 +1,3 @@ -// -// Simple passthrough fragment shader -// varying vec2 v_vTexcoord; varying vec4 v_vColour; @@ -14,5 +11,5 @@ float bright(in vec4 col) { void main() { vec4 col = texture2D( gm_BaseTexture, v_vTexcoord ); if(replace == 0) gl_FragColor = vec4(col.rgb, bright(col)); - else gl_FragColor = vec4(color.rgb, bright(col)); + else gl_FragColor = vec4(color.rgb, bright(col) * color.a); } diff --git a/shaders/sh_grid/sh_grid.fsh b/shaders/sh_grid/sh_grid.fsh index 06f89c39a..947a0bfd6 100644 --- a/shaders/sh_grid/sh_grid.fsh +++ b/shaders/sh_grid/sh_grid.fsh @@ -89,7 +89,10 @@ vec4 gradientEval(in float prog) { #region else if(gradient_blend == 1) col = gradient_color[i - 1]; else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), 1.); + col = vec4( + hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), + mix(gradient_color[i - 1].a, gradient_color[i].a, t) + ); } break; } @@ -164,7 +167,7 @@ void main() { #region } if(mode == 0) { - colr = vec4(gradientEval(random(sqSt)).rgb, 1.); + colr = gradientEval(random(sqSt)); } else if(mode == 2) { vec2 uv = fract(_pos * sca); colr = texture2D( gm_BaseTexture, uv ); diff --git a/shaders/sh_grid_hex/sh_grid_hex.fsh b/shaders/sh_grid_hex/sh_grid_hex.fsh index 5c4376bec..3c196b952 100644 --- a/shaders/sh_grid_hex/sh_grid_hex.fsh +++ b/shaders/sh_grid_hex/sh_grid_hex.fsh @@ -163,7 +163,7 @@ void main() { #region float tileY = floor(sca.y * 4. / 3.); uv.y = mod(floor(uv.y * (tileY + 1.)), tileY) / tileY; - colr = vec4(gradientEval(random(uv)).rgb, 1.); + colr = gradientEval(random(uv)); } else if(mode == 2) { vec2 uv = hc.xy; uv.x = (uv.x + PI / 2.) / PI; diff --git a/shaders/sh_grid_tri/sh_grid_tri.fsh b/shaders/sh_grid_tri/sh_grid_tri.fsh index cbf6b7233..bb26938a2 100644 --- a/shaders/sh_grid_tri/sh_grid_tri.fsh +++ b/shaders/sh_grid_tri/sh_grid_tri.fsh @@ -154,7 +154,7 @@ void main() { #region if(mode == 0) { vec2 uv = fract(tri.xy / sca); - colr = vec4(gradientEval(random(uv)).rgb, 1.); + colr = gradientEval(random(uv)); } else if(mode == 2) { vec2 uv = fract((_pos * vec2(1., c30) - tri.xy) + vec2(0.5, 0.)); colr = texture2D( gm_BaseTexture, uv ); diff --git a/shaders/sh_normal_light/sh_normal_light.fsh b/shaders/sh_normal_light/sh_normal_light.fsh index 15063ab50..a634ac7ff 100644 --- a/shaders/sh_normal_light/sh_normal_light.fsh +++ b/shaders/sh_normal_light/sh_normal_light.fsh @@ -15,7 +15,7 @@ uniform float normalHeight; uniform vec3 ambiance; uniform int lightType; uniform vec4 lightPosition; -uniform vec3 lightColor; +uniform vec4 lightColor; uniform float lightIntensity; void main() { @@ -39,7 +39,7 @@ void main() { } float d = max(dot(normal, lightDir), 0.0); - vec3 diffuse = d * lightColor * base_color.rgb * attenuation; + vec3 diffuse = d * lightColor.rgb * lightColor.a * base_color.rgb * attenuation; result += diffuse; result.r = min(result.r, base_color.r); result.g = min(result.g, base_color.g); diff --git a/shaders/sh_outline/sh_outline.fsh b/shaders/sh_outline/sh_outline.fsh index 48e8e24dd..b4534d104 100644 --- a/shaders/sh_outline/sh_outline.fsh +++ b/shaders/sh_outline/sh_outline.fsh @@ -162,25 +162,21 @@ void main() { #region } else { float alpha = point.a + outline_alpha * (1. - point.a); col = ((point * point.a) + (borderColor * outline_alpha * (1. - point.a))) / alpha; - if(is_aa == 1) - col.a = alpha; - else - col.a = 1.; + if(is_aa == 1) col.a = borderColor.a * alpha; + else col.a = borderColor.a; } } else { vec4 bcol; - if(side == 0) - bcol = point; - else if(side == 1) - bcol = closetColor; + if(side == 0) bcol = point; + else if(side == 1) bcol = closetColor; float blend = bld * outline_alpha; if(is_aa == 0) blend = bld; float alpha = bcol.a + blend * (1. - bcol.a); - col = (borderColor * blend + bcol * bcol.a * ( 1. - blend )) / alpha; - col.a = alpha; + col = (borderColor * blend + bcol * bcol.a * ( 1. - blend )) / alpha; + col.a = borderColor.a * alpha; } gl_FragColor = col; diff --git a/shaders/sh_palette_replace/sh_palette_replace.fsh b/shaders/sh_palette_replace/sh_palette_replace.fsh index 9b7f6e6a7..270e9b2f4 100644 --- a/shaders/sh_palette_replace/sh_palette_replace.fsh +++ b/shaders/sh_palette_replace/sh_palette_replace.fsh @@ -17,7 +17,7 @@ uniform int alphacmp; uniform int hardReplace; uniform float treshold; -vec3 rgb2xyz( vec3 c ) { +vec3 rgb2xyz( vec3 c ) { #region vec3 tmp; tmp.x = ( c.r > 0.04045 ) ? pow( ( c.r + 0.055 ) / 1.055, 2.4 ) : c.r / 12.92; tmp.y = ( c.g > 0.04045 ) ? pow( ( c.g + 0.055 ) / 1.055, 2.4 ) : c.g / 12.92, @@ -26,23 +26,23 @@ vec3 rgb2xyz( vec3 c ) { mat3( 0.4124, 0.3576, 0.1805, 0.2126, 0.7152, 0.0722, 0.0193, 0.1192, 0.9505 ); -} +} #endregion -vec3 xyz2lab( vec3 c ) { +vec3 xyz2lab( vec3 c ) { #region vec3 n = c / vec3( 95.047, 100, 108.883 ); vec3 v; v.x = ( n.x > 0.008856 ) ? pow( n.x, 1.0 / 3.0 ) : ( 7.787 * n.x ) + ( 16.0 / 116.0 ); v.y = ( n.y > 0.008856 ) ? pow( n.y, 1.0 / 3.0 ) : ( 7.787 * n.y ) + ( 16.0 / 116.0 ); v.z = ( n.z > 0.008856 ) ? pow( n.z, 1.0 / 3.0 ) : ( 7.787 * n.z ) + ( 16.0 / 116.0 ); return vec3(( 116.0 * v.y ) - 16.0, 500.0 * ( v.x - v.y ), 200.0 * ( v.y - v.z )); -} +} #endregion -vec3 rgb2lab(vec3 c) { +vec3 rgb2lab(vec3 c) { #region vec3 lab = xyz2lab( rgb2xyz( c ) ); return vec3( lab.x / 100.0, 0.5 + 0.5 * ( lab.y / 127.0 ), 0.5 + 0.5 * ( lab.z / 127.0 )); -} +} #endregion -vec3 rgb2hsv(vec3 c) { +vec3 rgb2hsv(vec3 c) { #region vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); @@ -50,17 +50,15 @@ vec3 rgb2hsv(vec3 c) { float d = q.x - min(q.w, q.y); float e = 0.0000000001; return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); - } + } #endregion -vec3 hsv2rgb(vec3 c) { +vec3 hsv2rgb(vec3 c) { #region vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); -} +} #endregion -float round(float val) { - return fract(val) >= 0.5? ceil(val) : floor(val); -} +float round(float val) { return fract(val) >= 0.5? ceil(val) : floor(val); } void main() { vec4 col = texture2D( gm_BaseTexture, v_vTexcoord ); diff --git a/shaders/sh_solid/sh_solid.fsh b/shaders/sh_solid/sh_solid.fsh index f115c56ba..153525195 100644 --- a/shaders/sh_solid/sh_solid.fsh +++ b/shaders/sh_solid/sh_solid.fsh @@ -5,5 +5,5 @@ varying vec2 v_vTexcoord; varying vec4 v_vColour; void main() { - gl_FragColor = vec4(v_vColour.rgb, texture2D( gm_BaseTexture, v_vTexcoord ).a); + gl_FragColor = vec4(v_vColour.rgb, texture2D( gm_BaseTexture, v_vTexcoord ).a * v_vColour.a); } diff --git a/shaders/sh_stripe/sh_stripe.fsh b/shaders/sh_stripe/sh_stripe.fsh index 30818b91e..6cc8ea194 100644 --- a/shaders/sh_stripe/sh_stripe.fsh +++ b/shaders/sh_stripe/sh_stripe.fsh @@ -144,7 +144,7 @@ void main() { #region if(blend == 0) gl_FragColor = _s > rat? color0 : color1; else gl_FragColor = vec4(vec3(sin(_s * 2. * PI) * 0.5 + 0.5), 1.); } else { - if(_s > rat) gl_FragColor = vec4(gradientEval(random(vec2(slot))).rgb, 1.); - else gl_FragColor = vec4(gradientEval(random(vec2(slot + 1.))).rgb, 1.); + if(_s > rat) gl_FragColor = gradientEval(random(vec2(slot))); + else gl_FragColor = gradientEval(random(vec2(slot + 1.))); } } #endregion diff --git a/shaders/sh_zigzag/sh_zigzag.fsh b/shaders/sh_zigzag/sh_zigzag.fsh index d42f62331..73a501690 100644 --- a/shaders/sh_zigzag/sh_zigzag.fsh +++ b/shaders/sh_zigzag/sh_zigzag.fsh @@ -37,14 +37,14 @@ void main() { if(blend == 0) { if(mod(_yind, 2.) == 1.) { - if(_x > _y) gl_FragColor = vec4(col1.rgb, 1.); - else gl_FragColor = vec4(col2.rgb, 1.); + if(_x > _y) gl_FragColor = col1; + else gl_FragColor = col2; } else { - if(_x > _y) gl_FragColor = vec4(col2.rgb, 1.); - else gl_FragColor = vec4(col1.rgb, 1.); + if(_x > _y) gl_FragColor = col2; + else gl_FragColor = col1; } } else { - if(_x > _y) gl_FragColor = vec4(mix(col1.rgb, col2.rgb, _y + (1. - _x)), 1.); - else gl_FragColor = vec4(mix(col1.rgb, col2.rgb, _y - _x), 1.); + if(_x > _y) gl_FragColor = mix(col1, col2, _y + (1. - _x)); + else gl_FragColor = mix(col1, col2, _y - _x); } }