mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-12-25 06:26:42 +01:00
inline group rendering fix
This commit is contained in:
parent
ce9c4b0715
commit
f057bf63d9
8 changed files with 78 additions and 101 deletions
|
@ -38,7 +38,7 @@
|
|||
LATEST_VERSION = 11700;
|
||||
VERSION = 11750;
|
||||
SAVE_VERSION = 11700;
|
||||
VERSION_STRING = "1.17.5.003";
|
||||
VERSION_STRING = "1.17.5.004";
|
||||
BUILD_NUMBER = 11750;
|
||||
|
||||
globalvar HOTKEYS, HOTKEY_CONTEXT;
|
||||
|
|
|
@ -52,8 +52,8 @@ function Node_VFX_Group(_x, _y, _group = noone) : Node_Collection(_x, _y, _group
|
|||
|
||||
if(IS_PLAYING)
|
||||
for( var i = 0; i < TOTAL_FRAMES; i++ )
|
||||
for( var j = 0, m = ds_list_size(topoList); j < m; j++ ) {
|
||||
var node = topoList[| j];
|
||||
for( var j = 0, m = array_length(topoList); j < m; j++ ) {
|
||||
var node = topoList[j];
|
||||
var _ins = instanceof(node);
|
||||
|
||||
if(!string_pos("Node_VFX", _ins))
|
||||
|
@ -74,7 +74,7 @@ function Node_VFX_Group(_x, _y, _group = noone) : Node_Collection(_x, _y, _group
|
|||
|
||||
static update = function() { #region
|
||||
if(IS_FIRST_FRAME)
|
||||
NodeListSort(topoList, nodes);
|
||||
topoList = NodeListSort(nodes);
|
||||
|
||||
allCached = true;
|
||||
for( var i = 0, n = array_length(nodes); i < n; i++ ) {
|
||||
|
|
|
@ -48,8 +48,8 @@ function Node_VFX_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inline(
|
|||
if(!loop) return;
|
||||
|
||||
for( var i = 0; i < TOTAL_FRAMES; i++ )
|
||||
for( var j = 0, m = ds_list_size(topoList); j < m; j++ ) {
|
||||
var node = topoList[| j];
|
||||
for( var j = 0, m = array_length(topoList); j < m; j++ ) {
|
||||
var node = topoList[j];
|
||||
var _ins = instanceof(node);
|
||||
|
||||
if(!string_pos("Node_VFX", _ins))
|
||||
|
@ -70,7 +70,7 @@ function Node_VFX_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inline(
|
|||
|
||||
static update = function() { #region
|
||||
if(IS_FIRST_FRAME) {
|
||||
NodeListSort(topoList, nodes);
|
||||
topoList = NodeListSort(nodes);
|
||||
reset();
|
||||
}
|
||||
} #endregion
|
||||
|
|
|
@ -32,10 +32,13 @@ function Node_Bloom(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
|
|||
inputs[| 12] = nodeValue("Direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
|
||||
.setDisplay(VALUE_DISPLAY.rotation);
|
||||
|
||||
// inputs[| 13] = nodeValue("Types", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||
// .setDisplay(VALUE_DISPLAY.enum_scroll, [ "Gaussian" ]);
|
||||
|
||||
input_display_list = [ 7, 8,
|
||||
["Surfaces", true], 0, 5, 6, 9, 10,
|
||||
["Bloom", false], 1, 2, 3, 4,
|
||||
["Directional", true], 11, 12,
|
||||
["Blur", true], 11, 12,
|
||||
]
|
||||
|
||||
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
||||
|
|
|
@ -50,7 +50,7 @@ function Node_Iterate_Sort(_x, _y, _group = noone) : Node_Collection(_x, _y, _gr
|
|||
|
||||
static update = function(frame = CURRENT_FRAME) { #region
|
||||
if(IS_FIRST_FRAME) {
|
||||
NodeListSort(topoList, nodes);
|
||||
topoList = NodeListSort(nodes);
|
||||
|
||||
inputNodes = [ noone, noone ];
|
||||
outputNode = noone;
|
||||
|
|
|
@ -86,7 +86,7 @@ function Node_Iterate_Sort_Inline(_x, _y, _group = noone) : Node_Collection_Inli
|
|||
}
|
||||
|
||||
if(IS_FIRST_FRAME) toSort = true;
|
||||
if(toSort) NodeListSort(topoList, nodes);
|
||||
if(toSort) topoList = NodeListSort(nodes);
|
||||
toSort = false;
|
||||
|
||||
input_node.startSort = true;
|
||||
|
|
|
@ -19,12 +19,12 @@ function readObj_init(_scale = 1, _yneg = false) {
|
|||
use_material = false;
|
||||
use_normal = true;
|
||||
|
||||
v = ds_list_create();
|
||||
vt = ds_list_create();
|
||||
vn = ds_list_create();
|
||||
f = ds_list_create();
|
||||
ft = ds_list_create();
|
||||
fn = ds_list_create();
|
||||
v = [];
|
||||
vt = [];
|
||||
vn = [];
|
||||
f = [];
|
||||
ft = [];
|
||||
fn = [];
|
||||
tri = 0;
|
||||
}
|
||||
|
||||
|
@ -41,33 +41,33 @@ function readObj_file() {
|
|||
switch(sep[0]) {
|
||||
case "v" :
|
||||
if(obj_reading_yneg) {
|
||||
ds_list_add(v, [
|
||||
toNumber(sep[1]) * obj_reading_scale,
|
||||
toNumber(sep[3]) * obj_reading_scale,
|
||||
-toNumber(sep[2]) * obj_reading_scale,
|
||||
array_push(v, [
|
||||
real(sep[1]) * obj_reading_scale,
|
||||
real(sep[3]) * obj_reading_scale,
|
||||
-real(sep[2]) * obj_reading_scale,
|
||||
]);
|
||||
} else {
|
||||
ds_list_add(v, [
|
||||
toNumber(sep[1]) * obj_reading_scale,
|
||||
toNumber(sep[2]) * obj_reading_scale,
|
||||
toNumber(sep[3]) * obj_reading_scale,
|
||||
array_push(v, [
|
||||
real(sep[1]) * obj_reading_scale,
|
||||
real(sep[2]) * obj_reading_scale,
|
||||
real(sep[3]) * obj_reading_scale,
|
||||
]);
|
||||
}
|
||||
break;
|
||||
|
||||
case "vt" :
|
||||
var _u = toNumber(sep[1]);
|
||||
var _v = toNumber(sep[2]);
|
||||
var _u = real(sep[1]);
|
||||
var _v = real(sep[2]);
|
||||
|
||||
ds_list_add(vt, [ _u, _v ]);
|
||||
array_push(vt, [ _u, _v ]);
|
||||
break;
|
||||
|
||||
case "vn" :
|
||||
var _nx = toNumber(sep[1]);
|
||||
var _ny = toNumber(sep[2]);
|
||||
var _nz = toNumber(sep[3]);
|
||||
var _nx = real(sep[1]);
|
||||
var _ny = real(sep[2]);
|
||||
var _nz = real(sep[3]);
|
||||
|
||||
ds_list_add(vn, [ _nx, _ny, _nz ]);
|
||||
array_push(vn, [ _nx, _ny, _nz ]);
|
||||
break;
|
||||
|
||||
case "f" :
|
||||
|
@ -80,17 +80,17 @@ function readObj_file() {
|
|||
var _sp = string_split(sep[i], "/");
|
||||
if(array_length(_sp) < 3) continue;
|
||||
|
||||
_f[i - 1] = toNumber(_sp[0]);
|
||||
_ft[i - 1] = toNumber(_sp[1]);
|
||||
_fn[i - 1] = toNumber(_sp[2]);
|
||||
_f[i - 1] = real(_sp[0]) - 1;
|
||||
_ft[i - 1] = real(_sp[1]) - 1;
|
||||
_fn[i - 1] = real(_sp[2]) - 1;
|
||||
|
||||
use_normal = array_length(_sp) >= 4;
|
||||
}
|
||||
|
||||
tri += _len - 2;
|
||||
ds_list_add(f, _f ); //get position
|
||||
ds_list_add(ft, _ft); //get texture map
|
||||
ds_list_add(fn, _fn); //get normal
|
||||
array_push(f, _f ); //get position
|
||||
array_push(ft, _ft); //get texture map
|
||||
array_push(fn, _fn); //get normal
|
||||
break;
|
||||
|
||||
case "usemtl" :
|
||||
|
@ -103,14 +103,14 @@ function readObj_file() {
|
|||
array_push_unique(mats, mname);
|
||||
array_push(matIndex, array_find(mats, mname));
|
||||
|
||||
if(!ds_list_empty(f)) {
|
||||
if(!array_empty(f)) {
|
||||
array_push(_VB, f);
|
||||
array_push(_VBT, ft);
|
||||
array_push(_VBN, fn);
|
||||
array_push(tris, tri);
|
||||
f = ds_list_create();
|
||||
ft = ds_list_create();
|
||||
fn = ds_list_create();
|
||||
f = [];
|
||||
ft = [];
|
||||
fn = [];
|
||||
}
|
||||
|
||||
tri = 0;
|
||||
|
@ -131,7 +131,7 @@ function readObj_file() {
|
|||
if(current_time - _time > 30) return;
|
||||
} #endregion
|
||||
|
||||
if(!ds_list_empty(f)) {
|
||||
if(!array_empty(f)) {
|
||||
array_push(_VB, f);
|
||||
array_push(_VBT, ft);
|
||||
array_push(_VBN, fn);
|
||||
|
@ -139,23 +139,15 @@ function readObj_file() {
|
|||
}
|
||||
file_text_close(obj_read_file);
|
||||
|
||||
if(use_normal) vn[| 0] = [ 0, 0, 0 ];
|
||||
if(use_normal) vn[0] = [ 0, 0, 0 ];
|
||||
|
||||
obj_read_progress = 1;
|
||||
obj_read_prog_sub = 0;
|
||||
|
||||
//var txt = "OBJ summary";
|
||||
//txt += $"\n\tVerticies : {ds_list_size(v)}";
|
||||
//txt += $"\n\tTexture Verticies : {ds_list_size(vt)}";
|
||||
//txt += $"\n\tNormal Verticies : {ds_list_size(vn)}";
|
||||
//txt += $"\n\tVertex groups : {array_length(_VB)}";
|
||||
//txt += $"\n\tTriangles : {tris}";
|
||||
//print(txt);
|
||||
}
|
||||
|
||||
function readObj_cent() {
|
||||
#region centralize vertex
|
||||
var _v0 = v[| 0];
|
||||
var _v0 = v[0];
|
||||
var _bminx = _v0[0];
|
||||
var _bminy = _v0[1];
|
||||
var _bminz = _v0[2];
|
||||
|
@ -168,10 +160,10 @@ function readObj_cent() {
|
|||
var cvy = 0;
|
||||
var cvz = 0;
|
||||
|
||||
vertex = ds_list_size(v);
|
||||
vertex = array_length(v);
|
||||
|
||||
for( var i = 0; i < vertex; i++ ) {
|
||||
var _v = v[| i];
|
||||
var _v = v[i];
|
||||
var _v0 = _v[0];
|
||||
var _v1 = _v[1];
|
||||
var _v2 = _v[2];
|
||||
|
@ -200,7 +192,7 @@ function readObj_cent() {
|
|||
);
|
||||
|
||||
for( var i = 0; i < vertex; i++ ) {
|
||||
var _v = v[| i];
|
||||
var _v = v[i];
|
||||
|
||||
_v[0] = _v[0] - cvx;
|
||||
_v[1] = _v[1] - cvy;
|
||||
|
@ -225,13 +217,13 @@ function readObj_buff() {
|
|||
var facet = _VBT[i];
|
||||
var facen = _VBN[i];
|
||||
|
||||
var _flen = ds_list_size(face);
|
||||
var _v = ds_list_create();
|
||||
var _flen = array_length(face);
|
||||
var _v = [];
|
||||
|
||||
for(var j = 0; j < _flen; j++) {
|
||||
var _f = face[| j];
|
||||
var _ft = facet[| j];
|
||||
var _fn = facen[| j];
|
||||
var _f = face[j];
|
||||
var _ft = facet[j];
|
||||
var _fn = facen[j];
|
||||
|
||||
var _vlen = array_length(_f);
|
||||
var _pf = array_create(_vlen);
|
||||
|
@ -239,29 +231,24 @@ function readObj_buff() {
|
|||
var _pfn = array_create(_vlen);
|
||||
|
||||
for( var k = 0; k < _vlen; k++ ) {
|
||||
var _vPindex = _f[k] - 1;
|
||||
_pf[k] = v[| _vPindex];
|
||||
|
||||
var _vNindex = _fn[k] - 1;
|
||||
_pfn[k] = vn[| _vNindex];
|
||||
|
||||
var _vTindex = _ft[k] - 1;
|
||||
_pft[k] = vt[| _vTindex];
|
||||
_pf[k] = v[_f[k]];
|
||||
_pfn[k] = vn[_fn[k]];
|
||||
_pft[k] = vt[_ft[k]];
|
||||
}
|
||||
|
||||
var _pf0 = _pf[0], _pf1 = _pf[1], _pf2 = _pf[2];
|
||||
var _pfn0 = _pfn[0], _pfn1 = _pfn[1], _pfn2 = _pfn[2];
|
||||
var _pft0 = _pft[0], _pft1 = _pft[1], _pft2 = _pft[2];
|
||||
|
||||
if(_vlen >= 3) {
|
||||
// if(_vlen >= 3) {
|
||||
vertex_add_pntc(VB, _pf0, _pfn0, _pft0);
|
||||
vertex_add_pntc(VB, _pf2, _pfn2, _pft2);
|
||||
vertex_add_pntc(VB, _pf1, _pfn1, _pft1);
|
||||
|
||||
ds_list_add(_v, new __vertex(_pf0[0], _pf0[1], _pf0[2]).setNormal(_pfn0[0], _pfn0[1]).setUV(_pft0[0], _pft0[1]));
|
||||
ds_list_add(_v, new __vertex(_pf2[0], _pf2[1], _pf2[2]).setNormal(_pfn2[0], _pfn2[1]).setUV(_pft2[0], _pft2[1]));
|
||||
ds_list_add(_v, new __vertex(_pf1[0], _pf1[1], _pf1[2]).setNormal(_pfn1[0], _pfn1[1]).setUV(_pft1[0], _pft1[1]));
|
||||
}
|
||||
array_push(_v, new __vertex(_pf0[0], _pf0[1], _pf0[2]).setNormal(_pfn0[0], _pfn0[1]).setUV(_pft0[0], _pft0[1]));
|
||||
array_push(_v, new __vertex(_pf2[0], _pf2[1], _pf2[2]).setNormal(_pfn2[0], _pfn2[1]).setUV(_pft2[0], _pft2[1]));
|
||||
array_push(_v, new __vertex(_pf1[0], _pf1[1], _pf1[2]).setNormal(_pfn1[0], _pfn1[1]).setUV(_pft1[0], _pft1[1]));
|
||||
// }
|
||||
|
||||
if(_vlen >= 4) {
|
||||
var _pf3 = _pf[3];
|
||||
|
@ -272,31 +259,19 @@ function readObj_buff() {
|
|||
vertex_add_pntc(VB, _pf3, _pfn3, _pft3);
|
||||
vertex_add_pntc(VB, _pf2, _pfn2, _pft2);
|
||||
|
||||
ds_list_add(_v, new __vertex(_pf0[0], _pf0[1], _pf0[2]).setNormal(_pfn0[0], _pfn0[1]).setUV(_pft0[0], _pft0[1]));
|
||||
ds_list_add(_v, new __vertex(_pf3[0], _pf3[1], _pf3[2]).setNormal(_pfn3[0], _pfn3[1]).setUV(_pft3[0], _pft3[1]));
|
||||
ds_list_add(_v, new __vertex(_pf2[0], _pf2[1], _pf2[2]).setNormal(_pfn2[0], _pfn2[1]).setUV(_pft2[0], _pft2[1]));
|
||||
array_push(_v, new __vertex(_pf0[0], _pf0[1], _pf0[2]).setNormal(_pfn0[0], _pfn0[1]).setUV(_pft0[0], _pft0[1]));
|
||||
array_push(_v, new __vertex(_pf3[0], _pf3[1], _pf3[2]).setNormal(_pfn3[0], _pfn3[1]).setUV(_pft3[0], _pft3[1]));
|
||||
array_push(_v, new __vertex(_pf2[0], _pf2[1], _pf2[2]).setNormal(_pfn2[0], _pfn2[1]).setUV(_pft2[0], _pft2[1]));
|
||||
}
|
||||
}
|
||||
|
||||
vertex_end(VB);
|
||||
// vertex_freeze(VB);
|
||||
|
||||
VBS[i] = VB;
|
||||
V[i] = ds_list_to_array(_v);
|
||||
ds_list_destroy(_v);
|
||||
V[i] = _v;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region clean
|
||||
array_foreach(_VB, function(val, ind) { ds_list_destroy(val); });
|
||||
array_foreach(_VBT, function(val, ind) { ds_list_destroy(val); });
|
||||
array_foreach(_VBN, function(val, ind) { ds_list_destroy(val); });
|
||||
|
||||
ds_list_destroy(v);
|
||||
ds_list_destroy(vn);
|
||||
ds_list_destroy(vt);
|
||||
#endregion
|
||||
|
||||
obj_read_progress = 3;
|
||||
obj_read_prog_sub = 0;
|
||||
|
||||
|
|
|
@ -44,16 +44,15 @@ function NodeTopoSort() { #region
|
|||
LOG_IF(global.FLAG.render == 1, $"+++++++ Topo Sort Completed: {array_length(PROJECT.nodeTopo)}/{amo} nodes sorted in {(get_timer() - _t) / 1000} ms +++++++");
|
||||
} #endregion
|
||||
|
||||
function NodeListSort(_list, _nodeList) { #region
|
||||
function NodeListSort(_nodeList) { #region
|
||||
array_foreach(_nodeList, function(node) {
|
||||
node.clearTopoSorted();
|
||||
return 0;
|
||||
});
|
||||
|
||||
// print($"===================== NODE LIST SORT =====================")
|
||||
|
||||
ds_list_clear(_list);
|
||||
__topoSort(_list, _nodeList);
|
||||
var _arr = [];
|
||||
__topoSort(_arr, _nodeList);
|
||||
return _arr;
|
||||
} #endregion
|
||||
|
||||
function __sortNode(_arr, _node) { #region
|
||||
|
@ -263,10 +262,10 @@ function Render(partial = false, runAction = false) { #region
|
|||
|
||||
function __renderListReset(arr) { #region
|
||||
for( var i = 0; i < array_length(arr); i++ ) {
|
||||
list[i].setRenderStatus(false);
|
||||
arr[i].setRenderStatus(false);
|
||||
|
||||
if(struct_has(list[i], "nodes"))
|
||||
__renderListReset(list[i].nodes);
|
||||
if(struct_has(arr[i], "nodes"))
|
||||
__renderListReset(arr[i].nodes);
|
||||
}
|
||||
} #endregion
|
||||
|
||||
|
@ -316,7 +315,7 @@ function RenderList(arr) { #region
|
|||
var nextNodes = rendering.getNextNodes();
|
||||
for( var i = 0, n = array_length(nextNodes); i < n; i++ ) {
|
||||
var _node = nextNodes[i];
|
||||
if(ds_list_exist(list, _node) && _node.isRenderable())
|
||||
if(array_exists(arr, _node) && _node.isRenderable())
|
||||
ds_queue_enqueue(queue, _node);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue