From d73d2de6626f06fe0b73a710a9d2a0ff2e0dcb35 Mon Sep 17 00:00:00 2001 From: Tanasart Date: Sat, 21 Dec 2024 17:53:52 +0700 Subject: [PATCH] fix crash surface extrude --- .../__vertex_function/__vertex_function.gml | 3 +- .../_node_VFX_spawner/_node_VFX_spawner.gml | 2 +- .../d3d_surface_extrude.gml | 168 +++++++++--------- .../node_3d_transform/node_3d_transform.gml | 2 + scripts/node_blur_zoom/node_blur_zoom.gml | 5 +- scripts/node_math/node_math.gml | 2 + scripts/node_pixel_math/node_pixel_math.gml | 32 ++-- shaders/sh_blur_zoom/sh_blur_zoom.fsh | 3 +- shaders/sh_pixel_math/sh_pixel_math.fsh | 12 ++ 9 files changed, 127 insertions(+), 102 deletions(-) diff --git a/scripts/__vertex_function/__vertex_function.gml b/scripts/__vertex_function/__vertex_function.gml index 47a56adff..d433d5f0b 100644 --- a/scripts/__vertex_function/__vertex_function.gml +++ b/scripts/__vertex_function/__vertex_function.gml @@ -30,12 +30,13 @@ function vertex_add_pntc(buffer, position, normal, texture, color = c_white, alp vertex_color(buffer, color, alpha); } -function __vertex_add_pntc(buffer, _px, _py, _pz, _nx, _ny, _nz, _u, _v, color = c_white, alpha = 1) { +function __vertex_add_pntc(buffer, _px, _py, _pz, _nx, _ny, _nz, _u, _v, color = c_white, alpha = 1, bx = 1, by = 0, bz = 0) { INLINE vertex_position_3d(buffer, _px, _py, _pz); vertex_normal(buffer, _nx, _ny, _nz); vertex_texcoord(buffer, _u, _v); vertex_color(buffer, color, alpha); + vertex_float3(buffer, bx, by, bz); } function vertex_add_2pc(buffer, _x, _y, color, alpha = 1) { diff --git a/scripts/_node_VFX_spawner/_node_VFX_spawner.gml b/scripts/_node_VFX_spawner/_node_VFX_spawner.gml index aa44790ad..d217dd011 100644 --- a/scripts/_node_VFX_spawner/_node_VFX_spawner.gml +++ b/scripts/_node_VFX_spawner/_node_VFX_spawner.gml @@ -25,7 +25,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co newInput(10, nodeValue_Vec2_Range("Spawn scale", self, [ 1, 1, 1, 1 ] , { linked : true })); - newInput(11, nodeValue_Curve("Scale over time", self, CURVE_DEF_11 )); + newInput(11, nodeValue_Curve("Scale over time", self, CURVE_DEF_11)); newInput(12, nodeValue_Gradient("Color over lifetime", self, new gradientObject(cola(c_white)))); diff --git a/scripts/d3d_surface_extrude/d3d_surface_extrude.gml b/scripts/d3d_surface_extrude/d3d_surface_extrude.gml index 523fbe4c0..6b4d1e0d7 100644 --- a/scripts/d3d_surface_extrude/d3d_surface_extrude.gml +++ b/scripts/d3d_surface_extrude/d3d_surface_extrude.gml @@ -167,118 +167,118 @@ function __3dSurfaceExtrude(surface = noone, height = noone, smooth = false) : _ : dep; depb = -depb; - __vertex_add_pntc(_vb, i1, j0, depb, 0, 0, -1, tb1, ty0); - __vertex_add_pntc(_vb, i0, j0, depb, 0, 0, -1, tb0, ty0); - __vertex_add_pntc(_vb, i1, j1, depb, 0, 0, -1, tb1, ty1); + __vertex_add_pntc(_vb, i1, j0, depb, 0, 0, -1, tb1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i0, j0, depb, 0, 0, -1, tb0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j1, depb, 0, 0, -1, tb1, ty1,,, 0, 0, 255); - __vertex_add_pntc(_vb, i1, j1, depb, 0, 0, -1, tb1, ty1); - __vertex_add_pntc(_vb, i0, j0, depb, 0, 0, -1, tb0, ty0); - __vertex_add_pntc(_vb, i0, j1, depb, 0, 0, -1, tb0, ty1); + __vertex_add_pntc(_vb, i1, j1, depb, 0, 0, -1, tb1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i0, j0, depb, 0, 0, -1, tb0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i0, j1, depb, 0, 0, -1, tb0, ty1,,, 0, 0, 255); - __vertex_add_pntc(_vb, i1, j0, dep, 0, 0, 1, tx1, ty0); - __vertex_add_pntc(_vb, i1, j1, dep, 0, 0, 1, tx1, ty1); - __vertex_add_pntc(_vb, i0, j0, dep, 0, 0, 1, tx0, ty0); + __vertex_add_pntc(_vb, i1, j0, dep, 0, 0, 1, tx1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j1, dep, 0, 0, 1, tx1, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i0, j0, dep, 0, 0, 1, tx0, ty0,,, 0, 0, 255); - __vertex_add_pntc(_vb, i1, j1, dep, 0, 0, 1, tx1, ty1); - __vertex_add_pntc(_vb, i0, j1, dep, 0, 0, 1, tx0, ty1); - __vertex_add_pntc(_vb, i0, j0, dep, 0, 0, 1, tx0, ty0); + __vertex_add_pntc(_vb, i1, j1, dep, 0, 0, 1, tx1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i0, j1, dep, 0, 0, 1, tx0, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i0, j0, dep, 0, 0, 1, tx0, ty0,,, 0, 0, 255); if(back) { if((useH && dep * 2 > buffer_read_at(h_buff, (round(i * hgtW) + max(0, round((j - 1) * hgtH)) * hg_ww) * 2, buffer_u16) / 65536) || (j == 0 || buffer_read_at(c_buff, (j - 1) * ww + (i), buffer_u8) == 0)) { //y side - __vertex_add_pntc(_vb, i0, j0, dep, 0, 1, 0, tx1, ty0); - __vertex_add_pntc(_vb, i0, j0, 0, 0, 1, 0, tx0, ty0); - __vertex_add_pntc(_vb, i1, j0, dep, 0, 1, 0, tx1, ty1); + __vertex_add_pntc(_vb, i0, j0, dep, 0, 1, 0, tx1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i0, j0, 0, 0, 1, 0, tx0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j0, dep, 0, 1, 0, tx1, ty1,,, 0, 0, 255); - __vertex_add_pntc(_vb, i0, j0, 0, 0, 1, 0, tx1, ty1); - __vertex_add_pntc(_vb, i1, j0, 0, 0, 1, 0, tx0, ty0); - __vertex_add_pntc(_vb, i1, j0, dep, 0, 1, 0, tx0, ty1); + __vertex_add_pntc(_vb, i0, j0, 0, 0, 1, 0, tx1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j0, 0, 0, 1, 0, tx0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j0, dep, 0, 1, 0, tx0, ty1,,, 0, 0, 255); } if((useH && abs(depb) * 2 > buffer_read_at(hb_buff, (round(i * hgtW) + max(0, round((j - 1) * hgtH)) * hg_ww) * 2, buffer_u16) / 65536) || (j == 0 || buffer_read_at(c_buff, (j - 1) * ww + (i), buffer_u8) == 0)) { //y side - __vertex_add_pntc(_vb, i0, j0, 0, 0, 1, 0, tb1, ty0); - __vertex_add_pntc(_vb, i0, j0, depb, 0, 1, 0, tb0, ty0); - __vertex_add_pntc(_vb, i1, j0, 0, 0, 1, 0, tb1, ty1); + __vertex_add_pntc(_vb, i0, j0, 0, 0, 1, 0, tb1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i0, j0, depb, 0, 1, 0, tb0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j0, 0, 0, 1, 0, tb1, ty1,,, 0, 0, 255); - __vertex_add_pntc(_vb, i0, j0, depb, 0, 1, 0, tb1, ty1); - __vertex_add_pntc(_vb, i1, j0, depb, 0, 1, 0, tb0, ty0); - __vertex_add_pntc(_vb, i1, j0, 0, 0, 1, 0, tb0, ty1); + __vertex_add_pntc(_vb, i0, j0, depb, 0, 1, 0, tb1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j0, depb, 0, 1, 0, tb0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j0, 0, 0, 1, 0, tb0, ty1,,, 0, 0, 255); } if((useH && dep * 2 > buffer_read_at(h_buff, (round(i * hgtW) + min(round((j + 1) * hgtH), hg_hh - 1) * hg_ww) * 2, buffer_u16) / 65536) || (j == hh - 1 || buffer_read_at(c_buff, (j + 1) * ww + (i), buffer_u8) == 0)) { //y side - __vertex_add_pntc(_vb, i0, j1, dep, 0, -1, 0, tx1, ty0); - __vertex_add_pntc(_vb, i1, j1, dep, 0, -1, 0, tx1, ty1); - __vertex_add_pntc(_vb, i0, j1, 0, 0, -1, 0, tx0, ty0); + __vertex_add_pntc(_vb, i0, j1, dep, 0, -1, 0, tx1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j1, dep, 0, -1, 0, tx1, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i0, j1, 0, 0, -1, 0, tx0, ty0,,, 0, 0, 255); - __vertex_add_pntc(_vb, i0, j1, 0, 0, -1, 0, tx1, ty1); - __vertex_add_pntc(_vb, i1, j1, dep, 0, -1, 0, tx0, ty1); - __vertex_add_pntc(_vb, i1, j1, 0, 0, -1, 0, tx0, ty0); + __vertex_add_pntc(_vb, i0, j1, 0, 0, -1, 0, tx1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j1, dep, 0, -1, 0, tx0, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j1, 0, 0, -1, 0, tx0, ty0,,, 0, 0, 255); } if((useH && abs(depb) * 2 > buffer_read_at(hb_buff, (round(i * hgtW) + min(round((j + 1) * hgtH), hg_hh - 1) * hg_ww) * 2, buffer_u16) / 65536) || (j == hh - 1 || buffer_read_at(c_buff, (j + 1) * ww + (i), buffer_u8) == 0)) { //y side - __vertex_add_pntc(_vb, i0, j1, 0, 0, -1, 0, tb1, ty0); - __vertex_add_pntc(_vb, i1, j1, 0, 0, -1, 0, tb1, ty1); - __vertex_add_pntc(_vb, i0, j1, depb, 0, -1, 0, tb0, ty0); + __vertex_add_pntc(_vb, i0, j1, 0, 0, -1, 0, tb1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j1, 0, 0, -1, 0, tb1, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i0, j1, depb, 0, -1, 0, tb0, ty0,,, 0, 0, 255); - __vertex_add_pntc(_vb, i0, j1, depb, 0, -1, 0, tb1, ty1); - __vertex_add_pntc(_vb, i1, j1, 0, 0, -1, 0, tb0, ty1); - __vertex_add_pntc(_vb, i1, j1, depb, 0, -1, 0, tb0, ty0); + __vertex_add_pntc(_vb, i0, j1, depb, 0, -1, 0, tb1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j1, 0, 0, -1, 0, tb0, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j1, depb, 0, -1, 0, tb0, ty0,,, 0, 0, 255); } if((useH && dep * 2 > buffer_read_at(h_buff, (max(0, round((i - 1) * hgtW)) + round(j * hgtH) * hg_ww) * 2, buffer_u16) / 65536) || (i == 0 || buffer_read_at(c_buff, (j) * ww + (i - 1), buffer_u8) == 0)) { //x side - __vertex_add_pntc(_vb, i0, j0, dep, -1, 0, 0, tx1, ty0); - __vertex_add_pntc(_vb, i0, j1, dep, -1, 0, 0, tx1, ty1); - __vertex_add_pntc(_vb, i0, j0, 0, -1, 0, 0, tx0, ty0); + __vertex_add_pntc(_vb, i0, j0, dep, -1, 0, 0, tx1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i0, j1, dep, -1, 0, 0, tx1, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i0, j0, 0, -1, 0, 0, tx0, ty0,,, 0, 0, 255); - __vertex_add_pntc(_vb, i0, j0, 0, -1, 0, 0, tx1, ty1); - __vertex_add_pntc(_vb, i0, j1, dep, -1, 0, 0, tx0, ty1); - __vertex_add_pntc(_vb, i0, j1, 0, -1, 0, 0, tx0, ty0); + __vertex_add_pntc(_vb, i0, j0, 0, -1, 0, 0, tx1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i0, j1, dep, -1, 0, 0, tx0, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i0, j1, 0, -1, 0, 0, tx0, ty0,,, 0, 0, 255); } if((useH && abs(depb) * 2 > buffer_read_at(hb_buff, (max(0, round((i - 1) * hgtW)) + round(j * hgtH) * hg_ww) * 2, buffer_u16) / 65536) || (i == 0 || buffer_read_at(c_buff, (j) * ww + (i - 1), buffer_u8) == 0)) { //x side - __vertex_add_pntc(_vb, i0, j0, 0, -1, 0, 0, tb1, ty0); - __vertex_add_pntc(_vb, i0, j1, 0, -1, 0, 0, tb1, ty1); - __vertex_add_pntc(_vb, i0, j0, depb, -1, 0, 0, tb0, ty0); + __vertex_add_pntc(_vb, i0, j0, 0, -1, 0, 0, tb1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i0, j1, 0, -1, 0, 0, tb1, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i0, j0, depb, -1, 0, 0, tb0, ty0,,, 0, 0, 255); - __vertex_add_pntc(_vb, i0, j0, depb, -1, 0, 0, tb1, ty1); - __vertex_add_pntc(_vb, i0, j1, 0, -1, 0, 0, tb0, ty1); - __vertex_add_pntc(_vb, i0, j1, depb, -1, 0, 0, tb0, ty0); + __vertex_add_pntc(_vb, i0, j0, depb, -1, 0, 0, tb1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i0, j1, 0, -1, 0, 0, tb0, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i0, j1, depb, -1, 0, 0, tb0, ty0,,, 0, 0, 255); } if((useH && dep * 2 > buffer_read_at(h_buff, (min(round((i + 1) * hgtW), hg_ww - 1 ) + round(j * hgtH) * hg_ww) * 2, buffer_u16) / 65536) || (i == ww - 1 || buffer_read_at(c_buff, (j) * ww + (i + 1), buffer_u8) == 0)) { //x side - __vertex_add_pntc(_vb, i1, j0, dep, 1, 0, 0, tx1, ty0); - __vertex_add_pntc(_vb, i1, j0, 0, 1, 0, 0, tx0, ty0); - __vertex_add_pntc(_vb, i1, j1, dep, 1, 0, 0, tx1, ty1); + __vertex_add_pntc(_vb, i1, j0, dep, 1, 0, 0, tx1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j0, 0, 1, 0, 0, tx0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j1, dep, 1, 0, 0, tx1, ty1,,, 0, 0, 255); - __vertex_add_pntc(_vb, i1, j0, 0, 1, 0, 0, tx1, ty1); - __vertex_add_pntc(_vb, i1, j1, 0, 1, 0, 0, tx0, ty0); - __vertex_add_pntc(_vb, i1, j1, dep, 1, 0, 0, tx0, ty1); + __vertex_add_pntc(_vb, i1, j0, 0, 1, 0, 0, tx1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j1, 0, 1, 0, 0, tx0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j1, dep, 1, 0, 0, tx0, ty1,,, 0, 0, 255); } if((useH && abs(depb) * 2 > buffer_read_at(hb_buff, (min(round((i + 1) * hgtW), hg_ww - 1 ) + round(j * hgtH) * hg_ww) * 2, buffer_u16) / 65536) || (i == ww - 1 || buffer_read_at(c_buff, (j) * ww + (i + 1), buffer_u8) == 0)) { //x side - __vertex_add_pntc(_vb, i1, j0, 0, 1, 0, 0, tb1, ty0); - __vertex_add_pntc(_vb, i1, j0, depb, 1, 0, 0, tb0, ty0); - __vertex_add_pntc(_vb, i1, j1, 0, 1, 0, 0, tb1, ty1); + __vertex_add_pntc(_vb, i1, j0, 0, 1, 0, 0, tb1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j0, depb, 1, 0, 0, tb0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j1, 0, 1, 0, 0, tb1, ty1,,, 0, 0, 255); - __vertex_add_pntc(_vb, i1, j0, depb, 1, 0, 0, tb1, ty1); - __vertex_add_pntc(_vb, i1, j1, depb, 1, 0, 0, tb0, ty0); - __vertex_add_pntc(_vb, i1, j1, 0, 1, 0, 0, tb0, ty1); + __vertex_add_pntc(_vb, i1, j0, depb, 1, 0, 0, tb1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j1, depb, 1, 0, 0, tb0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j1, 0, 1, 0, 0, tb0, ty1,,, 0, 0, 255); } } else { @@ -286,49 +286,49 @@ function __3dSurfaceExtrude(surface = noone, height = noone, smooth = false) : _ if((useH && dep * 2 > buffer_read_at(h_buff, (round(i * hgtW) + max(0, round((j - 1) * hgtH)) * hg_ww) * 2, buffer_u16) / 65536) || (j == 0 || buffer_read_at(c_buff, (j - 1) * ww + (i), buffer_u8) == 0)) { //y side - __vertex_add_pntc(_vb, i0, j0, dep, 0, 1, 0, tx1, ty0); - __vertex_add_pntc(_vb, i0, j0, depb, 0, 1, 0, tx0, ty0); - __vertex_add_pntc(_vb, i1, j0, dep, 0, 1, 0, tx1, ty1); + __vertex_add_pntc(_vb, i0, j0, dep, 0, 1, 0, tx1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i0, j0, depb, 0, 1, 0, tx0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j0, dep, 0, 1, 0, tx1, ty1,,, 0, 0, 255); - __vertex_add_pntc(_vb, i0, j0, depb, 0, 1, 0, tx1, ty1); - __vertex_add_pntc(_vb, i1, j0, depb, 0, 1, 0, tx0, ty0); - __vertex_add_pntc(_vb, i1, j0, dep, 0, 1, 0, tx0, ty1); + __vertex_add_pntc(_vb, i0, j0, depb, 0, 1, 0, tx1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j0, depb, 0, 1, 0, tx0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j0, dep, 0, 1, 0, tx0, ty1,,, 0, 0, 255); } if((useH && dep * 2 > buffer_read_at(h_buff, (round(i * hgtW) + min(round((j + 1) * hgtH), hg_hh - 1) * hg_ww) * 2, buffer_u16) / 65536) || (j == hh - 1 || buffer_read_at(c_buff, (j + 1) * ww + (i), buffer_u8) == 0)) { //y side - __vertex_add_pntc(_vb, i0, j1, dep, 0, -1, 0, tx1, ty0); - __vertex_add_pntc(_vb, i1, j1, dep, 0, -1, 0, tx1, ty1); - __vertex_add_pntc(_vb, i0, j1, depb, 0, -1, 0, tx0, ty0); + __vertex_add_pntc(_vb, i0, j1, dep, 0, -1, 0, tx1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j1, dep, 0, -1, 0, tx1, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i0, j1, depb, 0, -1, 0, tx0, ty0,,, 0, 0, 255); - __vertex_add_pntc(_vb, i0, j1, depb, 0, -1, 0, tx1, ty1); - __vertex_add_pntc(_vb, i1, j1, dep, 0, -1, 0, tx0, ty1); - __vertex_add_pntc(_vb, i1, j1, depb, 0, -1, 0, tx0, ty0); + __vertex_add_pntc(_vb, i0, j1, depb, 0, -1, 0, tx1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j1, dep, 0, -1, 0, tx0, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j1, depb, 0, -1, 0, tx0, ty0,,, 0, 0, 255); } if((useH && dep * 2 > buffer_read_at(h_buff, (max(0, round((i - 1) * hgtW)) + round(j * hgtH) * hg_ww) * 2, buffer_u16) / 65536) || (i == 0 || buffer_read_at(c_buff, (j) * ww + (i - 1), buffer_u8) == 0)) { //x side - __vertex_add_pntc(_vb, i0, j0, dep, -1, 0, 0, tx1, ty0); - __vertex_add_pntc(_vb, i0, j1, dep, -1, 0, 0, tx1, ty1); - __vertex_add_pntc(_vb, i0, j0, depb, -1, 0, 0, tx0, ty0); + __vertex_add_pntc(_vb, i0, j0, dep, -1, 0, 0, tx1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i0, j1, dep, -1, 0, 0, tx1, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i0, j0, depb, -1, 0, 0, tx0, ty0,,, 0, 0, 255); - __vertex_add_pntc(_vb, i0, j0, depb, -1, 0, 0, tx1, ty1); - __vertex_add_pntc(_vb, i0, j1, dep, -1, 0, 0, tx0, ty1); - __vertex_add_pntc(_vb, i0, j1, depb, -1, 0, 0, tx0, ty0); + __vertex_add_pntc(_vb, i0, j0, depb, -1, 0, 0, tx1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i0, j1, dep, -1, 0, 0, tx0, ty1,,, 0, 255, 0); + __vertex_add_pntc(_vb, i0, j1, depb, -1, 0, 0, tx0, ty0,,, 0, 0, 255); } if((useH && dep * 2 > buffer_read_at(h_buff, (min(round((i + 1) * hgtW), hg_ww - 1 ) + round(j * hgtH) * hg_ww) * 2, buffer_u16) / 65536) || (i == ww - 1 || buffer_read_at(c_buff, (j) * ww + (i + 1), buffer_u8) == 0)) { //x side - __vertex_add_pntc(_vb, i1, j0, dep, 1, 0, 0, tx1, ty0); - __vertex_add_pntc(_vb, i1, j0, depb, 1, 0, 0, tx0, ty0); - __vertex_add_pntc(_vb, i1, j1, dep, 1, 0, 0, tx1, ty1); + __vertex_add_pntc(_vb, i1, j0, dep, 1, 0, 0, tx1, ty0,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j0, depb, 1, 0, 0, tx0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j1, dep, 1, 0, 0, tx1, ty1,,, 0, 0, 255); - __vertex_add_pntc(_vb, i1, j0, depb, 1, 0, 0, tx1, ty1); - __vertex_add_pntc(_vb, i1, j1, depb, 1, 0, 0, tx0, ty0); - __vertex_add_pntc(_vb, i1, j1, dep, 1, 0, 0, tx0, ty1); + __vertex_add_pntc(_vb, i1, j0, depb, 1, 0, 0, tx1, ty1,,, 255, 0, 0); + __vertex_add_pntc(_vb, i1, j1, depb, 1, 0, 0, tx0, ty0,,, 0, 255, 0); + __vertex_add_pntc(_vb, i1, j1, dep, 1, 0, 0, tx0, ty1,,, 0, 0, 255); } } diff --git a/scripts/node_3d_transform/node_3d_transform.gml b/scripts/node_3d_transform/node_3d_transform.gml index 5f1ed9bbd..80f337be4 100644 --- a/scripts/node_3d_transform/node_3d_transform.gml +++ b/scripts/node_3d_transform/node_3d_transform.gml @@ -4,6 +4,8 @@ function Node_3D_Transform(_x, _y, _group = noone) : Node_3D_Object(_x, _y, _gro newInput(in_d3d + 0, nodeValue_D3Mesh("Mesh", self, noone)) .setVisible(true, true); + // newInput(in_d3d + 1, nodeValue_D3Mesh("Mesh", self, noone)); + newOutput(0, nodeValue_Output("Mesh", self, VALUE_TYPE.d3Mesh, noone)); input_display_list = [ in_d3d + 0, diff --git a/scripts/node_blur_zoom/node_blur_zoom.gml b/scripts/node_blur_zoom/node_blur_zoom.gml index 0c8874675..bfee6afee 100644 --- a/scripts/node_blur_zoom/node_blur_zoom.gml +++ b/scripts/node_blur_zoom/node_blur_zoom.gml @@ -36,11 +36,13 @@ function Node_Blur_Zoom(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) newInput(13, nodeValue_Bool("Gamma Correction", self, false)); + newInput(14, nodeValue_Int("Samples", self, 64)); + newOutput(0, nodeValue_Output("Surface out", self, VALUE_TYPE.surface, noone)); input_display_list = [ 8, 9, ["Surfaces", true], 0, 6, 7, 10, 11, - ["Blur", false], 1, 12, 2, 4, 5, 13 + ["Blur", false], 1, 12, 2, 4, 5, 13, 14, ]; attribute_surface_depth(); @@ -77,6 +79,7 @@ function Node_Blur_Zoom(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) shader_set_i("blurMode", _data[4]); shader_set_i("sampleMode", _sam); shader_set_i("gamma", _data[13]); + shader_set_i("samples", _data[14]); shader_set_i("useMask", is_surface(_data[5])); shader_set_surface("mask", _data[5]); diff --git a/scripts/node_math/node_math.gml b/scripts/node_math/node_math.gml index 9a986c9a8..1ffc11c08 100644 --- a/scripts/node_math/node_math.gml +++ b/scripts/node_math/node_math.gml @@ -22,6 +22,8 @@ enum MATH_OPERATOR { clamp, // 15 snap, // 16 fract, // 17 + + length, } global.node_math_keys = [ "add", "subtract", "multiply", "divide", "power", "root", diff --git a/scripts/node_pixel_math/node_pixel_math.gml b/scripts/node_pixel_math/node_pixel_math.gml index 4396d41e5..4b24c08db 100644 --- a/scripts/node_pixel_math/node_pixel_math.gml +++ b/scripts/node_pixel_math/node_pixel_math.gml @@ -26,7 +26,9 @@ function Node_Pixel_Math(_x, _y, _group = noone) : Node_Processor(_x, _y, _group __init_mask_modifier(2); // inputs 5, 6, - newInput(7, nodeValue_Enum_Scroll("Operator", self, 0, global.node_math_scroll)); + _scroll = array_clone(global.node_math_scroll, 1); + array_append(_scroll, ["Less than", "Greater than"]); + newInput(7, nodeValue_Enum_Scroll("Operator", self, 0, _scroll)); newInput(8, nodeValue_Vec4("Operand", self, [ 0, 0, 0, 0 ])); @@ -53,14 +55,14 @@ function Node_Pixel_Math(_x, _y, _group = noone) : Node_Processor(_x, _y, _group } static processData = function(_outSurf, _data, _output_index, _array_index) { - var type = _data[7]; - var op4 = _data[8]; - var op2 = _data[9]; + var type = _data[7]; + var op4 = _data[8]; + var op2 = _data[9]; var opType = _data[10]; var opS = _data[11]; var mixAmo = _data[12]; - var _oprand = global.node_math_names[type]; + var _oprand = type < array_length(global.node_math_names)? global.node_math_names[type] : _scroll[type]; setDisplayName(_oprand); inputs[ 8].setVisible(false); @@ -70,14 +72,16 @@ function Node_Pixel_Math(_x, _y, _group = noone) : Node_Processor(_x, _y, _group if(opType == 0) { switch(type) { - case MATH_OPERATOR.add : - case MATH_OPERATOR.subtract : - case MATH_OPERATOR.multiply : - case MATH_OPERATOR.divide : - case MATH_OPERATOR.power : - case MATH_OPERATOR.root : - case MATH_OPERATOR.modulo : - case MATH_OPERATOR.snap : + case MATH_OPERATOR.add : + case MATH_OPERATOR.subtract : + case MATH_OPERATOR.multiply : + case MATH_OPERATOR.divide : + case MATH_OPERATOR.power : + case MATH_OPERATOR.root : + case MATH_OPERATOR.modulo : + case MATH_OPERATOR.snap : + case MATH_OPERATOR.length + 1 : + case MATH_OPERATOR.length + 2 : inputs[8].setVisible( true); break; @@ -88,7 +92,7 @@ function Node_Pixel_Math(_x, _y, _group = noone) : Node_Processor(_x, _y, _group } } - surface_set_shader(_outSurf, sh_pixel_math); + surface_set_shader(_outSurf, sh_pixel_math, true, BLEND.over); shader_set_i("operator", type); shader_set_i("operandType", opType ); diff --git a/shaders/sh_blur_zoom/sh_blur_zoom.fsh b/shaders/sh_blur_zoom/sh_blur_zoom.fsh index 792261ba5..23a598448 100644 --- a/shaders/sh_blur_zoom/sh_blur_zoom.fsh +++ b/shaders/sh_blur_zoom/sh_blur_zoom.fsh @@ -18,6 +18,7 @@ varying vec2 v_vTexcoord; varying vec4 v_vColour; +uniform int samples; uniform vec2 center; uniform int blurMode; @@ -65,7 +66,7 @@ void main() { #region vec2 uv = v_vTexcoord - center; float _str = sampleParameter(0, str) * sampleMask(); - float nsamples = 64.; + float nsamples = float(samples); float scale_factor = _str * (1. / (nsamples * 2. - 1.)); vec4 color = vec4(0.0); float blrStart = 0.; diff --git a/shaders/sh_pixel_math/sh_pixel_math.fsh b/shaders/sh_pixel_math/sh_pixel_math.fsh index 162b3def7..f89f6c03c 100644 --- a/shaders/sh_pixel_math/sh_pixel_math.fsh +++ b/shaders/sh_pixel_math/sh_pixel_math.fsh @@ -102,6 +102,18 @@ void main() { res.b = fract(res.b); res.a = fract(res.a); + } else if(operator == 18) { + res.r = res.r < op.r? 1. : 0.; + res.g = res.g < op.g? 1. : 0.; + res.b = res.b < op.b? 1. : 0.; + res.a = 1.; + + } else if(operator == 19) { + res.r = res.r > op.r? 1. : 0.; + res.g = res.g > op.g? 1. : 0.; + res.b = res.b > op.b? 1. : 0.; + res.a = 1.; + } gl_FragColor = res;