Mappable value 1

This commit is contained in:
Tanasart 2023-12-22 20:46:54 +07:00
parent cc27b0eecc
commit 9b273e86e6
23 changed files with 475 additions and 238 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View file

@ -482,9 +482,9 @@ event_inherited();
if(_hoverContent && point_in_rectangle(_m[0], _m[1], _nx, yy, _nx + grid_width, yy + grid_size)) { if(_hoverContent && point_in_rectangle(_m[0], _m[1], _nx, yy, _nx + grid_width, yy + grid_size)) {
draw_sprite_stretched_ext(THEME.node_active, 0, _boxx, yy, grid_size, grid_size, COLORS._main_accent, 1); draw_sprite_stretched_ext(THEME.node_active, 0, _boxx, yy, grid_size, grid_size, COLORS._main_accent, 1);
if(mouse_press(mb_left, sFOCUS)) if(mouse_release(mb_left, sFOCUS))
buildNode(_node); buildNode(_node);
else if(mouse_press(mb_right, sFOCUS)) else if(mouse_release(mb_right, sFOCUS))
rightClick(_node); rightClick(_node);
} }
@ -602,9 +602,9 @@ event_inherited();
} }
draw_sprite_stretched_ext(THEME.node_active, 0, ui(16), yy, list_width - ui(32), list_height, COLORS._main_accent, 1); draw_sprite_stretched_ext(THEME.node_active, 0, ui(16), yy, list_width - ui(32), list_height, COLORS._main_accent, 1);
if(mouse_press(mb_left, sFOCUS)) if(mouse_release(mb_left, sFOCUS))
buildNode(_node); buildNode(_node);
else if(mouse_press(mb_right, sFOCUS)) else if(mouse_release(mb_right, sFOCUS))
rightClick(_node); rightClick(_node);
} }
@ -813,9 +813,9 @@ event_inherited();
if(_hover && point_in_rectangle(_m[0], _m[1], _nx, yy, _nx + grid_width, yy + grid_size)) { if(_hover && point_in_rectangle(_m[0], _m[1], _nx, yy, _nx + grid_width, yy + grid_size)) {
node_selecting = i; node_selecting = i;
if(mouse_press(mb_left, sFOCUS)) if(mouse_release(mb_left, sFOCUS))
buildNode(_node, _param); buildNode(_node, _param);
else if(struct_has(_node, "node") && mouse_press(mb_right, sFOCUS)) else if(struct_has(_node, "node") && mouse_release(mb_right, sFOCUS))
rightClick(_node); rightClick(_node);
} }
@ -908,9 +908,9 @@ event_inherited();
} }
node_selecting = i; node_selecting = i;
if(mouse_press(mb_left, sFOCUS)) if(mouse_release(mb_left, sFOCUS))
buildNode(_node, _param); buildNode(_node, _param);
else if(struct_has(_node, "node") && mouse_press(mb_right, sFOCUS)) else if(struct_has(_node, "node") && mouse_release(mb_right, sFOCUS))
rightClick(_node); rightClick(_node);
} }

View file

@ -1,6 +1,4 @@
function button(_onClick, _icon = noone) { function button(_onClick, _icon = noone) { INLINE return new buttonClass(_onClick, _icon); }
return new buttonClass(_onClick, _icon);
}
function buttonClass(_onClick, _icon = noone) : widget() constructor { function buttonClass(_onClick, _icon = noone) : widget() constructor {
icon = _icon; icon = _icon;
@ -19,49 +17,49 @@ function buttonClass(_onClick, _icon = noone) : widget() constructor {
toggled = false; toggled = false;
static setLua = function(_lua_thread, _lua_key, _lua_func) { static setLua = function(_lua_thread, _lua_key, _lua_func) { #region
lua_thread = _lua_thread; lua_thread = _lua_thread;
lua_thread_key = _lua_key; lua_thread_key = _lua_key;
onClick = method(self, _lua_func); onClick = method(self, _lua_func);
} } #endregion
static trigger = function() { static trigger = function() { #region
clicked = true; clicked = true;
if(!is_callable(onClick)) if(!is_callable(onClick))
return noone; return noone;
triggered = true; triggered = true;
onClick(); onClick();
} } #endregion
static isTriggered = function() { static isTriggered = function() { #region
var t = triggered; var t = triggered;
triggered = false; triggered = false;
return t; return t;
} } #endregion
static setIcon = function(_icon, _index = 0, _blend = c_white) { static setIcon = function(_icon, _index = 0, _blend = c_white) { #region
icon = _icon; icon = _icon;
icon_index = _index; icon_index = _index;
icon_blend = _blend; icon_blend = _blend;
return self; return self;
} } #endregion
static setText = function(_text) { static setText = function(_text) { #region
text = _text; text = _text;
return self; return self;
} } #endregion
static setTooltip = function(_tip) { static setTooltip = function(_tip) { #region
tooltip = _tip; tooltip = _tip;
return self; return self;
} } #endregion
static drawParam = function(params) { static drawParam = function(params) { #region
return draw(params.x, params.y, params.w, params.h, params.m); return draw(params.x, params.y, params.w, params.h, params.m);
} } #endregion
static draw = function(_x, _y, _w, _h, _m, spr = THEME.button, blend = c_white) { static draw = function(_x, _y, _w, _h, _m, spr = THEME.button, blend = c_white) { #region
x = _x; x = _x;
y = _y; y = _y;
w = _w; w = _w;
@ -106,10 +104,10 @@ function buttonClass(_onClick, _icon = noone) : widget() constructor {
resetFocus(); resetFocus();
return _h; return _h;
} } #endregion
} }
function buttonInstant(spr, _x, _y, _w, _h, _m, _act, _hvr, _tip = "", _icon = noone, _icon_index = 0, _icon_blend = COLORS._main_icon, _icon_alpha = 1, _icon_scale = 1) { function buttonInstant(spr, _x, _y, _w, _h, _m, _act, _hvr, _tip = "", _icon = noone, _icon_index = 0, _icon_blend = COLORS._main_icon, _icon_alpha = 1, _icon_scale = 1) { #region
var res = 0; var res = 0;
var cc = is_array(_icon_blend)? _icon_blend[0] : _icon_blend; var cc = is_array(_icon_blend)? _icon_blend[0] : _icon_blend;
@ -138,4 +136,4 @@ function buttonInstant(spr, _x, _y, _w, _h, _m, _act, _hvr, _tip = "", _icon = n
draw_sprite_ui_uniform(_icon, _icon_index, _x + _w / 2, _y + _h / 2, _icon_scale, cc, _icon_alpha); draw_sprite_ui_uniform(_icon, _icon_index, _x + _w / 2, _y + _h / 2, _icon_scale, cc, _icon_alpha);
return res; return res;
} } #endregion

View file

@ -110,7 +110,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
lb_w += ui(24); lb_w += ui(24);
} #endregion } #endregion
if(!jun.active) { if(!jun.active) { #region
draw_set_text(_font, fa_left, fa_center, COLORS._main_text_sub_inner); draw_set_text(_font, fa_left, fa_center, COLORS._main_text_sub_inner);
draw_text_add(lb_x, lb_y - ui(2), _name); draw_text_add(lb_x, lb_y - ui(2), _name);
@ -126,7 +126,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
} }
return [ 0, true ]; return [ 0, true ];
} } #endregion
draw_text_add(lb_x, lb_y - ui(2), _name); draw_text_add(lb_x, lb_y - ui(2), _name);

View file

@ -1,17 +1,15 @@
function Node_BW(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { function Node_BW(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "BW"; name = "BW";
shader = sh_bw;
uniform_exp = shader_get_uniform(shader, "brightness");
uniform_con = shader_get_uniform(shader, "contrast");
inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0);
inputs[| 1] = nodeValue("Brightness", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) inputs[| 1] = nodeValue("Brightness", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
.setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01] }); .setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01] })
.setMappable(9);
inputs[| 2] = nodeValue("Contrast", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) inputs[| 2] = nodeValue("Contrast", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
.setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 4, 0.01] }); .setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 4, 0.01] })
.setMappable(10);
inputs[| 3] = nodeValue("Mask", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); inputs[| 3] = nodeValue("Mask", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0);
@ -26,9 +24,15 @@ function Node_BW(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constr
__init_mask_modifier(3); // inputs 7, 8 __init_mask_modifier(3); // inputs 7, 8
inputs[| 9] = nodeValue("Brightness map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone)
.setVisible(false, false);
inputs[| 10] = nodeValue("Contrast map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone)
.setVisible(false, false);
input_display_list = [ 5, 6, input_display_list = [ 5, 6,
["Surfaces", true], 0, 3, 4, 7, 8, ["Surfaces", true], 0, 3, 4, 7, 8,
["BW", false], 1, 2, ["BW", false], 1, 9, 2, 10,
] ]
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
@ -37,23 +41,18 @@ function Node_BW(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constr
static step = function() { #region static step = function() { #region
__step_mask_modifier(); __step_mask_modifier();
inputs[| 1].mappableStep();
inputs[| 2].mappableStep();
} #endregion } #endregion
static processData = function(_outSurf, _data, _output_index, _array_index) { #region static processData = function(_outSurf, _data, _output_index, _array_index) { #region
var _exp = _data[1];
var _con = _data[2];
surface_set_target(_outSurf);
DRAW_CLEAR
BLEND_OVERRIDE;
shader_set(shader); surface_set_shader(_outSurf, sh_bw);
shader_set_uniform_f(uniform_exp, _exp); shader_set_f_map("brightness", _data[1], _data[ 9], inputs[| 1]);
shader_set_uniform_f(uniform_con, _con); shader_set_f_map("contrast", _data[2], _data[10], inputs[| 2]);
draw_surface_safe(_data[0], 0, 0); draw_surface_safe(_data[0], 0, 0);
shader_reset(); surface_reset_shader();
BLEND_NORMAL;
surface_reset_target();
__process_mask_modifier(_data); __process_mask_modifier(_data);
_outSurf = mask_apply(_data[0], _outSurf, _data[3], _data[4]); _outSurf = mask_apply(_data[0], _outSurf, _data[3], _data[4]);

View file

@ -37,8 +37,12 @@ function Node_Cache(_x, _y, _group = noone) : __Node_Cache(_x, _y, _group) const
static update = function() { #region static update = function() { #region
if(recoverCache()) return; if(recoverCache()) return;
if(!inputs[| 0].value_from) return; if(!inputs[| 0].value_from) return;
if(!inputs[| 0].value_from.node.renderActive) return; if(!inputs[| 0].value_from.node.renderActive) {
enableNodeGroup();
return;
}
var _surf = getInputData(0); var _surf = getInputData(0);
cacheCurrentFrame(_surf); cacheCurrentFrame(_surf);

View file

@ -46,7 +46,11 @@ function Node_Cache_Array(_x, _y, _group = noone) : __Node_Cache(_x, _y, _group)
static update = function() { #region static update = function() { #region
if(!inputs[| 0].value_from) return; if(!inputs[| 0].value_from) return;
if(!inputs[| 0].value_from.node.renderActive) return; if(!inputs[| 0].value_from.node.renderActive) {
if(!cacheExist(CURRENT_FRAME))
enableNodeGroup();
return;
}
var ss = []; var ss = [];
var str = getInputData(1); var str = getInputData(1);

View file

@ -4,32 +4,40 @@ function Node_Color_adjust(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0);
inputs[| 1] = nodeValue("Brightness", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) inputs[| 1] = nodeValue("Brightness", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
.setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01 ] }); .setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01 ] })
.setMappable(18);
inputs[| 2] = nodeValue("Contrast", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.5) inputs[| 2] = nodeValue("Contrast", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.5)
.setDisplay(VALUE_DISPLAY.slider); .setDisplay(VALUE_DISPLAY.slider)
.setMappable(19);
inputs[| 3] = nodeValue("Hue", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) inputs[| 3] = nodeValue("Hue", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
.setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01 ] }); .setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01 ] })
.setMappable(20);
inputs[| 4] = nodeValue("Saturation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) inputs[| 4] = nodeValue("Saturation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
.setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01 ] }); .setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01 ] })
.setMappable(21);
inputs[| 5] = nodeValue("Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) inputs[| 5] = nodeValue("Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
.setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01 ] }); .setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01 ] })
.setMappable(22);
inputs[| 6] = nodeValue("Blend", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white); inputs[| 6] = nodeValue("Blend", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white);
inputs[| 7] = nodeValue("Blend amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) inputs[| 7] = nodeValue("Blend amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
.setDisplay(VALUE_DISPLAY.slider); .setDisplay(VALUE_DISPLAY.slider)
.setMappable(23);
inputs[| 8] = nodeValue("Mask", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); inputs[| 8] = nodeValue("Mask", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0);
inputs[| 9] = nodeValue("Alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) inputs[| 9] = nodeValue("Alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
.setDisplay(VALUE_DISPLAY.slider); .setDisplay(VALUE_DISPLAY.slider)
.setMappable(24);
inputs[| 10] = nodeValue("Exposure", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) inputs[| 10] = nodeValue("Exposure", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
.setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 4, 0.01 ] }); .setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 4, 0.01 ] })
.setMappable(25);
inputs[| 11] = nodeValue("Active", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true); inputs[| 11] = nodeValue("Active", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true);
active_index = 11; active_index = 11;
@ -52,19 +60,47 @@ function Node_Color_adjust(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
inputs[| 17] = nodeValue("Mask feather", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) inputs[| 17] = nodeValue("Mask feather", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
.setDisplay(VALUE_DISPLAY.slider, { range: [1, 16, 1] }); .setDisplay(VALUE_DISPLAY.slider, { range: [1, 16, 1] });
////////////////////////////////////////////////////////////////////////////////////////
inputs[| 18] = nodeValue("Brightness map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone)
.setVisible(false, false);
inputs[| 19] = nodeValue("Contrast map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone)
.setVisible(false, false);
inputs[| 20] = nodeValue("Hue map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone)
.setVisible(false, false);
inputs[| 21] = nodeValue("Saturation map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone)
.setVisible(false, false);
inputs[| 22] = nodeValue("Value map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone)
.setVisible(false, false);
inputs[| 23] = nodeValue("Blend map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone)
.setVisible(false, false);
inputs[| 24] = nodeValue("Alpha map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone)
.setVisible(false, false);
inputs[| 25] = nodeValue("Exposure map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone)
.setVisible(false, false);
////////////////////////////////////////////////////////////////////////////////////////
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
outputs[| 1] = nodeValue("Color out", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, []) outputs[| 1] = nodeValue("Color out", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, [])
.setDisplay(VALUE_DISPLAY.palette); .setDisplay(VALUE_DISPLAY.palette);
input_display_list = [11, 12, 15, 9, input_display_list = [11, 12, 15, 9, 24,
["Surface", false], 0, 8, 16, 17, 13, ["Surface", false], 0, 8, 16, 17, 13,
["Brightness", false], 1, 10, 2, ["Brightness", false], 1, 18, 10, 25, 2, 19,
["HSV", false], 3, 4, 5, ["HSV", false], 3, 20, 4, 21, 5, 22,
["Color blend", false], 6, 14, 7 ["Color blend", false], 6, 14, 7, 23,
]; ];
temp_surface = [ surface_create(1, 1) ]; temp_surface = [ surface_create(1, 1), surface_create(1, 1) ];
attribute_surface_depth(); attribute_surface_depth();
@ -83,6 +119,15 @@ function Node_Color_adjust(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
var _msk = is_surface(getSingleValue(8)); var _msk = is_surface(getSingleValue(8));
inputs[| 16].setVisible(_msk); inputs[| 16].setVisible(_msk);
inputs[| 17].setVisible(_msk); inputs[| 17].setVisible(_msk);
inputs[| 1].mappableStep();
inputs[| 2].mappableStep();
inputs[| 3].mappableStep();
inputs[| 4].mappableStep();
inputs[| 5].mappableStep();
inputs[| 7].mappableStep();
inputs[| 9].mappableStep();
inputs[| 10].mappableStep();
} #endregion } #endregion
static processData = function(_outSurf, _data, _output_index, _array_index) { #region static processData = function(_outSurf, _data, _output_index, _array_index) { #region
@ -113,7 +158,16 @@ function Node_Color_adjust(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
_col = array_clone(_col); _col = array_clone(_col);
if(_type == 1) { if(_type == 1) { #region color adjust
if(is_array(_bri)) _bri = array_safe_get(_bri, 0);
if(is_array(_con)) _con = array_safe_get(_con, 0);
if(is_array(_hue)) _hue = array_safe_get(_hue, 0);
if(is_array(_sat)) _sat = array_safe_get(_sat, 0);
if(is_array(_val)) _val = array_safe_get(_val, 0);
if(is_array(_bla)) _bla = array_safe_get(_bla, 0);
if(is_array(_alp)) _alp = array_safe_get(_alp, 0);
if(is_array(_exp)) _exp = array_safe_get(_exp, 0);
if(!is_array(_col)) _col = [ _col ]; if(!is_array(_col)) _col = [ _col ];
for( var i = 0, n = array_length(_col); i < n; i++ ) { for( var i = 0, n = array_length(_col); i < n; i++ ) {
@ -144,29 +198,62 @@ function Node_Color_adjust(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
} }
return _col; return _col;
} } #endregion
#region param
var sw = surface_get_width_safe(_baseSurf);
var sh = surface_get_height_safe(_baseSurf);
temp_surface[0] = surface_verify(temp_surface[0], sw * 2, sh * 2);
temp_surface[1] = surface_verify(temp_surface[1], sw * 2, sh * 2);
surface_set_target(temp_surface[0]);
DRAW_CLEAR
draw_surface_stretched_safe(_data[18], sw * 0, sh * 0, sw, sh); //Brightness
draw_surface_stretched_safe(_data[25], sw * 1, sh * 0, sw, sh); //Exposure
draw_surface_stretched_safe(_data[19], sw * 0, sh * 1, sw, sh); //Contrast
draw_surface_stretched_safe(_data[20], sw * 1, sh * 1, sw, sh); //Hue
surface_reset_target();
surface_set_target(temp_surface[1]);
DRAW_CLEAR
draw_surface_stretched_safe(_data[21], sw * 0, sh * 0, sw, sh); //Sat
draw_surface_stretched_safe(_data[22], sw * 1, sh * 0, sw, sh); //Val
draw_surface_stretched_safe(_data[23], sw * 0, sh * 1, sw, sh); //Blend
draw_surface_stretched_safe(_data[24], sw * 1, sh * 1, sw, sh); //Alpha
surface_reset_target();
#endregion
#region surface adjust
_m = mask_modify(_m, _mskInv, _mskFea); _m = mask_modify(_m, _mskInv, _mskFea);
surface_set_shader(_baseSurf, sh_color_adjust); surface_set_shader(_baseSurf, sh_color_adjust);
shader_set_f("brightness", _bri); shader_set_surface("param0", temp_surface[0]);
shader_set_f("exposure", _exp); shader_set_surface("param1", temp_surface[1]);
shader_set_f("contrast", _con);
shader_set_f("hue", _hue);
shader_set_f("sat", _sat);
shader_set_f("val", _val);
shader_set_color("blend", _bl, _bla); shader_set_f_map_s("brightness", _bri, _data[18], inputs[| 1]);
shader_set_f_map_s("exposure", _exp, _data[25], inputs[| 10]);
shader_set_f_map_s("contrast", _con, _data[19], inputs[| 2]);
shader_set_f_map_s("hue", _hue, _data[20], inputs[| 3]);
shader_set_f_map_s("sat", _sat, _data[21], inputs[| 4]);
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_i("blendMode", _blm); shader_set_i("blendMode", _blm);
shader_set_f_map_s("alpha", _alp, _data[24], inputs[| 9]);
shader_set_i("use_mask", is_surface(_m)); shader_set_i("use_mask", is_surface(_m));
shader_set_surface("mask", _m); shader_set_surface("mask", _m);
gpu_set_colorwriteenable(1, 1, 1, 0); gpu_set_colorwriteenable(1, 1, 1, 0);
draw_surface_safe(_surf, 0, 0); draw_surface_safe(_surf, 0, 0); //replace clear color with surface color
gpu_set_colorwriteenable(1, 1, 1, 1); gpu_set_colorwriteenable(1, 1, 1, 1);
draw_surface_ext_safe(_surf, 0, 0, 1, 1, 0, c_white, _alp);
draw_surface_ext_safe(_surf, 0, 0, 1, 1, 0, c_white, 1);
surface_reset_shader(); surface_reset_shader();
#endregion
return _outSurf; return _outSurf;
} #endregion } #endregion

View file

@ -10,13 +10,7 @@ function Node_Displace(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
.setUnitRef(function(index) { return getDimension(index); }); .setUnitRef(function(index) { return getDimension(index); });
inputs[| 3] = nodeValue("Strength", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) inputs[| 3] = nodeValue("Strength", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
.setDisplay(VALUE_DISPLAY._default, { side_button: button(function() { .setMappable(15);
var jun = inputs[| 15];
jun.visible = !jun.visible;
setHeight();
}).setIcon( THEME.value_use_surface, [ function() { return inputs[| 15].visible; } ], COLORS._main_icon )
.setTooltip("Use map") });
inputs[| 4] = nodeValue("Mid value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0., "Brightness value to be use as a basis for 'no displacement'.") inputs[| 4] = nodeValue("Mid value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0., "Brightness value to be use as a basis for 'no displacement'.")
.setDisplay(VALUE_DISPLAY.slider); .setDisplay(VALUE_DISPLAY.slider);
@ -67,19 +61,12 @@ If set, then strength value control how many times the effect applies on itself.
static step = function() { #region static step = function() { #region
__step_mask_modifier(); __step_mask_modifier();
inputs[| 2].setVisible(getInputData(5) == 0);
inputs[| 3].mappableStep();
} #endregion } #endregion
static processData = function(_outSurf, _data, _output_index, _array_index) { #region static processData = function(_outSurf, _data, _output_index, _array_index) { #region
switch(_data[5]) {
case 0 :
inputs[| 2].setVisible(true);
break;
case 1 :
case 2 :
inputs[| 2].setVisible(false);
break;
}
var ww = surface_get_width_safe(_data[0]); var ww = surface_get_width_safe(_data[0]);
var hh = surface_get_height_safe(_data[0]); var hh = surface_get_height_safe(_data[0]);
var mw = surface_get_width_safe(_data[1]); var mw = surface_get_width_safe(_data[1]);
@ -91,10 +78,7 @@ If set, then strength value control how many times the effect applies on itself.
shader_set_f("dimension", [ww, hh]); shader_set_f("dimension", [ww, hh]);
shader_set_f("map_dimension", [mw, mh]); shader_set_f("map_dimension", [mw, mh]);
shader_set_f("displace", _data[ 2]); shader_set_f("displace", _data[ 2]);
shader_set_f("strength", _data[ 3]); shader_set_f_map("strength", _data[ 3], _data[15], inputs[| 3].attributes.mapped);
shader_set_surface_i("strengthSurf", "strengthUseSurf", _data[15]);
shader_set_f("middle", _data[ 4]); shader_set_f("middle", _data[ 4]);
shader_set_i("use_rg", _data[ 5]); shader_set_i("use_rg", _data[ 5]);
shader_set_i("iterate", _data[ 6]); shader_set_i("iterate", _data[ 6]);

View file

@ -1,17 +1,15 @@
function Node_Greyscale(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { function Node_Greyscale(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "Greyscale"; name = "Greyscale";
shader = sh_greyscale;
uniform_exp = shader_get_uniform(shader, "brightness");
uniform_con = shader_get_uniform(shader, "contrast");
inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0);
inputs[| 1] = nodeValue("Brightness", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) inputs[| 1] = nodeValue("Brightness", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
.setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01] }); .setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01] })
.setMappable(9);
inputs[| 2] = nodeValue("Contrast", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) inputs[| 2] = nodeValue("Contrast", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
.setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 4, 0.01] }); .setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 4, 0.01] })
.setMappable(10);
inputs[| 3] = nodeValue("Mask", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); inputs[| 3] = nodeValue("Mask", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0);
@ -26,9 +24,15 @@ function Node_Greyscale(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
__init_mask_modifier(3); // inputs 7, 8 __init_mask_modifier(3); // inputs 7, 8
inputs[| 9] = nodeValue("Brightness map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone)
.setVisible(false, false);
inputs[| 10] = nodeValue("Contrast map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone)
.setVisible(false, false);
input_display_list = [ 5, 6, input_display_list = [ 5, 6,
["Surfaces", true], 0, 3, 4, 7, 8, ["Surfaces", true], 0, 3, 4, 7, 8,
["Greyscale", false], 1, 2, ["Greyscale", false], 1, 9, 2, 10,
] ]
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
@ -37,23 +41,18 @@ function Node_Greyscale(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
static step = function() { #region static step = function() { #region
__step_mask_modifier(); __step_mask_modifier();
inputs[| 1].mappableStep();
inputs[| 2].mappableStep();
} #endregion } #endregion
static processData = function(_outSurf, _data, _output_index, _array_index) { #region static processData = function(_outSurf, _data, _output_index, _array_index) { #region
var _exp = _data[1];
var _con = _data[2];
surface_set_target(_outSurf);
DRAW_CLEAR
BLEND_OVERRIDE;
shader_set(shader); surface_set_shader(_outSurf, sh_greyscale);
shader_set_uniform_f(uniform_exp, _exp); shader_set_f_map("brightness", _data[1], _data[ 9], inputs[| 1]);
shader_set_uniform_f(uniform_con, _con); shader_set_f_map("contrast", _data[2], _data[10], inputs[| 2]);
draw_surface_safe(_data[0], 0, 0); draw_surface_safe(_data[0], 0, 0);
shader_reset(); surface_reset_shader();
BLEND_NORMAL;
surface_reset_target();
__process_mask_modifier(_data); __process_mask_modifier(_data);
_outSurf = mask_apply(_data[0], _outSurf, _data[3], _data[4]); _outSurf = mask_apply(_data[0], _outSurf, _data[3], _data[4]);

View file

@ -6,7 +6,8 @@ function Node_Skew(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
.setDisplay(VALUE_DISPLAY.enum_button, ["x", "y"]); .setDisplay(VALUE_DISPLAY.enum_button, ["x", "y"]);
inputs[| 2] = nodeValue("Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) inputs[| 2] = nodeValue("Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
.setDisplay(VALUE_DISPLAY.slider, { range: [-1, 1, 0.01] }); .setDisplay(VALUE_DISPLAY.slider, { range: [-1, 1, 0.01] })
.setMappable(12);
inputs[| 3] = nodeValue("Wrap", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); inputs[| 3] = nodeValue("Wrap", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false);
@ -31,9 +32,12 @@ function Node_Skew(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
__init_mask_modifier(6); // inputs 10, 11 __init_mask_modifier(6); // inputs 10, 11
inputs[| 12] = nodeValue("Strength map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone)
.setVisible(false, false);
input_display_list = [ 8, 9, input_display_list = [ 8, 9,
["Surfaces", true], 0, 6, 7, 10, 11, ["Surfaces", true], 0, 6, 7, 10, 11,
["Skew", false], 1, 2, 4, ["Skew", false], 1, 2, 12, 4,
] ]
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
@ -42,23 +46,25 @@ function Node_Skew(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
attribute_oversample(); attribute_oversample();
attribute_interpolation(); attribute_interpolation();
static centerAnchor = function() { static centerAnchor = function() { #region
if(!is_surface(current_data[0])) return; if(!is_surface(current_data[0])) return;
var ww = surface_get_width_safe(current_data[0]); var ww = surface_get_width_safe(current_data[0]);
var hh = surface_get_height_safe(current_data[0]); var hh = surface_get_height_safe(current_data[0]);
inputs[| 4].setValue([ww / 2, hh / 2]); inputs[| 4].setValue([ww / 2, hh / 2]);
} } #endregion
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { #region
inputs[| 4].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny); inputs[| 4].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny);
} } #endregion
static step = function() { #region static step = function() { #region
__step_mask_modifier(); __step_mask_modifier();
inputs[| 2].mappableStep();
} #endregion } #endregion
static processData = function(_outSurf, _data, _output_index, _array_index) { static processData = function(_outSurf, _data, _output_index, _array_index) { #region
var _axis = _data[1]; var _axis = _data[1];
var _amou = _data[2]; var _amou = _data[2];
var _wrap = _data[3]; var _wrap = _data[3];
@ -70,7 +76,7 @@ function Node_Skew(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
shader_set_dim("dimension", _data[0]); shader_set_dim("dimension", _data[0]);
shader_set_f("center", _cent); shader_set_f("center", _cent);
shader_set_i("axis", _axis); shader_set_i("axis", _axis);
shader_set_f("amount", _amou); shader_set_f_map("amount", _amou, _data[12], inputs[| 2]);
shader_set_i("sampleMode", _samp); shader_set_i("sampleMode", _samp);
draw_surface_safe(_data[0], 0, 0); draw_surface_safe(_data[0], 0, 0);
surface_reset_shader(); surface_reset_shader();
@ -80,5 +86,5 @@ function Node_Skew(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
_outSurf = channel_apply(_data[0], _outSurf, _data[9]); _outSurf = channel_apply(_data[0], _outSurf, _data[9]);
return _outSurf; return _outSurf;
} } #endregion
} }

View file

@ -1264,6 +1264,43 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
updateColor(); updateColor();
} resetDisplay(); #endregion } resetDisplay(); #endregion
static setMappable = function(index) { #region
attributes.mapped = false;
attributes.map_index = index;
editWidgetRaw = editWidget;
mapButton = button(function() {
attributes.mapped = !attributes.mapped;
var val = getValue();
if( attributes.mapped && is_numeric(val)) setValue([0, val]);
if(!attributes.mapped && is_array(val)) setValue(array_safe_get(val, 0));
setArrayDepth(attributes.mapped);
node.triggerRender();
})
.setIcon( THEME.value_use_surface, [ function() { return attributes.mapped; } ], COLORS._main_icon )
.setTooltip("Use map");
mapWidget = new vectorBox(2, function(index, val) { return setValueDirect(val, index); });
mapWidget.side_button = mapButton;
mapWidget.setMinMax();
editWidget.side_button = mapButton;
return self;
} #endregion
static mappableStep = function() { #region
editWidget = attributes.mapped? mapWidget : editWidgetRaw;
setArrayDepth(attributes.mapped);
if(node.inputs[| attributes.map_index].visible != attributes.mapped) {
node.inputs[| attributes.map_index].visible = attributes.mapped;
node.setHeight();
}
} #endregion
static setColor = function(col) { #region static setColor = function(col) { #region
color = col; color = col;
updateColor(); updateColor();
@ -2447,6 +2484,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
draw_line_shift_y = struct_try_get(_map, "shift_y"); draw_line_shift_y = struct_try_get(_map, "shift_y");
is_modified = struct_try_get(_map, "is_modified", true); is_modified = struct_try_get(_map, "is_modified", true);
struct_append(attributes, struct_try_get(_map, "attributes"))
name_custom = struct_try_get(_map, "name_custom", false); name_custom = struct_try_get(_map, "name_custom", false);
if(name_custom) name = struct_try_get(_map, "name", name); if(name_custom) name = struct_try_get(_map, "name", name);
@ -2475,9 +2513,15 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
node.input_value_map[$ internalName] = _value; node.input_value_map[$ internalName] = _value;
} }
attributeApply();
onValidate(); onValidate();
} #endregion } #endregion
static attributeApply = function() { #region
if(struct_has(attributes, "mapped")) mappableStep();
} #endregion
static connect = function(log = false) { #region static connect = function(log = false) { #region
if(con_node == -1 || con_index == -1) if(con_node == -1 || con_index == -1)
return true; return true;

View file

@ -1,4 +1,4 @@
function shader_set_i(uniform, value) { function shader_set_i(uniform, value) { #region
INLINE INLINE
var shader = shader_current(); var shader = shader_current();
@ -19,15 +19,15 @@ function shader_set_i(uniform, value) {
array[i - 1] = argument[i]; array[i - 1] = argument[i];
shader_set_i_array(shader, uniform, array) shader_set_i_array(shader, uniform, array)
} }
} } #endregion
function shader_set_i_array(shader, uniform, array) { function shader_set_i_array(shader, uniform, array) { #region
INLINE INLINE
shader_set_uniform_i_array(shader_get_uniform(shader, uniform), array); shader_set_uniform_i_array(shader_get_uniform(shader, uniform), array);
} } #endregion
function shader_set_f(uniform, value) { function shader_set_f(uniform, value) { #region
INLINE INLINE
var shader = shader_current(); var shader = shader_current();
@ -63,9 +63,24 @@ function shader_set_f(uniform, value) {
array[i - 1] = argument[i]; array[i - 1] = argument[i];
shader_set_uniform_f_array(shader_get_uniform(shader, uniform), array); shader_set_uniform_f_array(shader_get_uniform(shader, uniform), array);
} }
} } #endregion
function shader_set_uniform_f_array_safe(uniform, array, max_length = 128) { function shader_set_f_map(uniform, value, surface, junc) { #region
INLINE
shader_set_f( uniform, is_array(value)? value : [ value, value ]);
shader_set_i( uniform + "UseSurf", junc.attributes.mapped && is_surface(surface));
shader_set_surface(uniform + "Surf", surface);
} #endregion
function shader_set_f_map_s(uniform, value, surface, junc) { #region
INLINE
shader_set_f(uniform, is_array(value)? value : [ value, value ]);
shader_set_i(uniform + "UseSurf", junc.attributes.mapped && is_surface(surface));
} #endregion
function shader_set_uniform_f_array_safe(uniform, array, max_length = 128) { #region
INLINE INLINE
if(!is_array(array)) return; if(!is_array(array)) return;
@ -75,9 +90,9 @@ function shader_set_uniform_f_array_safe(uniform, array, max_length = 128) {
if(_len > max_length) array_resize(array, max_length) if(_len > max_length) array_resize(array, max_length)
shader_set_uniform_f_array(uniform, array); shader_set_uniform_f_array(uniform, array);
} } #endregion
function shader_set_surface(sampler, surface, linear = false, _repeat = false) { function shader_set_surface(sampler, surface, linear = false, _repeat = false) { #region
INLINE INLINE
var shader = shader_current(); var shader = shader_current();
@ -94,32 +109,9 @@ function shader_set_surface(sampler, surface, linear = false, _repeat = false) {
gpu_set_tex_repeat_ext(t, _repeat); gpu_set_tex_repeat_ext(t, _repeat);
return t; return t;
} } #endregion
function shader_set_surface_i(sampler, useSampler, surface) { function shader_set_surface_dimension(uniform, surface) { #region
INLINE
shader_set_surface(sampler, surface);
shader_set_i(useSampler, is_surface(surface));
}
//function shader_set_surface_ext(sampler, surface, linear = false, _repeat = false) {
// var shader = shader_current();
// if(!is_surface(surface)) return;
// if (!GMD3D11_IS_SUPPORTED) {
// shader_set_surface(sampler, surface, linear, _repeat);
// return;
// }
// var t = shader_get_sampler_index(shader, sampler);
// gpu_set_tex_filter_ext(t, linear);
// gpu_set_tex_repeat_ext(t, _repeat);
// d3d11_texture_set_stage_ps(t, surface_get_texture(surface));
//}
function shader_set_surface_dimension(uniform, surface) {
INLINE INLINE
var shader = shader_current(); var shader = shader_current();
@ -134,23 +126,22 @@ function shader_set_surface_dimension(uniform, surface) {
th = 2048; th = 2048;
shader_set_uniform_f(shader_get_uniform(shader, uniform), tw, th); shader_set_uniform_f(shader_get_uniform(shader, uniform), tw, th);
} } #endregion
function shader_set_dim(uniform = "dimension", surf = noone) { function shader_set_dim(uniform = "dimension", surf = noone) { #region
INLINE INLINE
if(!is_surface(surf)) return; if(!is_surface(surf)) return;
shader_set_f(uniform, surface_get_width_safe(surf), surface_get_height_safe(surf)); shader_set_f(uniform, surface_get_width_safe(surf), surface_get_height_safe(surf));
} } #endregion
function shader_set_color(uniform, col, alpha = 1) { function shader_set_color(uniform, col, alpha = 1) { #region
INLINE INLINE
shader_set_f(uniform, colToVec4(col, alpha)); shader_set_f(uniform, colToVec4(col, alpha));
} } #endregion
function shader_set_palette(pal, pal_uni = "palette", amo_uni = "paletteAmount", max_length = 128) { function shader_set_palette(pal, pal_uni = "palette", amo_uni = "paletteAmount", max_length = 128) { #region
INLINE INLINE
shader_set_i(amo_uni, min(max_length, array_length(pal))); shader_set_i(amo_uni, min(max_length, array_length(pal)));
@ -161,7 +152,7 @@ function shader_set_palette(pal, pal_uni = "palette", amo_uni = "paletteAmount",
if(array_length(_pal)) if(array_length(_pal))
shader_set_f(pal_uni, _pal); shader_set_f(pal_uni, _pal);
} } #endregion
#region prebuild #region prebuild
enum BLEND { enum BLEND {

View file

@ -12,6 +12,7 @@ function slider(_min, _max, _step, _onModify = noone, _onRelease = noone) : widg
current_value = 0; current_value = 0;
slide_speed = 1 / 10; slide_speed = 1 / 10;
side_button = noone;
onModify = _onModify; onModify = _onModify;
onRelease = _onRelease; onRelease = _onRelease;
onApply = function(val) { onApply = function(val) {
@ -59,6 +60,12 @@ function slider(_min, _max, _step, _onModify = noone, _onRelease = noone) : widg
if(!dragging) current_value = _data; if(!dragging) current_value = _data;
if(side_button) {
side_button.setFocusHover(active, hover);
side_button.draw(_x + _w - ui(32), _y + _h / 2 - ui(32 / 2), ui(32), ui(32), _m, THEME.button_hide);
_w -= ui(40);
}
switch(halign) { #region switch(halign) { #region
case fa_left: _x = _x; break; case fa_left: _x = _x; break;
case fa_center: _x = _x - _w / 2; break; case fa_center: _x = _x - _w / 2; break;

View file

@ -51,6 +51,12 @@ function vectorBox(_size, _onModify, _unit = noone) : widget() constructor {
tb[i].slidable = true; tb[i].slidable = true;
} }
static setMinMax = function() {
linkable = false;
axis = [ "min", "max" ];
return self;
}
static setLinkInactiveColor = function(color) { static setLinkInactiveColor = function(color) {
link_inactive_color = color; link_inactive_color = color;
return self; return self;
@ -140,7 +146,7 @@ function vectorBox(_size, _onModify, _unit = noone) : widget() constructor {
for(var i = 0; i < sz; i++) { for(var i = 0; i < sz; i++) {
draw_set_font(f_p0); draw_set_font(f_p0);
var lw = max(ui(24), string_width(axis[i]) + ui(16)); var lw = sz > 1? max(ui(24), string_width(axis[i]) + ui(16)) : 0;
var bx = per_line? _x : _x + ww * i; var bx = per_line? _x : _x + ww * i;
var by = per_line? _y + (_h + ui(8)) * i : _y; var by = per_line? _y + (_h + ui(8)) * i : _y;
@ -148,9 +154,11 @@ function vectorBox(_size, _onModify, _unit = noone) : widget() constructor {
tb[i].setFocusHover(active, hover); tb[i].setFocusHover(active, hover);
tb[i].draw(bx + lw, by, ww - lw, _h, _data[i], _m); tb[i].draw(bx + lw, by, ww - lw, _h, _data[i], _m);
if(sz > 1) {
draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text_inner); draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text_inner);
draw_text_add(bx + ui(8), by + _h / 2, axis[i]); draw_text_add(bx + ui(8), by + _h / 2, axis[i]);
} }
}
resetFocus(); resetFocus();

View file

@ -1,22 +1,34 @@
//
// Simple passthrough fragment shader
//
varying vec2 v_vTexcoord; varying vec2 v_vTexcoord;
varying vec4 v_vColour; varying vec4 v_vColour;
uniform float brightness; uniform vec2 brightness;
uniform float contrast; uniform int brightnessUseSurf;
uniform sampler2D brightnessSurf;
uniform vec2 contrast;
uniform int contrastUseSurf;
uniform sampler2D contrastSurf;
void main() { void main() {
float bri = brightness.x;
if(brightnessUseSurf == 1) {
vec4 _vMap = texture2D( brightnessSurf, v_vTexcoord );
bri = mix(brightness.x, brightness.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
}
float con = contrast.x;
if(contrastUseSurf == 1) {
vec4 _vMap = texture2D( contrastSurf, v_vTexcoord );
con = mix(contrast.x, contrast.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
}
vec4 col = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord ); vec4 col = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord );
vec4 col_b = col + vec4(brightness, brightness, brightness, 0.0); vec4 col_b = col + vec4(bri, bri, bri, 0.0);
vec4 col_bc = vec4(col_b.rgb * contrast, col_b.a); vec4 col_bc = vec4(col_b.rgb * con, col_b.a);
float bright = dot(col_bc.rgb, vec3(0.2126, 0.7152, 0.0722)); float bright = dot(col_bc.rgb, vec3(0.2126, 0.7152, 0.0722));
if(bright > 0.5) if(bright > 0.5) col_bc.rgb = vec3(1.0);
col_bc.rgb = vec3(1.0); else col_bc.rgb = vec3(0.0);
else
col_bc.rgb = vec3(0.0);
gl_FragColor = col_bc; gl_FragColor = col_bc;
} }

View file

@ -7,14 +7,27 @@ varying vec4 v_vColour;
uniform int use_mask; uniform int use_mask;
uniform sampler2D mask; uniform sampler2D mask;
uniform float brightness; uniform sampler2D param0;
uniform float contrast; uniform sampler2D param1;
uniform float exposure;
uniform float hue; uniform vec2 brightness;
uniform float sat; uniform int brightnessUseSurf;
uniform float val; uniform vec2 contrast;
uniform int contrastUseSurf;
uniform vec2 exposure;
uniform int exposureUseSurf;
uniform vec2 hue;
uniform int hueUseSurf;
uniform vec2 sat;
uniform int satUseSurf;
uniform vec2 val;
uniform int valUseSurf;
uniform vec2 alpha;
uniform int alphaUseSurf;
uniform vec4 blend; uniform vec4 blend;
uniform vec2 blendAmount;
uniform int blendAmountUseSurf;
uniform int blendMode; uniform int blendMode;
vec3 rgb2hsv(vec3 c) { #region vec3 rgb2hsv(vec3 c) { #region
@ -104,22 +117,74 @@ vec3 rgb2hsl( in vec3 c ) { #region
void main() { void main() {
vec4 col = texture2D( gm_BaseTexture, v_vTexcoord ); vec4 col = texture2D( gm_BaseTexture, v_vTexcoord );
#region get param
vec2 htx = v_vTexcoord * 0.5;
float bri = brightness.x;
if(brightnessUseSurf == 1) {
vec4 _vMap = texture2D( param0, htx );
bri = mix(brightness.x, brightness.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
}
float exo = exposure.x;
if(exposureUseSurf == 1) {
vec4 _vMap = texture2D( param0, vec2(0.5, 0.0) + htx );
exo = mix(exposure.x, exposure.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
}
float con = contrast.x;
if(contrastUseSurf == 1) {
vec4 _vMap = texture2D( param0, vec2(0.0, 0.5) + htx );
con = mix(contrast.x, contrast.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
}
float hhe = hue.x;
if(hueUseSurf == 1) {
vec4 _vMap = texture2D( param0, vec2(0.5, 0.5) + htx );
hhe = mix(hue.x, hue.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
}
float sst = sat.x;
if(satUseSurf == 1) {
vec4 _vMap = texture2D( param1, htx );
sst = mix(sat.x, sat.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
}
float vvl = val.x;
if(valUseSurf == 1) {
vec4 _vMap = texture2D( param1, vec2(0.5, 0.0) + htx );
vvl = mix(val.x, val.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
}
float bld = blendAmount.x;
if(blendAmountUseSurf == 1) {
vec4 _vMap = texture2D( param1, vec2(0.0, 0.5) + htx );
bld = mix(blendAmount.x, blendAmount.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
}
float alp = alpha.x;
if(alphaUseSurf == 1) {
vec4 _vMap = texture2D( param1, vec2(0.5, 0.5) + htx );
alp = mix(alpha.x, alpha.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
}
#endregion
//contrast //contrast
vec4 col_c = .5 + (contrast * 2.) * (col - .5); vec4 col_c = .5 + (con * 2.) * (col - .5);
col_c = clamp(col_c, vec4(0.), vec4(1.)); col_c = clamp(col_c, vec4(0.), vec4(1.));
//brightness //brightness
vec4 col_cb = col_c + vec4(brightness, brightness, brightness, 0.0); vec4 col_cb = col_c + vec4(bri, bri, bri, 0.0);
col_cb = clamp(col_cb, vec4(0.), vec4(1.)); col_cb = clamp(col_cb, vec4(0.), vec4(1.));
//exposure //exposure
col_cb = clamp(col_cb * exposure, vec4(0.), vec4(1.)); col_cb = clamp(col_cb * exo, vec4(0.), vec4(1.));
//hsv //hsv
vec3 _hsv = rgb2hsv(col_cb.rgb); vec3 _hsv = rgb2hsv(col_cb.rgb);
_hsv.x = clamp(_hsv.x + hue, -1., 1.); _hsv.x = clamp(_hsv.x + hhe, -1., 1.);
_hsv.z = clamp((_hsv.z + val) * (1. + sat * _hsv.y * .5), 0., 1.); _hsv.z = clamp((_hsv.z + vvl) * (1. + sst * _hsv.y * .5), 0., 1.);
_hsv.y = clamp(_hsv.y * (sat + 1.), 0., 1.); _hsv.y = clamp(_hsv.y * (sst + 1.), 0., 1.);
vec3 _col_cbh = hsv2rgb(_hsv); vec3 _col_cbh = hsv2rgb(_hsv);
vec4 col_cbh = vec4(_col_cbh.r, _col_cbh.g, _col_cbh.b, col.a); vec4 col_cbh = vec4(_col_cbh.r, _col_cbh.g, _col_cbh.b, col.a);
@ -143,11 +208,11 @@ void main() {
else if(blendMode == 5) bmix = lum > 0.5? (1. - (1. - 2. * (col3 - 0.5)) * (1. - bld3)) : ((2. * col3) * bld3); else if(blendMode == 5) bmix = lum > 0.5? (1. - (1. - 2. * (col3 - 0.5)) * (1. - bld3)) : ((2. * col3) * bld3);
else if(blendMode == 6) bmix = hsv2rgb(vec3(bhsv.r, chsv.g, chsv.b)); else if(blendMode == 6) bmix = hsv2rgb(vec3(bhsv.r, chsv.g, chsv.b));
else if(blendMode == 7) bmix = hsv2rgb(vec3(chsv.r, mix(chsv.g, bhsv.g, blend.a), chsv.b)); else if(blendMode == 7) bmix = hsv2rgb(vec3(chsv.r, mix(chsv.g, bhsv.g, bld), chsv.b));
else if(blendMode == 8) { else if(blendMode == 8) {
vec3 chsl = rgb2hsl(col3); vec3 chsl = rgb2hsl(col3);
vec3 bhsl = rgb2hsl(bld3); vec3 bhsl = rgb2hsl(bld3);
chsl.z = mix(chsl.z, bhsl.z, blend.a); chsl.z = mix(chsl.z, bhsl.z, bld);
bmix = hsl2rgb(chsl); bmix = hsl2rgb(chsl);
} }
else if(blendMode == 9) { else if(blendMode == 9) {
@ -166,7 +231,7 @@ void main() {
else if(blendMode == 12) bmix = abs(col3 - bld3); else if(blendMode == 12) bmix = abs(col3 - bld3);
if(blendMode != 7 && blendMode != 8) if(blendMode != 7 && blendMode != 8)
col_cbh.rgb = mix(col_cbh.rgb, bmix, blend.a); col_cbh.rgb = mix(col_cbh.rgb, bmix, bld);
else else
col_cbh.rgb = bmix; col_cbh.rgb = bmix;
@ -175,9 +240,9 @@ void main() {
vec4 mas = texture2D( mask, v_vTexcoord ); vec4 mas = texture2D( mask, v_vTexcoord );
mas.rgb *= mas.a; mas.rgb *= mas.a;
gl_FragColor = col_cbh * mas + col * (vec4(1.) - mas); gl_FragColor = col_cbh * mas + col * (vec4(1.) - mas);
gl_FragColor.a = col.a * mix(1., v_vColour.a, mas.r); gl_FragColor.a = col.a * mix(1., alp, mas.r);
} else { } else {
gl_FragColor = col_cbh; gl_FragColor = col_cbh;
gl_FragColor.a = col.a * v_vColour.a; gl_FragColor.a = col.a * alp;
} }
} }

View file

@ -8,15 +8,15 @@ uniform sampler2D map;
uniform vec2 dimension; uniform vec2 dimension;
uniform vec2 map_dimension; uniform vec2 map_dimension;
uniform vec2 displace; uniform vec2 displace;
uniform float strength;
uniform float middle; uniform float middle;
uniform int iterate; uniform int iterate;
uniform int use_rg; uniform int use_rg;
uniform int sampleMode; uniform int sampleMode;
uniform int blendMode; uniform int blendMode;
uniform sampler2D strengthSurf; uniform vec2 strength;
uniform int strengthUseSurf; uniform int strengthUseSurf;
uniform sampler2D strengthSurf;
float bright(in vec4 col) { return dot(col.rgb, vec3(0.2126, 0.7152, 0.0722)) * col.a; } float bright(in vec4 col) { return dot(col.rgb, vec3(0.2126, 0.7152, 0.0722)) * col.a; }
@ -88,11 +88,6 @@ vec2 shiftMap(in vec2 pos, in float str) { #region
vec2 raw_displace = displace / dimension; vec2 raw_displace = displace / dimension;
float _str; float _str;
if(strengthUseSurf == 1) {
vec4 strMap = texture2Dintp( strengthSurf, pos );
str *= (strMap.r + strMap.g + strMap.b) / 3.;
}
if(use_rg == 1) { if(use_rg == 1) {
vec2 _disp = vec2(disP.r - middle, disP.g - middle) * vec2((disP.r + disP.g + disP.b) / 3. - middle) * str; vec2 _disp = vec2(disP.r - middle, disP.g - middle) * vec2((disP.r + disP.g + disP.b) / 3. - middle) * str;
@ -130,13 +125,23 @@ void main() { #region
vec2 samPos = v_vTexcoord; vec2 samPos = v_vTexcoord;
vec4 ccol = sampleTexture( v_vTexcoord ), ncol; vec4 ccol = sampleTexture( v_vTexcoord ), ncol;
float stren = strength.x;
float stMax = strength.x;
if(strengthUseSurf == 1) {
vec4 strMap = texture2Dintp( strengthSurf, v_vTexcoord );
stren = mix(strength.x, strength.y, (strMap.r + strMap.g + strMap.b) / 3.);
stMax = strength.y;
}
if(iterate == 1) { if(iterate == 1) {
for(float i = 0.; i < strength; i++) { for(float i = 0.; i < stMax; i++) {
if(i >= stren) break;
samPos = shiftMap(samPos, 1.); samPos = shiftMap(samPos, 1.);
ncol = blend(ccol, sampleTexture( samPos )); ncol = blend(ccol, sampleTexture( samPos ));
} }
} else { } else {
samPos = shiftMap(samPos, strength); samPos = shiftMap(samPos, stren);
ncol = sampleTexture( samPos ); ncol = sampleTexture( samPos );
} }

View file

@ -4,13 +4,30 @@
varying vec2 v_vTexcoord; varying vec2 v_vTexcoord;
varying vec4 v_vColour; varying vec4 v_vColour;
uniform float brightness; uniform vec2 brightness;
uniform float contrast; uniform int brightnessUseSurf;
uniform sampler2D brightnessSurf;
uniform vec2 contrast;
uniform int contrastUseSurf;
uniform sampler2D contrastSurf;
void main() { void main() {
float bri = brightness.x;
if(brightnessUseSurf == 1) {
vec4 _vMap = texture2D( brightnessSurf, v_vTexcoord );
bri = mix(brightness.x, brightness.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
}
float con = contrast.x;
if(contrastUseSurf == 1) {
vec4 _vMap = texture2D( contrastSurf, v_vTexcoord );
con = mix(contrast.x, contrast.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
}
vec4 col = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord ); vec4 col = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord );
vec4 col_b = col + vec4(brightness, brightness, brightness, 0.0); vec4 col_b = col + vec4(bri, bri, bri, 0.0);
vec4 col_bc = vec4(col_b.rgb * contrast, col_b.a); vec4 col_bc = vec4(col_b.rgb * con, col_b.a);
col_bc.rgb = vec3(dot(col_bc.rgb, vec3(0.2126, 0.7152, 0.0722))); col_bc.rgb = vec3(dot(col_bc.rgb, vec3(0.2126, 0.7152, 0.0722)));

View file

@ -7,9 +7,12 @@ varying vec4 v_vColour;
uniform vec2 dimension; uniform vec2 dimension;
uniform vec2 center; uniform vec2 center;
uniform int axis; uniform int axis;
uniform float amount;
/////////////// SAMPLING /////////////// uniform vec2 amount;
uniform int amountUseSurf;
uniform sampler2D amountSurf;
#region /////////////// SAMPLING ///////////////
const float PI = 3.14159265358979323846; const float PI = 3.14159265358979323846;
uniform int interpolation; uniform int interpolation;
@ -56,9 +59,9 @@ vec4 texture2Dintp( sampler2D texture, vec2 uv ) {
return texture2D( texture, uv ); return texture2D( texture, uv );
} }
/////////////// SAMPLING /////////////// #endregion /////////////// SAMPLING ///////////////
vec4 sampleTexture(vec2 pos) { vec4 sampleTexture(vec2 pos) { #region
if(pos.x >= 0. && pos.y >= 0. && pos.x <= 1. && pos.y <= 1.) if(pos.x >= 0. && pos.y >= 0. && pos.x <= 1. && pos.y <= 1.)
return texture2Dintp(gm_BaseTexture, pos); return texture2Dintp(gm_BaseTexture, pos);
@ -70,16 +73,20 @@ vec4 sampleTexture(vec2 pos) {
return texture2Dintp(gm_BaseTexture, fract(pos)); return texture2Dintp(gm_BaseTexture, fract(pos));
return vec4(0.); return vec4(0.);
} } #endregion
void main() { void main() {
vec2 pos = v_vTexcoord; vec2 pos = v_vTexcoord;
vec2 cnt = center / dimension; vec2 cnt = center / dimension;
if(axis == 0) float amo = amount.x;
pos.x += (pos.y - cnt.y) * amount; if(amountUseSurf == 1) {
else vec4 _vMap = texture2Dintp( amountSurf, v_vTexcoord );
pos.y += (pos.x - cnt.x) * amount; amo = mix(amount.x, amount.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
}
if(axis == 0) pos.x += (pos.y - cnt.y) * amo;
else pos.y += (pos.x - cnt.x) * amo;
gl_FragColor = sampleTexture( pos ); gl_FragColor = sampleTexture( pos );
} }