fix crash surface extrude

This commit is contained in:
Tanasart 2024-12-21 17:53:52 +07:00
parent 239f52018f
commit d73d2de662
9 changed files with 127 additions and 102 deletions

View file

@ -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) {

View file

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

View file

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

View file

@ -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,

View file

@ -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]);

View file

@ -22,6 +22,8 @@ enum MATH_OPERATOR {
clamp, // 15
snap, // 16
fract, // 17
length,
}
global.node_math_keys = [ "add", "subtract", "multiply", "divide", "power", "root",

View file

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

View file

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

View file

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