mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-12-24 14:06:23 +01:00
Splice, Image replace update
This commit is contained in:
parent
da2f1eb4c3
commit
3fe4f266bf
30 changed files with 255 additions and 83 deletions
|
@ -1142,6 +1142,7 @@
|
||||||
{"name":"node_3d_prim_sphere","order":13,"path":"scripts/node_3d_prim_sphere/node_3d_prim_sphere.yy",},
|
{"name":"node_3d_prim_sphere","order":13,"path":"scripts/node_3d_prim_sphere/node_3d_prim_sphere.yy",},
|
||||||
{"name":"dialog_management","order":2,"path":"scripts/dialog_management/dialog_management.yy",},
|
{"name":"dialog_management","order":2,"path":"scripts/dialog_management/dialog_management.yy",},
|
||||||
{"name":"draw_shapes","order":10,"path":"scripts/draw_shapes/draw_shapes.yy",},
|
{"name":"draw_shapes","order":10,"path":"scripts/draw_shapes/draw_shapes.yy",},
|
||||||
|
{"name":"string_eval_tree","order":2,"path":"scripts/string_eval_tree/string_eval_tree.yy",},
|
||||||
{"name":"sh_surface_replace_fast_replace","order":3,"path":"shaders/sh_surface_replace_fast_replace/sh_surface_replace_fast_replace.yy",},
|
{"name":"sh_surface_replace_fast_replace","order":3,"path":"shaders/sh_surface_replace_fast_replace/sh_surface_replace_fast_replace.yy",},
|
||||||
{"name":"node_solid","order":14,"path":"scripts/node_solid/node_solid.yy",},
|
{"name":"node_solid","order":14,"path":"scripts/node_solid/node_solid.yy",},
|
||||||
{"name":"sh_blend_luma","order":19,"path":"shaders/sh_blend_luma/sh_blend_luma.yy",},
|
{"name":"sh_blend_luma","order":19,"path":"shaders/sh_blend_luma/sh_blend_luma.yy",},
|
||||||
|
|
|
@ -1688,6 +1688,7 @@
|
||||||
{"id":{"name":"dialog_management","path":"scripts/dialog_management/dialog_management.yy",},},
|
{"id":{"name":"dialog_management","path":"scripts/dialog_management/dialog_management.yy",},},
|
||||||
{"id":{"name":"draw_shapes","path":"scripts/draw_shapes/draw_shapes.yy",},},
|
{"id":{"name":"draw_shapes","path":"scripts/draw_shapes/draw_shapes.yy",},},
|
||||||
{"id":{"name":"node_channels","path":"scripts/node_channels/node_channels.yy",},},
|
{"id":{"name":"node_channels","path":"scripts/node_channels/node_channels.yy",},},
|
||||||
|
{"id":{"name":"string_eval_tree","path":"scripts/string_eval_tree/string_eval_tree.yy",},},
|
||||||
{"id":{"name":"sh_surface_replace_fast_replace","path":"shaders/sh_surface_replace_fast_replace/sh_surface_replace_fast_replace.yy",},},
|
{"id":{"name":"sh_surface_replace_fast_replace","path":"shaders/sh_surface_replace_fast_replace/sh_surface_replace_fast_replace.yy",},},
|
||||||
{"id":{"name":"node_solid","path":"scripts/node_solid/node_solid.yy",},},
|
{"id":{"name":"node_solid","path":"scripts/node_solid/node_solid.yy",},},
|
||||||
{"id":{"name":"sh_blend_luma","path":"shaders/sh_blend_luma/sh_blend_luma.yy",},},
|
{"id":{"name":"sh_blend_luma","path":"shaders/sh_blend_luma/sh_blend_luma.yy",},},
|
||||||
|
|
|
@ -87,9 +87,8 @@
|
||||||
|
|
||||||
bx += bw + ui(4);
|
bx += bw + ui(4);
|
||||||
var txt = get_text("new_collection_meta_edit", "Edit metadata");
|
var txt = get_text("new_collection_meta_edit", "Edit metadata");
|
||||||
if(buttonInstant(THEME.button_hide, bx, by, bw, bh, mouse_ui, sFOCUS, sHOVER, txt, THEME.hamburger) == 2) {
|
if(buttonInstant(THEME.button_hide, bx, by, bw, bh, mouse_ui, sFOCUS, sHOVER, txt, THEME.hamburger) == 2)
|
||||||
doExpand();
|
doExpand();
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region metadata
|
#region metadata
|
||||||
|
|
|
@ -70,10 +70,14 @@ event_inherited();
|
||||||
var _dw = sc_content.surface_w;
|
var _dw = sc_content.surface_w;
|
||||||
var _h = 0;
|
var _h = 0;
|
||||||
var _ly = _y;
|
var _ly = _y;
|
||||||
|
var hovering = "";
|
||||||
var hovering = "";
|
|
||||||
|
|
||||||
for(var i = 0; i < array_length(data); i++) {
|
for(var i = 0; i < array_length(data); i++) {
|
||||||
|
var txt = data[i];
|
||||||
|
var clickable = !string_starts_with(txt, "-");
|
||||||
|
if(!clickable)
|
||||||
|
txt = string_delete(txt, 1, 1);
|
||||||
|
|
||||||
if(data[i] == -1) {
|
if(data[i] == -1) {
|
||||||
draw_sprite_stretched(THEME.menu_separator, 0, ui(8), _ly, _dw - ui(16), ui(6));
|
draw_sprite_stretched(THEME.menu_separator, 0, ui(8), _ly, _dw - ui(16), ui(6));
|
||||||
_ly += ui(8);
|
_ly += ui(8);
|
||||||
|
@ -82,25 +86,27 @@ event_inherited();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sc_content.hover && point_in_rectangle(_m[0], _m[1], 0, _ly + 1, _dw, _ly + hght - 1)) {
|
if(clickable) {
|
||||||
selecting = i;
|
if(sc_content.hover && point_in_rectangle(_m[0], _m[1], 0, _ly + 1, _dw, _ly + hght - 1)) {
|
||||||
hovering = data[i];
|
selecting = i;
|
||||||
}
|
hovering = data[i];
|
||||||
|
}
|
||||||
|
|
||||||
if(selecting == i) {
|
if(selecting == i) {
|
||||||
draw_sprite_stretched_ext(THEME.textbox, 3, 0, _ly, _dw, hght, COLORS.dialog_menubox_highlight, 1);
|
draw_sprite_stretched_ext(THEME.textbox, 3, 0, _ly, _dw, hght, COLORS.dialog_menubox_highlight, 1);
|
||||||
|
|
||||||
if(sc_content.active && (mouse_press(mb_left) || keyboard_check_pressed(vk_enter))) {
|
if(sc_content.active && (mouse_press(mb_left) || keyboard_check_pressed(vk_enter))) {
|
||||||
initVal = i;
|
initVal = i;
|
||||||
instance_destroy();
|
instance_destroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_set_text(f_p0, align, fa_center, COLORS._main_text);
|
draw_set_text(f_p0, align, fa_center, clickable? COLORS._main_text : COLORS._main_text_sub);
|
||||||
if(align == fa_center)
|
if(align == fa_center)
|
||||||
draw_text_cut(_dw / 2, _ly + hght / 2, data[i], _dw);
|
draw_text_cut(_dw / 2, _ly + hght / 2, txt, _dw);
|
||||||
else if(align == fa_left)
|
else if(align == fa_left)
|
||||||
draw_text_cut(ui(8), _ly + hght / 2, data[i], _dw);
|
draw_text_cut(ui(8), _ly + hght / 2, txt, _dw);
|
||||||
|
|
||||||
_ly += hght;
|
_ly += hght;
|
||||||
_h += hght;
|
_h += hght;
|
||||||
|
|
|
@ -84,9 +84,9 @@
|
||||||
Render(true);
|
Render(true);
|
||||||
ANIMATOR.frame_progress = false;
|
ANIMATOR.frame_progress = false;
|
||||||
} else {
|
} else {
|
||||||
if(UPDATE & RENDER_TYPE.full) {
|
if(UPDATE & RENDER_TYPE.full)
|
||||||
Render();
|
Render();
|
||||||
} else if(UPDATE & RENDER_TYPE.partial)
|
else if(UPDATE & RENDER_TYPE.partial)
|
||||||
Render(true);
|
Render(true);
|
||||||
}
|
}
|
||||||
UPDATE = RENDER_TYPE.none;
|
UPDATE = RENDER_TYPE.none;
|
||||||
|
|
|
@ -66,11 +66,11 @@ function __lua_set_color_alpha(color = c_white, alpha = 1) {
|
||||||
function __lua_get_color(_x, _y) {
|
function __lua_get_color(_x, _y) {
|
||||||
var surf = surface_get_target();
|
var surf = surface_get_target();
|
||||||
if(!is_surface(surf)) return 0;
|
if(!is_surface(surf)) return 0;
|
||||||
return surface_getpixel_ext(surf, _x, _y);
|
return surface_get_pixel_ext(surf, _x, _y);
|
||||||
}
|
}
|
||||||
function __lua_get_color_surface(surface, _x, _y) {
|
function __lua_get_color_surface(surface, _x, _y) {
|
||||||
if(!is_surface(surface)) return;
|
if(!is_surface(surface)) return;
|
||||||
return surface_getpixel_ext(surface, _x, _y);
|
return surface_get_pixel_ext(surface, _x, _y);
|
||||||
}
|
}
|
||||||
|
|
||||||
function __lua_color_make_rgb(r, g, b, normalize = false) {
|
function __lua_color_make_rgb(r, g, b, normalize = false) {
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
if(_c != current_frame) {
|
if(_c != current_frame) {
|
||||||
frame_progress = true;
|
frame_progress = true;
|
||||||
time_since_last_frame = 0;
|
time_since_last_frame = 0;
|
||||||
UPDATE = RENDER_TYPE.full;
|
UPDATE |= RENDER_TYPE.full;
|
||||||
} else
|
} else
|
||||||
frame_progress = false;
|
frame_progress = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,7 +129,7 @@ function __APPEND_MAP(_map, context = PANEL_GRAPH.getCurrentContext()) {
|
||||||
|
|
||||||
APPENDING = false;
|
APPENDING = false;
|
||||||
PANEL_ANIMATION.updatePropertyList();
|
PANEL_ANIMATION.updatePropertyList();
|
||||||
UPDATE = RENDER_TYPE.full;
|
UPDATE |= RENDER_TYPE.full;
|
||||||
|
|
||||||
if(ds_map_exists(_map, "metadata")) {
|
if(ds_map_exists(_map, "metadata")) {
|
||||||
var meta = _map[? "metadata"];
|
var meta = _map[? "metadata"];
|
||||||
|
|
|
@ -10,7 +10,7 @@ function get_point_from_dist(distMap, attempt = 4) {
|
||||||
var _x = irandom(w - 1);
|
var _x = irandom(w - 1);
|
||||||
var _y = irandom(h - 1);
|
var _y = irandom(h - 1);
|
||||||
|
|
||||||
var p = surface_getpixel(distMap, _x, _y);
|
var p = surface_get_pixel(distMap, _x, _y);
|
||||||
var r = color_get_red(p);
|
var r = color_get_red(p);
|
||||||
|
|
||||||
if(r > v) {
|
if(r > v) {
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
globalvar VERSION, SAVEFILE_VERSION, VERSION_STRING;
|
globalvar VERSION, SAVEFILE_VERSION, VERSION_STRING;
|
||||||
VERSION = 1140;
|
VERSION = 1140;
|
||||||
SAVEFILE_VERSION = 1400;
|
SAVEFILE_VERSION = 1400;
|
||||||
VERSION_STRING = "1.14.0pr7";
|
VERSION_STRING = "1.14.0pr8";
|
||||||
|
|
||||||
globalvar NODES, NODE_MAP, APPEND_MAP, HOTKEYS, HOTKEY_CONTEXT, NODE_INSTANCES;
|
globalvar NODES, NODE_MAP, APPEND_MAP, HOTKEYS, HOTKEY_CONTEXT, NODE_INSTANCES;
|
||||||
|
|
||||||
|
|
|
@ -183,7 +183,7 @@ function __LOAD_PATH(path, readonly = false, safe_mode = false) {
|
||||||
log_warning("LOAD, connect", exception_print(e));
|
log_warning("LOAD, connect", exception_print(e));
|
||||||
}
|
}
|
||||||
|
|
||||||
UPDATE = RENDER_TYPE.full;
|
UPDATE |= RENDER_TYPE.full;
|
||||||
|
|
||||||
LOADING = false;
|
LOADING = false;
|
||||||
MODIFIED = false;
|
MODIFIED = false;
|
||||||
|
|
|
@ -63,12 +63,12 @@ function Node_Average(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
|
||||||
}
|
}
|
||||||
shader_reset();
|
shader_reset();
|
||||||
|
|
||||||
cc = surface_getpixel(_Surf[!_ind], 0, 0);
|
cc = surface_get_pixel(_Surf[!_ind], 0, 0);
|
||||||
|
|
||||||
surface_free(_Surf[0]);
|
surface_free(_Surf[0]);
|
||||||
surface_free(_Surf[1]);
|
surface_free(_Surf[1]);
|
||||||
} else
|
} else
|
||||||
cc = surface_getpixel(inSurf, 0, 0);
|
cc = surface_get_pixel(inSurf, 0, 0);
|
||||||
|
|
||||||
surface_set_target(_outSurf);
|
surface_set_target(_outSurf);
|
||||||
draw_clear(cc);
|
draw_clear(cc);
|
||||||
|
|
|
@ -66,7 +66,7 @@ function Node_Sampler(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
|
||||||
if(px >= ww) continue;
|
if(px >= ww) continue;
|
||||||
if(py >= hh) continue;
|
if(py >= hh) continue;
|
||||||
|
|
||||||
var cc = surface_getpixel(_surf, px, py);
|
var cc = surface_get_pixel(_surf, px, py);
|
||||||
|
|
||||||
r += color_get_red(cc);
|
r += color_get_red(cc);
|
||||||
g += color_get_green(cc);
|
g += color_get_green(cc);
|
||||||
|
|
|
@ -71,8 +71,8 @@ function Node_Crop_Content(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
shader_reset();
|
shader_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
var minBox = surface_getpixel_ext(temp_surface[DIMENSION.width] , 0, 0);
|
var minBox = surface_get_pixel_ext(temp_surface[DIMENSION.width] , 0, 0);
|
||||||
var maxBox = surface_getpixel_ext(temp_surface[DIMENSION.height], 0, 0);
|
var maxBox = surface_get_pixel_ext(temp_surface[DIMENSION.height], 0, 0);
|
||||||
|
|
||||||
var _minx = max(0, color_get_red(minBox) * 256 + color_get_green(minBox) - 1);
|
var _minx = max(0, color_get_red(minBox) * 256 + color_get_green(minBox) - 1);
|
||||||
var _miny = max(0, color_get_blue(minBox) * 256 + color_get_alpha(minBox) - 1);
|
var _miny = max(0, color_get_blue(minBox) * 256 + color_get_alpha(minBox) - 1);
|
||||||
|
|
|
@ -34,7 +34,7 @@ function Node_Find_Pixel(_x, _y, _group = noone) : Node_Processor(_x, _y, _group
|
||||||
shader_reset();
|
shader_reset();
|
||||||
surface_reset_target();
|
surface_reset_target();
|
||||||
|
|
||||||
var pos = surface_getpixel(temp_surface[0], 0, 0);
|
var pos = surface_get_pixel(temp_surface[0], 0, 0);
|
||||||
var _x = round(color_get_red(pos) / 255 * surface_get_width(_surf));
|
var _x = round(color_get_red(pos) / 255 * surface_get_width(_surf));
|
||||||
var _y = round(color_get_green(pos) / 255 * surface_get_height(_surf));
|
var _y = round(color_get_green(pos) / 255 * surface_get_height(_surf));
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ function Node_Flood_Fill(_x, _y, _group = noone) : Node_Processor(_x, _y, _group
|
||||||
var _thr = _data[6];
|
var _thr = _data[6];
|
||||||
var _dia = _data[7];
|
var _dia = _data[7];
|
||||||
|
|
||||||
var _filC = surface_getpixel_ext(inSurf, _pos[0], _pos[1]);
|
var _filC = surface_get_pixel_ext(inSurf, _pos[0], _pos[1]);
|
||||||
|
|
||||||
var sw = surface_get_width(inSurf);
|
var sw = surface_get_width(inSurf);
|
||||||
var sh = surface_get_height(inSurf);
|
var sh = surface_get_height(inSurf);
|
||||||
|
|
|
@ -29,7 +29,7 @@ function Node_Image_Sheet(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
inputs[| 9] = nodeValue("Orientation", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
inputs[| 9] = nodeValue("Orientation", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||||
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Horizontal", "Vertical"]);
|
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Horizontal", "Vertical"]);
|
||||||
|
|
||||||
inputs[| 10] = nodeValue("Auto fill", self, JUNCTION_CONNECT.input, VALUE_TYPE.trigger, 0)
|
inputs[| 10] = nodeValue("Auto fill", self, JUNCTION_CONNECT.input, VALUE_TYPE.trigger, 0, "Automatically set amount based on sprite size.")
|
||||||
.setDisplay(VALUE_DISPLAY.button, [ function() {
|
.setDisplay(VALUE_DISPLAY.button, [ function() {
|
||||||
var _sur = inputs[| 0].getValue();
|
var _sur = inputs[| 0].getValue();
|
||||||
if(!is_surface(_sur) || _sur == DEF_SURFACE) return;
|
if(!is_surface(_sur) || _sur == DEF_SURFACE) return;
|
||||||
|
@ -62,11 +62,16 @@ function Node_Image_Sheet(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
}, "Sync frames"] );
|
}, "Sync frames"] );
|
||||||
|
|
||||||
inputs[| 12] = nodeValue("Filter empty output", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false);
|
inputs[| 12] = nodeValue("Filter empty output", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false);
|
||||||
|
|
||||||
|
inputs[| 13] = nodeValue("Filtered Pixel", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||||
|
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Transparent", "Color" ]);
|
||||||
|
|
||||||
|
inputs[| 14] = nodeValue("Filtered Color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_black)
|
||||||
|
|
||||||
input_display_list = [
|
input_display_list = [
|
||||||
["Sprite", false], 0, 1, 6, 10,
|
["Sprite", false], 0, 1, 6,
|
||||||
["Sheet", false], 3, 9, 4, 5,
|
["Sheet", false], 3, 10, 9, 4, 5,
|
||||||
["Output", false], 7, 8, 12, 11
|
["Output", false], 7, 8, 12, 13, 14, 11
|
||||||
];
|
];
|
||||||
|
|
||||||
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);
|
||||||
|
@ -256,9 +261,14 @@ function Node_Image_Sheet(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
}
|
}
|
||||||
|
|
||||||
static step = function() {
|
static step = function() {
|
||||||
var _out = inputs[| 7].getValue();
|
var _out = inputs[| 7].getValue();
|
||||||
|
var _filt = inputs[| 12].getValue();
|
||||||
|
var _flty = inputs[| 13].getValue();
|
||||||
|
|
||||||
inputs[| 11].setVisible(!_out);
|
inputs[| 11].setVisible(!_out);
|
||||||
inputs[| 8].setVisible(!_out);
|
inputs[| 8].setVisible(!_out);
|
||||||
|
inputs[| 13].setVisible(_filt);
|
||||||
|
inputs[| 14].setVisible(_filt && _flty);
|
||||||
}
|
}
|
||||||
|
|
||||||
static onInspector1Update = function() {
|
static onInspector1Update = function() {
|
||||||
|
@ -284,6 +294,9 @@ function Node_Image_Sheet(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
var hh = _dim[1] + _pad[1] + _pad[3];
|
var hh = _dim[1] + _pad[1] + _pad[3];
|
||||||
|
|
||||||
var _filt = inputs[| 12].getValue();
|
var _filt = inputs[| 12].getValue();
|
||||||
|
var _fltp = inputs[| 13].getValue();
|
||||||
|
var _flcl = inputs[| 14].getValue();
|
||||||
|
|
||||||
var cDep = attrDepth();
|
var cDep = attrDepth();
|
||||||
curr_dim = _dim;
|
curr_dim = _dim;
|
||||||
curr_amo = is_array(_amo)? _amo : [1, 1];
|
curr_amo = is_array(_amo)? _amo : [1, 1];
|
||||||
|
@ -323,9 +336,13 @@ function Node_Image_Sheet(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
buffer_get_surface(_buff, _empS, 0);
|
buffer_get_surface(_buff, _empS, 0);
|
||||||
buffer_seek(_buff, buffer_seek_start, 0);
|
buffer_seek(_buff, buffer_seek_start, 0);
|
||||||
var empty = true;
|
var empty = true;
|
||||||
var c0 = buffer_read(_buff, buffer_u32) & ~(0b11111111 << 24);
|
|
||||||
repeat(filSize * filSize - 1) {
|
repeat(filSize * filSize - 1) {
|
||||||
if(buffer_read(_buff, buffer_u32) & ~(0b11111111 << 24) != c0) {
|
var c = buffer_read(_buff, buffer_u32);
|
||||||
|
if(_fltp == 0 && ((c & 0xFF000000) >> 24) != 0) {
|
||||||
|
empty = false;
|
||||||
|
break;
|
||||||
|
} else if(_fltp == 1 && (c & 0x00FFFFFF) != _flcl) {
|
||||||
empty = false;
|
empty = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -653,11 +653,11 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor {
|
||||||
global.SURFACE_FORMAT_NAME = [];
|
global.SURFACE_FORMAT_NAME = [];
|
||||||
|
|
||||||
for( var i = 0; i < array_length(surface_format); i++ ) {
|
for( var i = 0; i < array_length(surface_format); i++ ) {
|
||||||
if(surface_format_is_supported(surface_format[i])) {
|
var sup = surface_format_is_supported(surface_format[i]);
|
||||||
array_push(global.SURFACE_FORMAT, surface_format[i]);
|
array_push(global.SURFACE_FORMAT, surface_format[i]);
|
||||||
array_push(global.SURFACE_FORMAT_NAME, surface_format_name[i]);
|
array_push(global.SURFACE_FORMAT_NAME, (sup? "" : "-") + surface_format_name[i]);
|
||||||
} else
|
|
||||||
log_message("WARNING", "Surface format [" + surface_format_name[i] + "] not supported in this device.");
|
if(!sup) log_message("WARNING", "Surface format [" + surface_format_name[i] + "] not supported in this device.");
|
||||||
}
|
}
|
||||||
|
|
||||||
global.SURFACE_FORMAT_NAME_PROCESS = [ "Input" ];
|
global.SURFACE_FORMAT_NAME_PROCESS = [ "Input" ];
|
||||||
|
@ -665,8 +665,8 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor {
|
||||||
}
|
}
|
||||||
|
|
||||||
function attribute_surface_depth(label = true) {
|
function attribute_surface_depth(label = true) {
|
||||||
attributes[? "color_depth"] = inputs[| 0].type == VALUE_TYPE.surface? 0 : 1;
|
|
||||||
depth_array = inputs[| 0].type == VALUE_TYPE.surface? global.SURFACE_FORMAT_NAME_PROCESS : global.SURFACE_FORMAT_NAME;
|
depth_array = inputs[| 0].type == VALUE_TYPE.surface? global.SURFACE_FORMAT_NAME_PROCESS : global.SURFACE_FORMAT_NAME;
|
||||||
|
attributes[? "color_depth"] = array_find(depth_array, "8 bit RGBA");
|
||||||
|
|
||||||
if(label) array_push(attributeEditors, "Surface");
|
if(label) array_push(attributeEditors, "Surface");
|
||||||
array_push(attributeEditors, ["Color depth", "color_depth",
|
array_push(attributeEditors, ["Color depth", "color_depth",
|
||||||
|
|
|
@ -122,7 +122,7 @@ function Node_Seperate_Shape(_x, _y, _group = noone) : Node(_x, _y, _group) cons
|
||||||
BLEND_NORMAL;
|
BLEND_NORMAL;
|
||||||
surface_reset_target();
|
surface_reset_target();
|
||||||
|
|
||||||
var px = surface_getpixel(_pixel_surface, 0, 0);
|
var px = surface_get_pixel(_pixel_surface, 0, 0);
|
||||||
|
|
||||||
if(px == 0) return;
|
if(px == 0) return;
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ function Node_Seperate_Shape(_x, _y, _group = noone) : Node(_x, _y, _group) cons
|
||||||
DRAW_CLEAR
|
DRAW_CLEAR
|
||||||
BLEND_OVERRIDE;
|
BLEND_OVERRIDE;
|
||||||
shader_set(sh_seperate_shape_sep);
|
shader_set(sh_seperate_shape_sep);
|
||||||
var ccx = surface_getpixel_ext(_pixel_surface, 1 + i, 0);
|
var ccx = surface_get_pixel_ext(_pixel_surface, 1 + i, 0);
|
||||||
var alpha = (ccx >> 24) & 255;
|
var alpha = (ccx >> 24) & 255;
|
||||||
var blue = (ccx >> 16) & 255;
|
var blue = (ccx >> 16) & 255;
|
||||||
var green = (ccx >> 8) & 255;
|
var green = (ccx >> 8) & 255;
|
||||||
|
|
|
@ -2,12 +2,12 @@ function Node_Surface_Replace(_x, _y, _group = noone) : Node_Processor(_x, _y, _
|
||||||
name = "Replace Image";
|
name = "Replace Image";
|
||||||
preview_channel = 1;
|
preview_channel = 1;
|
||||||
|
|
||||||
inputs[| 0] = nodeValue("Base image", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone );
|
inputs[| 0] = nodeValue("Base Image", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone );
|
||||||
|
|
||||||
inputs[| 1] = nodeValue("Target image", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone )
|
inputs[| 1] = nodeValue("Target Image", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone )
|
||||||
.setArrayDepth(1);
|
.setArrayDepth(1);
|
||||||
|
|
||||||
inputs[| 2] = nodeValue("Replacement image", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone )
|
inputs[| 2] = nodeValue("Replacement Image", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone )
|
||||||
.setArrayDepth(1);
|
.setArrayDepth(1);
|
||||||
|
|
||||||
inputs[| 3] = nodeValue("Threshold", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.1 )
|
inputs[| 3] = nodeValue("Threshold", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.1 )
|
||||||
|
@ -17,7 +17,7 @@ function Node_Surface_Replace(_x, _y, _group = noone) : Node_Processor(_x, _y, _
|
||||||
|
|
||||||
inputs[| 5] = nodeValue("Fast Mode", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true )
|
inputs[| 5] = nodeValue("Fast Mode", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true )
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
input_display_list = [
|
input_display_list = [
|
||||||
["Surface", true], 0, 1, 2,
|
["Surface", true], 0, 1, 2,
|
||||||
|
|
|
@ -396,7 +396,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
global_edit = new textBox(TEXTBOX_INPUT.text, function(str) {
|
global_edit = new textBox(TEXTBOX_INPUT.text, function(str) {
|
||||||
global_key = str;
|
global_key = str;
|
||||||
node.triggerRender();
|
node.triggerRender();
|
||||||
UPDATE = RENDER_TYPE.partial;
|
UPDATE |= RENDER_TYPE.partial;
|
||||||
});
|
});
|
||||||
global_edit.boxColor = COLORS._main_value_positive;
|
global_edit.boxColor = COLORS._main_value_positive;
|
||||||
global_edit.align = fa_left;
|
global_edit.align = fa_left;
|
||||||
|
@ -1163,7 +1163,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
if(_update) node.valueUpdate(index);
|
if(_update) node.valueUpdate(index);
|
||||||
node.clearCacheForward();
|
node.clearCacheForward();
|
||||||
|
|
||||||
UPDATE = RENDER_TYPE.partial;
|
UPDATE |= RENDER_TYPE.partial;
|
||||||
}
|
}
|
||||||
|
|
||||||
cache_array[0] = false;
|
cache_array[0] = false;
|
||||||
|
@ -1257,7 +1257,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
node.triggerRender();
|
node.triggerRender();
|
||||||
node.clearCacheForward();
|
node.clearCacheForward();
|
||||||
|
|
||||||
UPDATE = RENDER_TYPE.partial;
|
UPDATE |= RENDER_TYPE.partial;
|
||||||
}
|
}
|
||||||
|
|
||||||
cache_array[0] = false;
|
cache_array[0] = false;
|
||||||
|
|
|
@ -308,10 +308,10 @@ function Node_Mesh_Warp(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
|
||||||
if(useArray) {
|
if(useArray) {
|
||||||
fill = true;
|
fill = true;
|
||||||
} else {
|
} else {
|
||||||
var c0 = surface_getpixel(cont, j * gw, i * gh);
|
var c0 = surface_get_pixel(cont, j * gw, i * gh);
|
||||||
var c1 = surface_getpixel(cont, j * gw - 1, i * gh);
|
var c1 = surface_get_pixel(cont, j * gw - 1, i * gh);
|
||||||
var c2 = surface_getpixel(cont, j * gw, i * gh - 1);
|
var c2 = surface_get_pixel(cont, j * gw, i * gh - 1);
|
||||||
var c3 = surface_getpixel(cont, j * gw - 1, i * gh - 1);
|
var c3 = surface_get_pixel(cont, j * gw - 1, i * gh - 1);
|
||||||
fill = c0 + c1 + c2 + c3 > 0;
|
fill = c0 + c1 + c2 + c3 > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -437,7 +437,7 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
sample_y = floor((my - canvas_y) / canvas_s);
|
sample_y = floor((my - canvas_y) / canvas_s);
|
||||||
var surf = getNodePreviewSurface();
|
var surf = getNodePreviewSurface();
|
||||||
if(is_surface(surf))
|
if(is_surface(surf))
|
||||||
sample_color = surface_getpixel_ext(surf, sample_x, sample_y);
|
sample_color = surface_get_pixel_ext(surf, sample_x, sample_y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -716,7 +716,7 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
var cy = ui(10);
|
var cy = ui(10);
|
||||||
var cw = ui(32);
|
var cw = ui(32);
|
||||||
var ch = scHeight - ui(16);
|
var ch = scHeight - ui(16);
|
||||||
|
|
||||||
if(sample_color != noone) {
|
if(sample_color != noone) {
|
||||||
draw_set_color(sample_color);
|
draw_set_color(sample_color);
|
||||||
draw_rectangle(cx, cy, cx + cw, cy + ch, false);
|
draw_rectangle(cx, cy, cx + cw, cy + ch, false);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#region evaluator
|
#region data
|
||||||
global.EQUATION_PRES = ds_map_create();
|
global.EQUATION_PRES = ds_map_create();
|
||||||
global.EQUATION_PRES[? "+"] = 1;
|
global.EQUATION_PRES[? "+"] = 1;
|
||||||
global.EQUATION_PRES[? "-"] = 1;
|
global.EQUATION_PRES[? "-"] = 1;
|
||||||
|
@ -12,7 +12,9 @@
|
||||||
global.EQUATION_PRES[? "round"] = 5;
|
global.EQUATION_PRES[? "round"] = 5;
|
||||||
global.EQUATION_PRES[? "ceil"] = 5;
|
global.EQUATION_PRES[? "ceil"] = 5;
|
||||||
global.EQUATION_PRES[? "floor"] = 5;
|
global.EQUATION_PRES[? "floor"] = 5;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region evaluator
|
||||||
function evaluateFunction(fx, params = {}) {
|
function evaluateFunction(fx, params = {}) {
|
||||||
var pres = global.EQUATION_PRES;
|
var pres = global.EQUATION_PRES;
|
||||||
var vl = ds_stack_create();
|
var vl = ds_stack_create();
|
||||||
|
|
107
scripts/string_eval_tree/string_eval_tree.gml
Normal file
107
scripts/string_eval_tree/string_eval_tree.gml
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
#region evaluator
|
||||||
|
function __fucnTree(symbol, l = noone, r = noone) constructor {
|
||||||
|
self.symbol = symbol;
|
||||||
|
self.l = l;
|
||||||
|
self.r = r;
|
||||||
|
isFunc = false;
|
||||||
|
|
||||||
|
static eval = function() {
|
||||||
|
var v1 = is_struct(l)? l.eval() : l;
|
||||||
|
var v2 = is_struct(r)? r.eval() : r;
|
||||||
|
|
||||||
|
switch(symbol) {
|
||||||
|
case "+": return v1 + v2;
|
||||||
|
case "-": return v1 - v2;
|
||||||
|
case "*": return v1 * v2;
|
||||||
|
case "^": return power(v1, v2);
|
||||||
|
case "/": return v1 / v2;
|
||||||
|
|
||||||
|
case "sin" : return sin(v1);
|
||||||
|
case "cos" : return cos(v1);
|
||||||
|
case "tan" : return tan(v1);
|
||||||
|
case "abs" : return abs(v1);
|
||||||
|
case "round" : return round(v1);
|
||||||
|
case "ceil" : return ceil(v1);
|
||||||
|
case "floor" : return floor(v1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function evaluateFunctionTree(fx, params = {}) {
|
||||||
|
var pres = global.EQUATION_PRES;
|
||||||
|
var vl = ds_stack_create();
|
||||||
|
var op = ds_stack_create();
|
||||||
|
|
||||||
|
fx = string_replace_all(fx, " ", "");
|
||||||
|
fx = string_replace_all(fx, "\n", "");
|
||||||
|
|
||||||
|
var len = string_length(fx);
|
||||||
|
var l = 1;
|
||||||
|
var ch, cch;
|
||||||
|
|
||||||
|
while(l <= len) {
|
||||||
|
ch = string_char_at(fx, l);
|
||||||
|
|
||||||
|
if(ds_map_exists(pres, ch)) {
|
||||||
|
if(ds_stack_empty(op)) ds_stack_push(op, ch);
|
||||||
|
else {
|
||||||
|
if(pres[? ch] > pres[? ds_stack_top(op)] || ds_stack_top(op) == "(") ds_stack_push(op, ch);
|
||||||
|
else {
|
||||||
|
while(pres[? ch] <= pres[? ds_stack_top(op)] && !ds_stack_empty(op)) {
|
||||||
|
ds_stack_push(vl, evalToken(ds_stack_pop(op), vl));
|
||||||
|
}
|
||||||
|
ds_stack_push(op, ch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
l++;
|
||||||
|
} else if (ch == "(") {
|
||||||
|
ds_stack_push(op, ch);
|
||||||
|
l++;
|
||||||
|
} else if (ch == ")") {
|
||||||
|
while(ds_stack_top(op) != "(" && !ds_stack_empty(op)) {
|
||||||
|
ds_stack_push(vl, evalToken(ds_stack_pop(op), vl));
|
||||||
|
}
|
||||||
|
ds_stack_pop(op);
|
||||||
|
l++;
|
||||||
|
} else {
|
||||||
|
var vsl = "";
|
||||||
|
|
||||||
|
while(l <= len) {
|
||||||
|
cch = string_char_at(fx, l);
|
||||||
|
if(ds_map_exists(pres, cch) || cch == ")" || cch == "(") break;
|
||||||
|
|
||||||
|
vsl += cch;
|
||||||
|
l++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(vsl == "") continue;
|
||||||
|
|
||||||
|
if(ds_map_exists(pres, vsl)) {
|
||||||
|
ds_stack_push(op, vsl);
|
||||||
|
} else {
|
||||||
|
switch(vsl) {
|
||||||
|
case "e": ds_stack_push(vl, 2.71828); break;
|
||||||
|
case "pi": ds_stack_push(vl, pi); break;
|
||||||
|
|
||||||
|
default :
|
||||||
|
if(variable_struct_exists(params, vsl))
|
||||||
|
ds_stack_push(vl, variable_struct_get(params, vsl));
|
||||||
|
else
|
||||||
|
ds_stack_push(vl, toNumber(vsl));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while(!ds_stack_empty(op)) {
|
||||||
|
ds_stack_push(vl, evalToken(ds_stack_pop(op), vl));
|
||||||
|
}
|
||||||
|
ds_stack_destroy(op);
|
||||||
|
|
||||||
|
return ds_stack_empty(vl)? 0 : ds_stack_pop(vl);
|
||||||
|
}
|
||||||
|
#endregion
|
11
scripts/string_eval_tree/string_eval_tree.yy
Normal file
11
scripts/string_eval_tree/string_eval_tree.yy
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMScript",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "string_eval_tree",
|
||||||
|
"isCompatibility": false,
|
||||||
|
"isDnD": false,
|
||||||
|
"parent": {
|
||||||
|
"name": "eval",
|
||||||
|
"path": "folders/functions/eval.yy",
|
||||||
|
},
|
||||||
|
}
|
|
@ -33,10 +33,11 @@ function number_to_hex(val) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function color_get_hex(color, alpha = false) {
|
function color_get_hex(color, alpha = false) {
|
||||||
var r = color_get_red(color);
|
var arr = is_array(color) && array_length(color) == 4;
|
||||||
var g = color_get_green(color);
|
var r = arr? round(color[0] * 256) : color_get_red(color);
|
||||||
var b = color_get_blue(color);
|
var g = arr? round(color[1] * 256) : color_get_green(color);
|
||||||
var a = color_get_alpha(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) : "");
|
var hex = number_to_hex(r) + number_to_hex(g) + number_to_hex(b) + (alpha? " " + number_to_hex(a) : "");
|
||||||
return hex;
|
return hex;
|
||||||
|
|
|
@ -47,14 +47,17 @@ function surface_save_safe(surface, path) {
|
||||||
var f = surface_get_format(surface);
|
var f = surface_get_format(surface);
|
||||||
var w = surface_get_width(surface);
|
var w = surface_get_width(surface);
|
||||||
var h = surface_get_height(surface);
|
var h = surface_get_height(surface);
|
||||||
var s = noone;
|
var s = surface_create(w, h, surface_rgba8unorm);
|
||||||
|
|
||||||
switch(f) {
|
switch(f) {
|
||||||
case surface_rgba4unorm :
|
case surface_rgba4unorm :
|
||||||
case surface_rgba8unorm :
|
case surface_rgba8unorm :
|
||||||
case surface_rgba16float :
|
case surface_rgba16float :
|
||||||
case surface_rgba32float :
|
case surface_rgba32float :
|
||||||
surface_save(surface, path);
|
surface_set_shader(s, sh_draw_normal);
|
||||||
|
draw_surface(surface, 0, 0);
|
||||||
|
surface_reset_shader();
|
||||||
|
surface_save(s, path);
|
||||||
return;
|
return;
|
||||||
case surface_r8unorm :
|
case surface_r8unorm :
|
||||||
s = surface_create(w, h, surface_rgba8unorm);
|
s = surface_create(w, h, surface_rgba8unorm);
|
||||||
|
@ -69,14 +72,9 @@ function surface_save_safe(surface, path) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
surface_set_target(s);
|
surface_set_shader(s, sh_draw_single_channel);
|
||||||
shader_set(sh_draw_single_channel);
|
draw_surface(surface, 0, 0);
|
||||||
DRAW_CLEAR
|
surface_reset_shader();
|
||||||
BLEND_OVERRIDE
|
|
||||||
draw_surface(s, 0, 0);
|
|
||||||
BLEND_NORMAL
|
|
||||||
shader_reset();
|
|
||||||
surface_reset_target();
|
|
||||||
|
|
||||||
surface_save(s, path);
|
surface_save(s, path);
|
||||||
surface_free(s);
|
surface_free(s);
|
||||||
|
@ -105,6 +103,25 @@ function surface_verify(surf, w, h, format = surface_rgba8unorm) {
|
||||||
return surface_size_to(surf, w, h, format);
|
return surface_size_to(surf, w, h, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//get
|
||||||
|
function surface_get_pixel(surface, _x, _y) {
|
||||||
|
if(!is_surface(surface)) return;
|
||||||
|
var f = surface_get_format(surface);
|
||||||
|
var px = surface_getpixel(surface, _x, _y);
|
||||||
|
|
||||||
|
if(is_real(px)) return px;
|
||||||
|
return round(px[0] * (255 * power(256, 0))) + round(px[1] * (255 * power(256, 1))) + round(px[2] * (255 * power(256, 2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
function surface_get_pixel_ext(surface, _x, _y) {
|
||||||
|
if(!is_surface(surface)) return;
|
||||||
|
var f = surface_get_format(surface);
|
||||||
|
var px = surface_getpixel_ext(surface, _x, _y);
|
||||||
|
|
||||||
|
if(is_real(px)) return px;
|
||||||
|
return round(px[0] * (255 * power(256, 0))) + round(px[1] * (255 * power(256, 1))) + round(px[2] * (255 * power(256, 2))) + round(px[3] * (255 * power(256, 3)));
|
||||||
|
}
|
||||||
|
|
||||||
//create
|
//create
|
||||||
function surface_create_size(surface, format = surface_rgba8unorm) {
|
function surface_create_size(surface, format = surface_rgba8unorm) {
|
||||||
var s = surface_create_valid(surface_get_width(surface), surface_get_height(surface), format);
|
var s = surface_create_valid(surface_get_width(surface), surface_get_height(surface), format);
|
||||||
|
|
|
@ -20,6 +20,7 @@ void main() {
|
||||||
vec2 px = v_vTexcoord * dimension;
|
vec2 px = v_vTexcoord * dimension;
|
||||||
float pixels_count = target_dim.x * target_dim.y;
|
float pixels_count = target_dim.x * target_dim.y;
|
||||||
float target_pixels = pixels_count * (1. - threshold);
|
float target_pixels = pixels_count * (1. - threshold);
|
||||||
|
float content_px = 0.;
|
||||||
float match = 0.;
|
float match = 0.;
|
||||||
vec2 baseTx = 1. / dimension;
|
vec2 baseTx = 1. / dimension;
|
||||||
vec2 targTx = 1. / target_dim;
|
vec2 targTx = 1. / target_dim;
|
||||||
|
@ -28,11 +29,14 @@ void main() {
|
||||||
|
|
||||||
for( float i = 0.; i < target_dim.x; i++ )
|
for( float i = 0.; i < target_dim.x; i++ )
|
||||||
for( float j = 0.; j < target_dim.y; j++ ) {
|
for( float j = 0.; j < target_dim.y; j++ ) {
|
||||||
|
vec4 targ = texture2D( target, vec2(i, j) * targTx );
|
||||||
|
if(targ.a == 0.) continue;
|
||||||
|
|
||||||
vec2 bpx = px + vec2(i, j);
|
vec2 bpx = px + vec2(i, j);
|
||||||
vec4 base = texture2D( gm_BaseTexture, bpx * baseTx );
|
vec4 base = texture2D( gm_BaseTexture, bpx * baseTx );
|
||||||
vec4 targ = texture2D( target, vec2(i, j) * targTx );
|
|
||||||
|
|
||||||
if(distance(base.rgb * base.a, targ.rgb * targ.a) <= threshold) {
|
content_px++;
|
||||||
|
if(distance(base, targ) <= 2. * threshold) {
|
||||||
match++;
|
match++;
|
||||||
if(match >= target_pixels) {
|
if(match >= target_pixels) {
|
||||||
gl_FragColor = vec4(1., index, 0., 1.);
|
gl_FragColor = vec4(1., index, 0., 1.);
|
||||||
|
@ -41,5 +45,8 @@ void main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//gl_FragColor = vec4(match / pixels_count, index, 0., 1.);
|
if(match / content_px >= (1. - threshold)) {
|
||||||
|
gl_FragColor = vec4(1., index, 0., 1.);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,18 +18,22 @@ float matchTemplate(vec2 pos) {
|
||||||
float match = 0.;
|
float match = 0.;
|
||||||
vec2 baseTx = 1. / dimension;
|
vec2 baseTx = 1. / dimension;
|
||||||
vec2 targTx = 1. / target_dim;
|
vec2 targTx = 1. / target_dim;
|
||||||
|
float content_px = 0.;
|
||||||
|
|
||||||
for( float i = 0.; i < target_dim.x; i++ )
|
for( float i = 0.; i < target_dim.x; i++ )
|
||||||
for( float j = 0.; j < target_dim.y; j++ ) {
|
for( float j = 0.; j < target_dim.y; j++ ) {
|
||||||
|
vec4 targ = texture2D( target, vec2(i, j) * targTx );
|
||||||
|
if(targ.a == 0.) continue;
|
||||||
|
|
||||||
vec2 bpx = pos + vec2(i, j);
|
vec2 bpx = pos + vec2(i, j);
|
||||||
vec4 base = texture2D( gm_BaseTexture, bpx * baseTx );
|
vec4 base = texture2D( gm_BaseTexture, bpx * baseTx );
|
||||||
vec4 targ = texture2D( target, vec2(i, j) * targTx );
|
|
||||||
|
|
||||||
if(distance(base.rgb * base.a, targ.rgb * targ.a) <= threshold)
|
content_px++;
|
||||||
|
if(distance(base, targ) <= 2. * threshold)
|
||||||
match++;
|
match++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return match;
|
return match / content_px;
|
||||||
}
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
@ -41,7 +45,6 @@ void main() {
|
||||||
|
|
||||||
vec2 px = v_vTexcoord * dimension;
|
vec2 px = v_vTexcoord * dimension;
|
||||||
|
|
||||||
float target_pixels = target_dim.x * target_dim.y * (1. - threshold);
|
|
||||||
float match = 0.;
|
float match = 0.;
|
||||||
vec2 matchPos = vec2(0., 0.);
|
vec2 matchPos = vec2(0., 0.);
|
||||||
vec2 matchUv = vec2(0., 0.);
|
vec2 matchUv = vec2(0., 0.);
|
||||||
|
@ -60,5 +63,5 @@ void main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_FragColor = match >= target_pixels? vec4(matchPos, index, 1.) : vec4(vec3(0.), 0.);
|
gl_FragColor = match >= (1. - threshold)? vec4(matchPos, index, 1.) : vec4(vec3(0.), 0.);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue