This commit is contained in:
Tanasart 2023-11-23 19:39:35 +07:00
parent 581b924cee
commit 2bec138844
30 changed files with 595 additions and 441 deletions

View file

@ -241,6 +241,7 @@
{"name":"button","order":34,"path":"folders/widgets/button.yy",},
{"name":"rotator","order":35,"path":"folders/widgets/rotator.yy",},
{"name":"text","order":36,"path":"folders/widgets/text.yy",},
{"name":"find boundary","order":9,"path":"folders/shader/misc/find boundary.yy",},
],
"ResourceOrderSettings": [
{"name":"s_node_corner","order":16,"path":"sprites/s_node_corner/s_node_corner.yy",},
@ -494,6 +495,7 @@
{"name":"s_node_gabor","order":32,"path":"sprites/s_node_gabor/s_node_gabor.yy",},
{"name":"s_node_dithering","order":21,"path":"sprites/s_node_dithering/s_node_dithering.yy",},
{"name":"node_3d_mesh_extrude","order":8,"path":"scripts/node_3d_mesh_extrude/node_3d_mesh_extrude.yy",},
{"name":"sh_find_boundary_stretch_x","order":1,"path":"shaders/sh_find_boundary_stretch_x/sh_find_boundary_stretch_x.yy",},
{"name":"s_workshop_badge","order":1,"path":"sprites/s_workshop_badge/s_workshop_badge.yy",},
{"name":"node_pb_fx_brick","order":12,"path":"scripts/node_pb_fx_brick/node_pb_fx_brick.yy",},
{"name":"node_compare","order":16,"path":"scripts/node_compare/node_compare.yy",},
@ -839,6 +841,7 @@
{"name":"pcx_parse","order":3,"path":"scripts/pcx_parse/pcx_parse.yy",},
{"name":"node_9slice","order":5,"path":"scripts/node_9slice/node_9slice.yy",},
{"name":"fd_rectangle_add_velocity_surface","order":24,"path":"scripts/fd_rectangle_add_velocity_surface/fd_rectangle_add_velocity_surface.yy",},
{"name":"sh_find_boundary_stretch_y","order":2,"path":"shaders/sh_find_boundary_stretch_y/sh_find_boundary_stretch_y.yy",},
{"name":"BBMOD_Vec2","order":4,"path":"scripts/BBMOD_Vec2/BBMOD_Vec2.yy",},
{"name":"sh_grid_hex","order":1,"path":"shaders/sh_grid_hex/sh_grid_hex.yy",},
{"name":"s_node_lua_surface","order":18,"path":"sprites/s_node_lua_surface/s_node_lua_surface.yy",},
@ -1134,7 +1137,6 @@
{"name":"s_node_fluidSim_vortex","order":8,"path":"sprites/s_node_fluidSim_vortex/s_node_fluidSim_vortex.yy",},
{"name":"string_hexadecimal","order":1,"path":"scripts/string_hexadecimal/string_hexadecimal.yy",},
{"name":"s_node_camera","order":3,"path":"sprites/s_node_camera/s_node_camera.yy",},
{"name":"sh_find_boundary","order":2,"path":"shaders/sh_find_boundary/sh_find_boundary.yy",},
{"name":"Obj_FirebaseFirestore_Document_Set","order":6,"path":"objects/Obj_FirebaseFirestore_Document_Set/Obj_FirebaseFirestore_Document_Set.yy",},
{"name":"_node_strand_affector","order":10,"path":"scripts/_node_strand_affector/_node_strand_affector.yy",},
{"name":"Steamworks","order":2,"path":"extensions/Steamworks/Steamworks.yy",},

View file

@ -276,6 +276,7 @@
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"button","folderPath":"folders/widgets/button.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"rotator","folderPath":"folders/widgets/rotator.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"text","folderPath":"folders/widgets/text.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"find boundary","folderPath":"folders/shader/misc/find boundary.yy",},
],
"IncludedFiles": [
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"ApolloHelp.html","ConfigValues":{"Itch":{"CopyToMask":"0",},},"CopyToMask":-1,"filePath":"datafiles",},
@ -1088,6 +1089,7 @@
{"id":{"name":"s_node_gabor","path":"sprites/s_node_gabor/s_node_gabor.yy",},},
{"id":{"name":"s_node_dithering","path":"sprites/s_node_dithering/s_node_dithering.yy",},},
{"id":{"name":"node_3d_mesh_extrude","path":"scripts/node_3d_mesh_extrude/node_3d_mesh_extrude.yy",},},
{"id":{"name":"sh_find_boundary_stretch_x","path":"shaders/sh_find_boundary_stretch_x/sh_find_boundary_stretch_x.yy",},},
{"id":{"name":"s_node_boolean","path":"sprites/s_node_boolean/s_node_boolean.yy",},},
{"id":{"name":"s_workshop_badge","path":"sprites/s_workshop_badge/s_workshop_badge.yy",},},
{"id":{"name":"node_pb_fx_brick","path":"scripts/node_pb_fx_brick/node_pb_fx_brick.yy",},},
@ -1487,6 +1489,7 @@
{"id":{"name":"pcx_parse","path":"scripts/pcx_parse/pcx_parse.yy",},},
{"id":{"name":"node_9slice","path":"scripts/node_9slice/node_9slice.yy",},},
{"id":{"name":"fd_rectangle_add_velocity_surface","path":"scripts/fd_rectangle_add_velocity_surface/fd_rectangle_add_velocity_surface.yy",},},
{"id":{"name":"sh_find_boundary_stretch_y","path":"shaders/sh_find_boundary_stretch_y/sh_find_boundary_stretch_y.yy",},},
{"id":{"name":"sprite_add_functions","path":"scripts/sprite_add_functions/sprite_add_functions.yy",},},
{"id":{"name":"BBMOD_Vec2","path":"scripts/BBMOD_Vec2/BBMOD_Vec2.yy",},},
{"id":{"name":"sh_grid_hex","path":"shaders/sh_grid_hex/sh_grid_hex.yy",},},

View file

@ -32,7 +32,7 @@ function Node_Active_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) const
[ "Brush properties", false ], 1, 5, 6, 8,
];
brush_prev = [];
brush_prev = noone;
brush_next_dist = 0;
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) {
@ -68,19 +68,21 @@ function Node_Active_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) const
_surf = surface_verify(_surf, _dim[0], _dim[1]);
var _bdense = _bdst[0] == _bdst[1] && _bdst[0] == 1;
outputs[| 0].setValue(_surf);
surface_set_target(_surf);
if(CURRENT_FRAME == 0) DRAW_CLEAR
if(_bact) {
if(!is_surface(_bsurf)) {
if(CURRENT_FRAME == 0)
if(CURRENT_FRAME == 0 || brush_prev == noone)
draw_point_color(_bpos[0] - 1, _bpos[1] - 1, _bcol);
else
draw_line_color(brush_prev[2][0] - 1, brush_prev[2][1] - 1, _bpos[0] - 1, _bpos[1] - 1, brush_prev[5], _bcol);
} else {
BLEND_ALPHA
if(CURRENT_FRAME == 0) {
if(CURRENT_FRAME == 0 || brush_prev == noone) {
brush_draw_surface(_bsurf, _bpos[0], _bpos[1], _bsca[0], _bsca[1], _brot, _bcol, _balp);
} else {
var _x0 = brush_prev[2][0];
@ -120,7 +122,5 @@ function Node_Active_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) const
for( var i = 0, n = array_length(inputs_data); i < n; i++ )
brush_prev[i] = variable_clone(inputs_data[i], 1);
outputs[| 0].setValue(_surf);
} #endregion
}

View file

@ -4,7 +4,7 @@ function Node_Camera(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
inputs[| 0] = nodeValue("Background", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0);
onSurfaceSize = function() { return getInputData(0, DEF_SURF); };
onSurfaceSize = function() { return surface_get_dimension(getInputData(0, DEF_SURF)); };
inputs[| 1] = nodeValue("Focus area", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 0, 0, 16, 16, AREA_SHAPE.rectangle ])
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });

View file

@ -25,7 +25,7 @@ function Node_Crop_Content(_x, _y, _group = noone) : Node(_x, _y, _group) constr
drag_my = 0;
drag_sv = 0;
temp_surface = [ surface_create(1, 1, surface_r32float) ];
temp_surface = [ surface_create(1, 1, surface_r32float), surface_create(1, 1, surface_r32float) ];
static update = function() {
var _inSurf = getInputData(0);
@ -44,6 +44,11 @@ function Node_Crop_Content(_x, _y, _group = noone) : Node(_x, _y, _group) constr
}
var _arr = is_array(_inSurf);
_array &= _arr;
if(!is_array(_inSurf) && !is_surface(_inSurf)) return;
if( is_array(_inSurf) && array_empty(_inSurf)) return;
if(!_arr) _inSurf = [ _inSurf ];
var _amo = array_length(_inSurf);
@ -57,36 +62,25 @@ function Node_Crop_Content(_x, _y, _group = noone) : Node(_x, _y, _group) constr
var _surf = _inSurf[j];
var _dim = [ surface_get_width_safe(_surf), surface_get_height_safe(_surf) ];
var _minx = 0, _miny = 0, _maxx = _dim[0], _maxy = _dim[1];
temp_surface[0] = surface_verify(temp_surface[0], 1, 1, surface_r32float);
var _minx = 0, _miny = 0, _maxx = _dim[0] - 1, _maxy = _dim[1] - 1;
for( var i = 0; i < 4; i++ ) {
surface_set_target(temp_surface[0]);
shader_set(sh_find_boundary);
shader_set_f("dimension", _dim);
shader_set_surface("texture", _surf);
temp_surface[0] = surface_verify(temp_surface[0], _dim[0], _dim[1], surface_r32float);
temp_surface[1] = surface_verify(temp_surface[1], _dim[0], _dim[1], surface_r32float);
shader_set_i("mode", i);
shader_set_f("bbox", [ _minx, _miny, _maxx, _maxy ]);
surface_set_shader(temp_surface[0], sh_find_boundary_stretch_x);
shader_set_f("dimension", _dim);
draw_surface_safe(_surf);
surface_reset_shader();
DRAW_CLEAR
BLEND_OVERRIDE
draw_sprite(s_fx_pixel, 0, 0, 0);
BLEND_NORMAL
surface_set_shader(temp_surface[1], sh_find_boundary_stretch_y);
shader_set_f("dimension", _dim);
draw_surface_safe(_surf);
surface_reset_shader();
shader_reset();
surface_reset_target();
var px = surface_getpixel(temp_surface[0], 0, 0);
px = px[0];
switch(i) {
case 0 : _minx = px; break;
case 1 : _miny = px; break;
case 2 : _maxx = px; break;
case 3 : _maxy = px; break;
}
}
for( ; _minx < _dim[0]; _minx++ ) if(surface_get_pixel(temp_surface[0], _minx, 0) > 0) break;
for( ; _maxx >= 0; _maxx-- ) if(surface_get_pixel(temp_surface[0], _maxx, 0) > 0) break;
for( ; _miny < _dim[1]; _miny++ ) if(surface_get_pixel(temp_surface[1], 0, _miny) > 0) break;
for( ; _maxy >= 0; _maxy-- ) if(surface_get_pixel(temp_surface[1], 0, _maxy) > 0) break;
if(_array) {
minx[j] = _minx;
@ -115,12 +109,10 @@ function Node_Crop_Content(_x, _y, _group = noone) : Node(_x, _y, _group) constr
res[i] = surface_create_valid(resDim[DIMENSION.width], resDim[DIMENSION.height], cDep);
surface_set_target(res[i]);
DRAW_CLEAR
BLEND_OVERRIDE
surface_set_shader(res[i], noone);
draw_surface_safe(_surf, -minx + _padd[PADDING.left], -miny + _padd[PADDING.top]);
BLEND_NORMAL
surface_reset_target();
surface_reset_shader();
} else if(_array == 1) {
var resDim = [maxx[i] - minx[i] + 1, maxy[i] - miny[i] + 1];
resDim[DIMENSION.width] += _padd[PADDING.left] + _padd[PADDING.right];
@ -128,12 +120,9 @@ function Node_Crop_Content(_x, _y, _group = noone) : Node(_x, _y, _group) constr
res[i] = surface_create_valid(resDim[DIMENSION.width], resDim[DIMENSION.height], cDep);
surface_set_target(res[i]);
DRAW_CLEAR
BLEND_OVERRIDE
surface_set_shader(res[i], noone);
draw_surface_safe(_surf, -minx[i] + _padd[PADDING.left], -miny[i] + _padd[PADDING.top]);
BLEND_NORMAL
surface_reset_target();
surface_reset_shader();
}
}

View file

@ -48,6 +48,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
run_in(1, function() {
resetInternalName();
if(renamed) return;
display_name = __txt_node_name(instanceof(self), name);
if(!LOCALE_DEF || TESTING) renamed = true;
});
@ -1660,8 +1662,9 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
array_push(_trigger, inspectInput2.serialize(scale, preset));
array_push(_trigger, updatedInTrigger.serialize(scale, preset));
array_push(_trigger, updatedOutTrigger.serialize(scale, preset));
_map.inspectInputs = _trigger;
_map.renamed = renamed;
_map.renamed = renamed;
doSerialize(_map);
processSerialize(_map);

View file

@ -22,8 +22,8 @@ function Node_create_Image_path(_x, _y, path) {
}
function Node_Image(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
name = "Image";
color = COLORS.node_blend_input;
name = "Image";
color = COLORS.node_blend_input;
inputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.input, VALUE_TYPE.path, "")
.setDisplay(VALUE_DISPLAY.path_load, { filter: "*.png" })
@ -106,12 +106,9 @@ function Node_Image(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
_outsurf = surface_verify(_outsurf, ww, hh, attrDepth());
outputs[| 0].setValue(_outsurf);
surface_set_target(_outsurf);
DRAW_CLEAR
BLEND_OVERRIDE;
draw_sprite(spr, 0, pad[2], pad[1]);
BLEND_NORMAL;
surface_reset_target();
surface_set_shader(_outsurf, noone);
draw_sprite(spr, 0, pad[2], pad[1]);
surface_reset_shader();
if(!first_update) return;
first_update = false;

View file

@ -115,7 +115,7 @@ function Node_Image_Animated(_x, _y, _group = noone) : Node(_x, _y, _group) cons
path_loaded[i] = paths[i];
var path = try_get_path(paths[i]);
if(path == -1) continue;
setDisplayName(string_replace(filename_name(path), filename_ext(path), ""));
setDisplayName(filename_name_only(path));
var ext = string_lower(filename_ext(path));

View file

@ -102,6 +102,7 @@ function Node_Image_gif(_x, _y, _group = noone) : Node(_x, _y, _group) construct
if(ext != ".gif")
return false;
setDisplayName(_name);
outputs[| 1].setValue(path);
if(spr) sprite_delete(spr);

View file

@ -107,6 +107,7 @@ function Node_Image_Sequence(_x, _y, _group = noone) : Node(_x, _y, _group) cons
var path = try_get_path(paths[i]);
if(path == -1) continue;
var ext = string_lower(filename_ext(path));
setDisplayName(filename_name_only(path));
switch(ext) {
case ".png" :

View file

@ -2,7 +2,7 @@ function Node_Particle(_x, _y, _group = noone) : Node_VFX_Spawner_Base(_x, _y, _
name = "Particle";
use_cache = CACHE_USE.auto;
onSurfaceSize = function() { return getInputData(input_len, DEF_SURF); };
onSurfaceSize = function() { return surface_get_dimension(getInputData(input_len, DEF_SURF)); };
inputs[| 3].setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });
inputs[| 22].setDisplay(VALUE_DISPLAY.enum_scroll, [ "Random", "Order", "Animation", "Array" ]);

View file

@ -229,6 +229,12 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio
global.RECENT_NODES = file_exists(recPath)? json_load_struct(recPath) : [];
if(!is_array(global.RECENT_NODES)) global.RECENT_NODES = [];
NODE_PAGE_DEFAULT = ds_list_size(NODE_CATEGORY);
ADD_NODE_PAGE = NODE_PAGE_DEFAULT;
var fav = ds_list_create();
addNodeCatagory("Favourites", fav);
var group = ds_list_create(); #region
addNodeCatagory("Group", group, ["Node_Group"]);
ds_list_add(group, "Groups");
@ -373,11 +379,7 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio
addNodeObject(strandSim, "Strand Collision", s_node_strandSim_collide, "Node_Strand_Collision", [1, Node_Strand_Collision],, "Create solid object for strands to collides to.").hideRecent().setVersion(1140);
#endregion
NODE_PAGE_DEFAULT = ds_list_size(NODE_CATEGORY);
ADD_NODE_PAGE = NODE_PAGE_DEFAULT;
var fav = ds_list_create();
addNodeCatagory("Favourites", fav);
//////////////////////////////////////////////////////////////////////////////////
var input = ds_list_create(); #region
addNodeCatagory("IO", input);

View file

@ -15,7 +15,7 @@ function Node_Scatter(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
inputs[| 4] = nodeValue("Angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 0, 0, 0, 0, 0 ] )
.setDisplay(VALUE_DISPLAY.rotation_random);
onSurfaceSize = function() { return getInputData(1, DEF_SURF); };
onSurfaceSize = function() { return surface_get_dimension(getInputData(1, DEF_SURF)); };
inputs[| 5] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ DEF_SURF_W / 2, DEF_SURF_H / 2, DEF_SURF_W / 2, DEF_SURF_H / 2, AREA_SHAPE.rectangle ])
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });

View file

@ -5,7 +5,7 @@ function Node_Scatter_Points(_x, _y, _group = noone) : Node(_x, _y, _group) cons
w = 96;
onSurfaceSize = function() { return getInputData(7, DEF_SURF); };
onSurfaceSize = function() { return surface_get_dimension(getInputData(7, DEF_SURF)); };
inputs[| 0] = nodeValue("Point area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ DEF_SURF_W / 2, DEF_SURF_H / 2, DEF_SURF_W / 2, DEF_SURF_H / 2, AREA_SHAPE.rectangle ])
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });

View file

@ -20,7 +20,7 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
inputs[| 2] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Rectangle", "Ellipse", "Regular polygon", "Star", "Arc", "Teardrop", "Cross", "Leaf" ]);
onSurfaceSize = function() { return getInputData(0, DEF_SURF); };
onSurfaceSize = function() { return surface_get_dimension(getInputData(0, DEF_SURF)); };
inputs[| 3] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ DEF_SURF_W / 2, DEF_SURF_H / 2, DEF_SURF_W / 2, DEF_SURF_H / 2, AREA_SHAPE.rectangle ])
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });

View file

@ -956,6 +956,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
editWidget = new areaBox(function(index, val) {
return setValueDirect(val, index);
}, unit);
if(type == VALUE_TYPE.integer) editWidget.setSlideSpeed(1);
if(struct_has(display_data, "onSurfaceSize")) editWidget.onSurfaceSize = display_data.onSurfaceSize;

View file

@ -54,7 +54,7 @@ function Node_Warp(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
attributes[? "initalset"] = true;
}
} #endregion
} if(!LOADING && !APPENDING) run_in(1, function() { onValueFromUpdate(0); }) #endregion
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { #region
PROCESSOR_OVERLAY_CHECK

View file

@ -3,7 +3,7 @@ function Node_Wrap_Area(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0);
onSurfaceSize = function() { return getInputData(0, DEF_SURF); };
onSurfaceSize = function() { return surface_get_dimension(getInputData(0, DEF_SURF)); };
inputs[| 1] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 16, 16, 4, 4, AREA_SHAPE.rectangle ])
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });
@ -33,7 +33,7 @@ function Node_Wrap_Area(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
inputs[| 1].setValue([ _sw / 2, _sh / 2, _sw / 2, _sh / 2, AREA_SHAPE.rectangle ]);
attributes[? "initalset"] = true;
}
} #endregion
} if(!LOADING && !APPENDING) run_in(1, function() { onValueFromUpdate(0); }) #endregion
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) {
inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny);

View file

@ -261,6 +261,9 @@ function Panel_Menu() : PanelContent() constructor {
var dia = dialogPanelCall(new Panel_Node_Data_Gen());
dia.destroy_on_click_out = false;
}),
menuItem(__txtx("panel_menu_test_gen_theme", "Generate theme object"), function() {
__test_generate_theme();
}),
-1,
menuItem(__txtx("panel_menu_test_crash", "Force crash"), function() {
print(1 + "a");

View file

@ -1,17 +1,28 @@
function preview_overlay_area_padding(interact, active, _x, _y, _s, _mx, _my, _snx, _sny, _flag, display_data) {
function preview_overlay_area_padding(interact, active, _x, _y, _s, _mx, _my, _snx, _sny, _flag, display_data) { #region
var _val = array_clone(getValue());
var hover = -1;
if(!is_callable(display_data)) return hover;
var ss = display_data();
var __ax = array_safe_get(_val, 0);
var __ay = array_safe_get(_val, 1);
var __aw = array_safe_get(_val, 2);
var __ah = array_safe_get(_val, 3);
var __at = array_safe_get(_val, 4);
var _r = array_safe_get(_val, 0);
var _t = array_safe_get(_val, 1);
var _l = array_safe_get(_val, 2);
var _b = array_safe_get(_val, 3);
var _xc = ((ss[0] - _r) + _l) / 2;
var _yc = ((ss[1] - _b) + _t) / 2;
var _x0 = __ax - __aw;
var _x1 = __ax + __aw;
var _y0 = __ay - __ah;
var _y1 = __ay + __ah;
var ss = display_data();
var _l = _x0;
var _r = ss[0] - _x1;
var _t = _y0;
var _b = ss[1] - _y1;
var _xc = __ax;
var _yc = __ay;
var x0 = _l * _s + _x;
var y0 = _t * _s + _y;
@ -42,50 +53,19 @@ function preview_overlay_area_padding(interact, active, _x, _y, _s, _mx, _my, _s
draw_sprite_colored(THEME.anchor_solid_hori, 0, x1, yc,, 90);
}
if(drag_type == 1) {
var _xx = value_snap(drag_sx - (_mx - drag_mx) / _s, _snx);
_val[0] = _xx;
if(drag_type == 1) _r = value_snap(drag_sx - (_mx - drag_mx) / _s, _snx);
else if(drag_type == 2) _t = value_snap(drag_sy + (_my - drag_my) / _s, _sny);
else if(drag_type == 3) _l = value_snap(drag_sx + (_mx - drag_mx) / _s, _snx);
else if(drag_type == 4) _b = value_snap(drag_sy - (_my - drag_my) / _s, _sny);
if(setValue(_val))
UNDO_HOLDING = true;
} else if(drag_type == 2) {
var _yy = value_snap(drag_sy + (_my - drag_my) / _s, _sny);
_val[1] = _yy;
if(drag_type) {
var _val = [ _r, _t, _l, _b, __at ];
if(setValue(_val)) UNDO_HOLDING = true;
if(setValue(_val))
UNDO_HOLDING = true;
} else if(drag_type == 3) {
var _xx = value_snap(drag_sx + (_mx - drag_mx) / _s, _snx);
_val[2] = _xx;
if(setValue(_val))
UNDO_HOLDING = true;
} else if(drag_type == 4) {
var _yy = value_snap(drag_sy - (_my - drag_my) / _s, _sny);
_val[3] = _yy;
if(setValue(_val))
UNDO_HOLDING = true;
} else if(drag_type == 5) {
var _xx = value_snap(drag_sx + (_mx - drag_mx) / _s, _snx);
var _yy = value_snap(drag_sy + (_my - drag_my) / _s, _sny);
var _w = ss[0] - _r - _l;
var _h = ss[1] - _b - _t;
var nr = ss[0] - (_xx + _w / 2);
var nl = _xx - _w / 2;
var nt = _yy - _h / 2;
var nb = ss[1] - (_yy + _h / 2);
_val = [ nr, nt, nl, nb, __at ];
if(setValue(_val))
UNDO_HOLDING = true;
}
if(drag_type && mouse_release(mb_left)) {
drag_type = 0;
UNDO_HOLDING = false;
if(mouse_release(mb_left)) {
drag_type = 0;
UNDO_HOLDING = false;
}
}
if(drawSize && active && point_in_circle(_mx, _my, xc, y0, 16)) {
@ -124,32 +104,25 @@ function preview_overlay_area_padding(interact, active, _x, _y, _s, _mx, _my, _s
drag_sx = _r;
drag_mx = _mx;
}
} else if(drawPos && active && point_in_rectangle(_mx, _my, x0, y0, x1, y1)) {
draw_sprite_colored(THEME.anchor, 1, xc, yc);
hover = 4;
if(mouse_press(mb_left)) {
drag_type = 5;
drag_sx = _xc;
drag_sy = _yc;
drag_mx = _mx;
drag_my = _my;
}
}
return hover;
}
} #endregion
function preview_overlay_area_two_point(interact, active, _x, _y, _s, _mx, _my, _snx, _sny, _flag) {
function preview_overlay_area_two_point(interact, active, _x, _y, _s, _mx, _my, _snx, _sny, _flag) { #region
var _val = array_clone(getValue());
var hover = -1;
var __ax = array_safe_get(_val, 0);
var __ay = array_safe_get(_val, 1);
var __aw = array_safe_get(_val, 2);
var __ah = array_safe_get(_val, 3);
var __at = array_safe_get(_val, 4);
var _x0 = array_safe_get(_val, 0);
var _y0 = array_safe_get(_val, 1);
var _x1 = array_safe_get(_val, 2);
var _y1 = array_safe_get(_val, 3);
var _x0 = __ax - __aw;
var _y0 = __ay - __ah;
var _x1 = __ax + __aw;
var _y1 = __ay + __ah;
var x0 = _x0 * _s + _x;
var y0 = _y0 * _s + _y;
@ -254,9 +227,9 @@ function preview_overlay_area_two_point(interact, active, _x, _y, _s, _mx, _my,
}
return hover;
}
} #endregion
function preview_overlay_area_span(interact, active, _x, _y, _s, _mx, _my, _snx, _sny, _flag) {
function preview_overlay_area_span(interact, active, _x, _y, _s, _mx, _my, _snx, _sny, _flag) { #region
var _val = array_clone(getValue());
var hover = -1;
@ -357,7 +330,7 @@ function preview_overlay_area_span(interact, active, _x, _y, _s, _mx, _my, _snx,
}
return hover;
}
} #endregion
function preview_overlay_area(interact, active, _x, _y, _s, _mx, _my, _snx, _sny, _flag, display_data) {
var _val = array_clone(getValue());

View file

@ -174,6 +174,13 @@ function surface_get_height_safe(s, crop = true) {
return surface_get_height(s);
}
function surface_get_dimension(s) {
INLINE
if(!is_surface(s)) return [ 1, 1 ];
return [ surface_get_width_safe(s), surface_get_height_safe(s) ];
}
//check
function is_surface(s) {
INLINE

View file

@ -1,4 +1,4 @@
function __test_update_current_collections() {
function __test_update_current_collections() { #region
var st = ds_stack_create();
ds_stack_push(st, PANEL_COLLECTION.context);
@ -25,9 +25,9 @@ function __test_update_current_collections() {
ds_stack_destroy(st);
print("---------- COLLECTION UPDATING ENDED ----------");
}
} #endregion
function __test_update_sample_projects() {
function __test_update_sample_projects() { #region
print("---------- PROJECT UPDATING STARTED ----------");
for( var i = 0; i < ds_list_size(SAMPLE_PROJECTS); i++ ) {
@ -40,9 +40,9 @@ function __test_update_sample_projects() {
}
print("---------- PROJECT UPDATING ENDED ----------");
}
} #endregion
function __test_load_current_collections() {
function __test_load_current_collections() { #region
var st = ds_stack_create();
ds_stack_push(st, PANEL_COLLECTION.context);
@ -104,9 +104,9 @@ function __test_load_current_collections() {
ds_stack_destroy(st);
print("---------- COLLECTION TESTING ENDED ----------");
}
} #endregion
function __test_load_all_nodes() {
function __test_load_all_nodes() { #region
var amo = ds_map_size(ALL_NODES);
var k = ds_map_find_first(ALL_NODES);
var xx = 0;
@ -148,9 +148,9 @@ function __test_load_all_nodes() {
k = ds_map_find_next(ALL_NODES, k);
}
LOADING = false;
}
} #endregion
function __test_metadata_current_collections() {
function __test_metadata_current_collections() { #region
var st = ds_stack_create();
ds_stack_push(st, PANEL_COLLECTION.context);
@ -176,4 +176,15 @@ function __test_metadata_current_collections() {
ds_stack_destroy(st);
print("---------- COLLECTION UPDATING ENDED ----------");
}
} #endregion
function __test_generate_theme() { #region
var _txt = "function Theme() constructor {\n";
var _spr = struct_get_names(THEME);
for( var i = 0, n = array_length(_spr); i < n; i++ )
_txt += $"\t{_spr[i]} = noone;\n";
_txt += "}";
clipboard_set_text(_txt);
} #endregion

View file

@ -1,290 +1,347 @@
function Theme() constructor {
color_picker_sample = noone;
button_color_overlay = noone;
color_picker_box = noone;
dialog_active = noone;
dialog_bg = noone;
group_label = noone;
shadow_drop_down_24 = noone;
menu_bg = noone;
accept = noone;
add = noone;
animate_clock = noone;
animate_node_go = noone;
animate_onion_skin = noone;
animation_setting = noone;
animation_timing = noone;
animation_stretch = noone;
arrow = noone;
button_path_icon = noone;
button_path_not_found_icon = noone;
cache = noone;
circle = noone;
color_picker_dropper = noone;
cursor_select = noone;
file = noone;
explorer = noone;
fill = noone;
filter_type = noone;
fluid_sim = noone;
folder = noone;
folder_add = noone;
folder_content = noone;
gear = noone;
grad_blend = noone;
graph = noone;
group = noone;
group_s = noone;
hamburger = noone;
visible = noone;
workshop_download = noone;
workshop_upload = noone;
workshop_update = noone;
icon_visibility = noone;
info = noone;
junc_visible = noone;
loading = noone;
loading_s = noone;
feedback = noone;
loop = noone;
unit_ref = noone;
vfx = noone;
minus = noone;
text = noone;
new_file = noone;
node_processor = noone;
value_link = noone;
pin = noone;
play_all = noone;
project = noone;
preset = noone;
refresh = noone;
refresh_s = noone;
reverse = noone;
rigidSim = noone;
scroll_box_arrow = noone;
search = noone;
sequence_control = noone;
sort = noone;
steam = noone;
steam_creator = noone;
text_bullet = noone;
text_slider = noone;
timeline_clock = noone;
timeline_graph = noone;
view_group = noone;
view_mode = noone;
icon_delete = noone;
addon_icon = noone;
youtube = noone;
wiki = noone;
itch = noone;
undo = noone;
redo = noone;
action_history = noone;
cross = noone;
duplicate = noone;
copy = noone;
paste = noone;
node_resize = noone;
icon_curve_connection = noone;
node_output_visible = noone;
icon_minimap = noone;
noti_icon_tick = noone;
noti_icon_error = noone;
noti_icon_warning = noone;
noti_icon_log = noone;
noti_icon_file_load = noone;
noti_icon_file_save = noone;
icon_center_canvas = noone;
icon_grid = noone;
icon_grid_setting = noone;
icon_preview_export = noone;
icon_reset_when_preview = noone;
icon_split_view = noone;
icon_tile_view = noone;
icon_active_split = noone;
save = noone;
save_auto = noone;
window_exit = noone;
window_minimize = noone;
window_maximize = noone;
window_fullscreen = noone;
icon_splash_show_on_start = noone;
icon_array_processor = noone;
tunnel = noone;
lock = noone;
node_move = noone;
splash_thumbnail = noone;
node_goto = noone;
node_create = noone;
node_use_global = noone;
node_use_expression = noone;
icon_toggle = noone;
strandSim = noone;
star = noone;
panel_graph = noone;
panel_preview = noone;
panel_inspector = noone;
panel_animation = noone;
color_wheel = noone;
node_name_type = noone;
checkbox_on_start = noone;
addon_setting = noone;
keyframe_override = noone;
play_sound = noone;
trophy = noone;
chat = noone;
arrow_back_32 = noone;
discord = noone;
heart = noone;
websocket = noone;
node_dropper = noone;
bone = noone;
tab_exit = noone;
icon_save_all = noone;
onion_skin = noone;
inspector_area = noone;
inspector_area_type = noone;
inspector_padding = noone;
inspector_surface_halign = noone;
inspector_surface_valign = noone;
inspector_text_halign = noone;
inspector_text_valign = noone;
prop_gradient = noone;
prop_keyframe = noone;
prop_on_end = noone;
prop_selecting = noone;
rotator_bg = noone;
rotator_knob = noone;
icon_24 = noone;
icon_32 = noone;
icon_64 = noone;
node_draw_area = noone;
node_draw_path = noone;
node_junction_inspector = noone;
node_junctions_array = noone;
node_junctions_array_hover = noone;
node_junctions_single = noone;
node_junctions_single_hover = noone;
node_new_badge = noone;
node_pin_bg = noone;
node_pin_bg_active = noone;
node_active = noone;
node_bg = noone;
node_bg_name = noone;
node_glow = noone;
node_frame_bg = noone;
node_frame_title = noone;
node_junction_name_bg = noone;
node_state = noone;
node_bg_pill = noone;
node_trigger = noone;
node_slider = noone;
node_rotator_bg = noone;
node_rotator_knob = noone;
node_checkbox = noone;
node_coor_pin = noone;
node_websocket_receive = noone;
node_websocket_send = noone;
menu_separator = noone;
menu_button = noone;
menu_button_mask = noone;
key_display = noone;
toolbar_shadow = noone;
ui_panel_active = noone;
ui_panel_tab = noone;
ui_panel_bg = noone;
ui_panel_fg = noone;
ui_panel_bg_cover = noone;
ui_scrollbar = noone;
ui_label_bg = noone;
toolbar = noone;
ui_selection = noone;
timeline_dopesheet_bg = noone;
cursor_path_add = noone;
cursor_path_anchor = noone;
cursor_path_move = noone;
cursor_path_remove = noone;
anchor = noone;
anchor_rotate = noone;
anchor_scale = noone;
anchor_solid_hori = noone;
anchor_scale_hori = noone;
anchor_selector = noone;
anchor_arrow = noone;
preview_crosshair = noone;
preview_bone_IK = noone;
anchor_bone_stick = noone;
timeline_ease = noone;
timeline_elastic = noone;
timeline_keyframe = noone;
timeline_keyframe_selecting = noone;
object_halign = noone;
object_valign = noone;
pixel_builder = noone;
junc_visible = noone;
tools_canvas_channel = noone;
ui_scrollbar = noone;
control_remove = noone;
vct = noone;
node_frame_title = noone;
duplicate = noone;
group_label = noone;
panel_graph = noone;
tunnel = noone;
icon_curve_connection = noone;
timeline_clock = noone;
animate_clock = noone;
prop_selecting = noone;
node_websocket_receive = noone;
text_slider = noone;
preview_bone_IK = noone;
tools_3d_transform_object = noone;
prop_anchor = noone;
node_draw_path = noone;
node_pin_bg_active = noone;
icon_splash_show_on_start = noone;
noti_icon_warning = noone;
pin = noone;
accept_16 = noone;
animate_prop_go = noone;
accept = noone;
bone_tool_detach = noone;
loading_s = noone;
loop = noone;
cursor_path_add = noone;
addon_icon = noone;
inspector_text_halign = noone;
anchor_scale_hori = noone;
noti_icon_file_save = noone;
minus_20 = noone;
node_junctions_outline = noone;
color_wheel = noone;
group_s = noone;
add = noone;
panel_animation = noone;
code_show_line = noone;
canvas_tools_rect_fill = noone;
path_tools_add = noone;
node_rotator_knob = noone;
discord = noone;
action_history = noone;
onion_skin = noone;
timeline_onion_skin = noone;
obj_distribute_h = noone;
obj_distribute_v = noone;
canvas_tools_bucket = noone;
canvas_tools_ellip = noone;
canvas_tools_ellip_fill = noone;
canvas_tools_eraser = noone;
canvas_tools_pencil = noone;
canvas_tools_rect = noone;
canvas_tools_rect_fill = noone;
control_add = noone;
control_remove = noone;
control_pin = noone;
control_unpin = noone;
mesh_tool_edit = noone;
mesh_tool_delete = noone;
path_tools_add = noone;
path_tools_anchor = noone;
path_tools_circle = noone;
path_tools_rectangle = noone;
path_tools_draw = noone;
path_tools_transform = noone;
tools_canvas_channel = noone;
tools_3d_transform = noone;
tools_3d_rotate = noone;
tools_3d_scale = noone;
splice_draw = noone;
strand_comb = noone;
strand_cut = noone;
strand_grab = noone;
strand_push = noone;
strand_stretch = noone;
bone_tool_add = noone;
bone_tool_detach = noone;
bone_tool_remove = noone;
bone_tool_transform = noone;
bone_tool_IK = noone;
button = noone;
button_hide = noone;
button_hide_fill = noone;
button_hide_left = noone;
button_hide_middle = noone;
button_hide_right = noone;
button_left = noone;
button_lime = noone;
button_middle = noone;
button_right = noone;
checkbox = noone;
slider = noone;
widget_selecting = noone;
textbox = noone;
textbox_header = noone;
textbox_code = noone;
progress_bar = noone;
animate_onion_skin = noone;
anchor_rotate = noone;
button_left = noone;
obj_distribute_v = noone;
node_goto = noone;
star = noone;
bone_tool_scale = noone;
node_junctions_single_hover = noone;
node_note_selecting = noone;
obj_angle = noone;
node_use_global = noone;
panel_inspector = noone;
steam_creator = noone;
animation_stretch = noone;
ui_panel_fg = noone;
toolbar = noone;
icon_visibility = noone;
node_use_project = noone;
ac_constant = noone;
redo = noone;
inspector_surface_valign = noone;
textbox_header = noone;
obj_direction = noone;
anchor_arrow = noone;
rigidSim = noone;
button = noone;
icon_64 = noone;
node_pin_bg = noone;
button_hide = noone;
window_maximize = noone;
animation_timing = noone;
new_file = noone;
play_action = noone;
canvas_tools_selection_rectangle = noone;
splice_draw = noone;
panel_preview = noone;
tools_3d_rotate = noone;
toolbar_shadow = noone;
inspector_area_type = noone;
noti_icon_log = noone;
prop_on_end = noone;
export_package = noone;
icon_split_view = noone;
grad_blend = noone;
node_bg = noone;
strand_grab = noone;
canvas_tools_ellip_fill = noone;
vfx = noone;
mesh_tool_edit = noone;
ui_panel_bg = noone;
node_trigger = noone;
timeline_ease = noone;
cache_group = noone;
chat = noone;
wiki = noone;
patreon = noone;
dialog_bg = noone;
color_picker_box = noone;
object_valign = noone;
addon_setting = noone;
sequence_control = noone;
node_junctions_array_hover = noone;
text = noone;
info = noone;
node_checkbox = noone;
splash_thumbnail = noone;
search = noone;
icon_active_split = noone;
timeline_node = noone;
textbox_code = noone;
file = noone;
undo = noone;
gear = noone;
bone_tool_IK = noone;
cursor_path_remove = noone;
lock = noone;
icon_24 = noone;
node_note_pin = noone;
minus_16 = noone;
window_exit = noone;
text_popup = noone;
animation_setting = noone;
folder = noone;
button_hide_circle_28 = noone;
feedback = noone;
tab_exit = noone;
timeline_graph = noone;
canvas_tools_pencil = noone;
path_tools_draw = noone;
refresh_s = noone;
menu_button = noone;
icon_save_all = noone;
button_hide_middle = noone;
icon_minimap = noone;
noti_icon_console = noone;
textbox = noone;
fluid_sim = noone;
ui_panel_tab = noone;
button_path_icon = noone;
strand_stretch = noone;
cursor_select = noone;
node_glow = noone;
control_pin = noone;
node_junction_name_bg = noone;
play_sound = noone;
view_group = noone;
copy = noone;
node_use_expression = noone;
ui_selection = noone;
color_picker_sample = noone;
ac_node = noone;
close_16 = noone;
anchor_bone_stick = noone;
cross = noone;
checkbox_on_start = noone;
node_new_badge = noone;
node_junction_inspector = noone;
icon_array_processor = noone;
icon_preview_export = noone;
play_all = noone;
timeline_folder = noone;
bone_tool_remove = noone;
cursor_path_anchor = noone;
workshop_project = noone;
explorer = noone;
inspector_text_valign = noone;
timeline_dopesheet_bg = noone;
node_dropper = noone;
icon_grid = noone;
node_note_title = noone;
widget_selecting = noone;
hamburger = noone;
menu_bg = noone;
code_show_auto = noone;
canvas_tools_rect = noone;
hamburger_s = noone;
path_tools_circle = noone;
node_bg_name = noone;
workshop_upload = noone;
node_websocket_send = noone;
heart = noone;
textbox_number_slider = noone;
node_resize = noone;
preview_light = noone;
button_color_overlay = noone;
button_path_not_found_icon = noone;
anchor_scale = noone;
button_right = noone;
timeline_keyframe_selecting = noone;
crop_tool = noone;
view_mode = noone;
strand_push = noone;
icon_delete = noone;
control_add = noone;
slider = noone;
bone_tool_move = noone;
node_frame_bg = noone;
paste = noone;
icon_toggle = noone;
text_bullet = noone;
ui_panel_active = noone;
visible = noone;
progress_bar = noone;
loading = noone;
fill = noone;
preview_crosshair = noone;
inspector_view = noone;
node_draw_area = noone;
window_fullscreen = noone;
icon_center_canvas = noone;
value_link = noone;
checkbox = noone;
bone_tool_add = noone;
workshop_update = noone;
tools_3d_transform = noone;
ui_label_bg = noone;
noti_icon_tick = noone;
inspector_padding = noone;
node_name_type = noone;
noti_icon_file_load = noone;
add_20 = noone;
icon_reset_when_preview = noone;
folder_16 = noone;
node_junctions_outline_hover = noone;
graph = noone;
inspector_corner = noone;
node_slider = noone;
new_line_shift = noone;
canvas_tools_ellip = noone;
cache = noone;
mesh_tool_delete = noone;
strandSim = noone;
save = noone;
node_rotator_bg = noone;
keyframe_override = noone;
arrow_back_32 = noone;
path_tools_anchor = noone;
itch = noone;
prop_keyframe = noone;
shadow_drop_down_24 = noone;
unit_angle = noone;
node_coor_pin = noone;
ac_function = noone;
obj_distribute_h = noone;
node_junctions_single = noone;
node_note_bg = noone;
anchor = noone;
node_create = noone;
sort = noone;
arrow = noone;
unit_audio = noone;
inspector_surface_halign = noone;
button_lime = noone;
anchor_solid_hori = noone;
preset = noone;
icon_32 = noone;
window_minimize = noone;
d3d_preview_settings = noone;
unit_ref = noone;
refresh = noone;
canvas_tools_selection_circle = noone;
path_tools_transform = noone;
timeline_keyframe = noone;
tools_3d_scale = noone;
key_display = noone;
display_palette = noone;
obj_hemicircle = noone;
inspector_area = noone;
button_hide_left = noone;
noti_icon_error = noone;
noti_icon_console_failed = noone;
ui_panel_bg_cover = noone;
icon_tile_view = noone;
node_junctions_bg = noone;
color_picker_dropper = noone;
folder_add = noone;
tool_side = noone;
strand_cut = noone;
canvas_tools_bucket = noone;
project = noone;
control_unpin = noone;
rotator_bg = noone;
node_bg_pill = noone;
smoke_sim = noone;
node_processor = noone;
object_halign = noone;
trophy = noone;
youtube = noone;
dialog_active = noone;
circle = noone;
bone = noone;
timeline_elastic = noone;
button_hide_fill = noone;
folder_content = noone;
node_deprecated_badge = noone;
node_junctions_array = noone;
node_note_resize = noone;
minus = noone;
node_move = noone;
workshop_collection = noone;
reverse = noone;
animate_node_go = noone;
menu_button_mask = noone;
obj_draw_line = noone;
bone_tool_transform = noone;
cursor_path_move = noone;
prop_gradient = noone;
add_16 = noone;
save_auto = noone;
d3d_snap_settings = noone;
scroll_box_arrow = noone;
rotator_random_mode = noone;
workshop_download = noone;
group = noone;
anchor_selector = noone;
node_active = noone;
code_syntax_highlight = noone;
inspector_channel = noone;
canvas_tools_eraser = noone;
node_state = noone;
path_tools_rectangle = noone;
rotator_knob = noone;
steam = noone;
menu_separator = noone;
timeline_color = noone;
websocket = noone;
button_hide_right = noone;
node_output_visible = noone;
reset_16 = noone;
icon_grid_setting = noone;
filter_type = noone;
button_middle = noone;
strand_comb = noone;
}
function ThemeColor() constructor {

View file

@ -3,8 +3,8 @@
"resourceVersion": "1.0",
"name": "sh_find_boundary",
"parent": {
"name": "misc",
"path": "folders/shader/misc.yy",
"name": "find boundary",
"path": "folders/shader/misc/find boundary.yy",
},
"type": 1,
}

View file

@ -0,0 +1,23 @@
//
// Simple passthrough fragment shader
//
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
uniform vec2 dimension;
void main() {
vec4 col = texture2D( gm_BaseTexture, v_vTexcoord );
if(col.a > 0.) { gl_FragColor = vec4(1.); return; }
gl_FragColor = vec4(0.);
vec2 tx = 1. / dimension;
for(float i = 0.; i < dimension.y; i++) {
vec4 col = texture2D( gm_BaseTexture, vec2(v_vTexcoord.x, tx.y * i) );
if(col.a > 0.) {
gl_FragColor = vec4(1.);
break;
}
}
}

View file

@ -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;
}

View file

@ -0,0 +1,10 @@
{
"resourceType": "GMShader",
"resourceVersion": "1.0",
"name": "sh_find_boundary_stretch_x",
"parent": {
"name": "find boundary",
"path": "folders/shader/misc/find boundary.yy",
},
"type": 1,
}

View file

@ -0,0 +1,23 @@
//
// Simple passthrough fragment shader
//
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
uniform vec2 dimension;
void main() {
vec4 col = texture2D( gm_BaseTexture, v_vTexcoord );
if(col.a > 0.) { gl_FragColor = vec4(1.); return; }
gl_FragColor = vec4(0.);
vec2 tx = 1. / dimension;
for(float i = 0.; i < dimension.x; i++) {
vec4 col = texture2D( gm_BaseTexture, vec2(tx.x * i, v_vTexcoord.y) );
if(col.a > 0.) {
gl_FragColor = vec4(1.);
break;
}
}
}

View file

@ -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;
}

View file

@ -0,0 +1,10 @@
{
"resourceType": "GMShader",
"resourceVersion": "1.0",
"name": "sh_find_boundary_stretch_y",
"parent": {
"name": "find boundary",
"path": "folders/shader/misc/find boundary.yy",
},
"type": 1,
}