Skip to content

Commit ca81a0a

Browse files
committed
fix problem with optional values not being defined if default + some var naming
1 parent 7726ddc commit ca81a0a

File tree

2 files changed

+50
-80
lines changed

2 files changed

+50
-80
lines changed

src/resources/parser/material/json-node-material.js

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ JsonNodeMaterialParser.prototype.parse = function (input) {
3232
*/
3333
JsonNodeMaterialParser.prototype.initialize = function (material, data) {
3434
var i = 0;
35-
var material_ready = true;
35+
var materialReady = true;
36+
var varType;
3637
// input or output or constant variables - all node material types have this block
3738
if (data.graphData.graphVars) {
3839
for (i = 0; i < Object.keys(data.graphData.graphVars).length; i++) {
@@ -41,7 +42,7 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
4142
// texture asset not loaded yet - deal with in node material binder
4243
if (!(material.graphData.graphVars[i] && material.graphData.graphVars[i].valueTex)) {
4344
// seems no placeholder is set yet
44-
material_ready = false;
45+
materialReady = false;
4546
}
4647
} else {
4748
// texture asset loaded - assign
@@ -54,11 +55,11 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
5455
Object.assign(material.graphData.graphVars[i], data.graphData.graphVars[i]);
5556

5657
// deal with 0 being undefined if default or optional
57-
var var_type = material.graphData.graphVars[i].type;
58-
if (material.graphData.graphVars[i].valueW === undefined && var_type === 'vec4') material.graphData.graphVars[i].valueW = 0;
59-
if (material.graphData.graphVars[i].valueZ === undefined && (var_type === 'vec4' || var_type === 'vec3' )) material.graphData.graphVars[i].valueZ = 0;
60-
if (material.graphData.graphVars[i].valueY === undefined && (var_type === 'vec4' || var_type === 'vec3' || var_type === 'vec2' )) material.graphData.graphVars[i].valueY = 0;
61-
if (material.graphData.graphVars[i].valueX === undefined && (var_type === 'vec4' || var_type === 'vec3' || var_type === 'vec2' || var_type === 'float' )) material.graphData.graphVars[i].valueX = 0;
58+
varType = material.graphData.graphVars[i].type;
59+
if (material.graphData.graphVars[i].valueW === undefined && varType === 'vec4') material.graphData.graphVars[i].valueW = 0;
60+
if (material.graphData.graphVars[i].valueZ === undefined && (varType === 'vec4' || varType === 'vec3' )) material.graphData.graphVars[i].valueZ = 0;
61+
if (material.graphData.graphVars[i].valueY === undefined && (varType === 'vec4' || varType === 'vec3' || varType === 'vec2' )) material.graphData.graphVars[i].valueY = 0;
62+
if (material.graphData.graphVars[i].valueX === undefined && (varType === 'vec4' || varType === 'vec3' || varType === 'vec2' || varType === 'float' )) material.graphData.graphVars[i].valueX = 0;
6263
}
6364
}
6465
}
@@ -68,7 +69,7 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
6869
if (data.graphData.customDeclGlsl) {
6970
if (typeof(data.graphData.customDeclGlsl) === 'number' && data.graphData.customDeclGlsl > 0) {
7071
// this means asset is not loaded yet - cannot assign
71-
material_ready = false;
72+
materialReady = false;
7273
} else {
7374
// shader asset loaded - assign!
7475
material.graphData.customDeclGlsl = data.graphData.customDeclGlsl;
@@ -78,7 +79,7 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
7879
if (data.graphData.customFuncGlsl) {
7980
if (typeof(data.graphData.customFuncGlsl) === 'number' && data.graphData.customFuncGlsl > 0) {
8081
// this means asset is not loaded yet - cannot assign
81-
material_ready = false;
82+
materialReady = false;
8283
} else {
8384
// shader asset loaded - assign and generate matching graphVars
8485
material.graphData.customFuncGlsl = data.graphData.customFuncGlsl;
@@ -93,6 +94,12 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
9394
if (data.graphData.graphVars && i < Object.keys(data.graphData.graphVars).length && material.graphData.graphVars[i].name === data.graphData.graphVars[i].name && material.graphData.graphVars[i].type === data.graphData.graphVars[i].type ) {
9495
// exists and matches copy what is already set in the asset
9596
Object.assign(material.graphData.graphVars[i], data.graphData.graphVars[i]);
97+
// deal with 0 being undefined if default or optional
98+
varType = material.graphData.graphVars[i].type;
99+
if (material.graphData.graphVars[i].valueW === undefined && varType === 'vec4') material.graphData.graphVars[i].valueW = 0;
100+
if (material.graphData.graphVars[i].valueZ === undefined && (varType === 'vec4' || varType === 'vec3' )) material.graphData.graphVars[i].valueZ = 0;
101+
if (material.graphData.graphVars[i].valueY === undefined && (varType === 'vec4' || varType === 'vec3' || varType === 'vec2' )) material.graphData.graphVars[i].valueY = 0;
102+
if (material.graphData.graphVars[i].valueX === undefined && (varType === 'vec4' || varType === 'vec3' || varType === 'vec2' || varType === 'float' )) material.graphData.graphVars[i].valueX = 0;
96103
}
97104
}
98105
}
@@ -108,10 +115,6 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
108115
// connections are indices and names - no asset refs - so just assign
109116
material.graphData.connections[i] = {};
110117
Object.assign(material.graphData.connections[i], data.graphData.connections[i]);
111-
112-
// deal with optional value problem (should no longer happen?)
113-
// if (material.graphData.connections[i].dstVarName && material.graphData.connections[i].dstIndex === undefined) material.graphData.connections[i].dstIndex = -1;
114-
// if (material.graphData.connections[i].srcVarName && material.graphData.connections[i].srcIndex === undefined) material.graphData.connections[i].srcIndex = -1;
115118
}
116119
}
117120

@@ -123,7 +126,7 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
123126
for (i = 0; i < Object.keys(data.graphData.subGraphs).length; i++) {
124127
if (typeof(data.graphData.subGraphs[i]) === 'number' && data.graphData.subGraphs[i] > 0) {
125128
// this means sub graph asset is not loaded yet
126-
material_ready = false;
129+
materialReady = false;
127130
// set to something so that validation doesn't pass on all loaded sub graphs
128131
material.graphData.subGraphs[i] = i;
129132
} else {
@@ -135,15 +138,15 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
135138
if (data.graphData.graphVars) {
136139
// no custom glsl or sub graphs - this means this is a node material instance?
137140
// TODO: support material instances properly?
138-
material_ready = false;
141+
materialReady = false;
139142
} else {
140143
// completely empty?
141-
material_ready = false;
144+
materialReady = false;
142145
}
143146
}
144147

145148
// only mark for update if ready dependent assets (with no placeholders) are loaded
146-
if (material_ready) {
149+
if (materialReady) {
147150
material.dirtyShader = true;
148151
material.update();
149152
} else {

src/scene/materials/node-material.js

Lines changed: 30 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -82,23 +82,23 @@ Object.assign(NodeMaterial.prototype, {
8282
var graphVar = this.graphData.graphVars[n];
8383

8484
if (graphVar.name.startsWith('IN_') || (graphVar.name.startsWith('CONST_') && graphVar.type === 'sampler2D')) {
85-
var g_id = '_' + this.id;
85+
var matId = '_' + this.id;
8686

8787
switch (graphVar.type) {
8888
case 'sampler2D':
89-
this.setParameter(graphVar.name + g_id, graphVar.valueTex);
89+
this.setParameter(graphVar.name + matId, graphVar.valueTex);
9090
break;
9191
case 'float':
92-
this.setParameter(graphVar.name + g_id, graphVar.valueX);
92+
this.setParameter(graphVar.name + matId, graphVar.valueX);
9393
break;
9494
case 'vec2':
95-
this.setParameter(graphVar.name + g_id, [graphVar.valueX, graphVar.valueY]);
95+
this.setParameter(graphVar.name + matId, [graphVar.valueX, graphVar.valueY]);
9696
break;
9797
case 'vec3':
98-
this.setParameter(graphVar.name + g_id, [graphVar.valueX, graphVar.valueY, graphVar.valueZ]);
98+
this.setParameter(graphVar.name + matId, [graphVar.valueX, graphVar.valueY, graphVar.valueZ]);
9999
break;
100100
case 'vec4':
101-
this.setParameter(graphVar.name + g_id, [graphVar.valueX, graphVar.valueY, graphVar.valueZ, graphVar.valueW]);
101+
this.setParameter(graphVar.name + matId, [graphVar.valueX, graphVar.valueY, graphVar.valueZ, graphVar.valueW]);
102102
break;
103103
case 'samplerCube':
104104
default:
@@ -107,16 +107,6 @@ Object.assign(NodeMaterial.prototype, {
107107
}
108108
}
109109
}
110-
//
111-
// if (this._depGraphTextureList)
112-
// {
113-
// for (var i = 0; i < this._depGraphTextureList.length; i++)
114-
// {
115-
// var depGraphTexture=this._depGraphTextureList[i];
116-
//
117-
// this.setParameter(depGraphTexture.name, depGraphTexture.valueTex);
118-
// }
119-
// }
120110

121111
if (this.dirtyShader || !this._scene) {
122112
this.shader = null;
@@ -125,26 +115,6 @@ Object.assign(NodeMaterial.prototype, {
125115
},
126116

127117
updateShader: function (device, scene, objDefs, staticLightList, pass, sortedLights) {
128-
// update dynamic lighting - for now main light is first directional light in slot 0 of 32 slots
129-
//
130-
// var dynamicLightlist = [];
131-
// var mainLight;
132-
//
133-
// for (i = 0; i < sortedLights[LIGHTTYPE_DIRECTIONAL].length; i++)
134-
// {
135-
// var light = sortedLights[LIGHTTYPE_DIRECTIONAL][i];
136-
// if (light.enabled && light. ) {
137-
// if (light.mask & mask) {
138-
// if (lType !== LIGHTTYPE_DIRECTIONAL) {
139-
// if (light.isStatic) {
140-
// continue;
141-
// }
142-
// }
143-
// lightsFiltered.push(light);
144-
// }
145-
// }
146-
// }
147-
//
148118
if (this.hasValidGraphData()) {
149119
this.initShader(device);
150120
this.dirtyShader = false;
@@ -308,28 +278,28 @@ Object.assign(NodeMaterial.prototype, {
308278
var functionString = this.graphData.customFuncGlsl.trim();
309279

310280
var head = functionString.split(")")[0];
311-
var rettype_funcname = head.split("(")[0];
312-
var rettype = rettype_funcname.split(" ")[0];
281+
var retTypeAndFuncName = head.split("(")[0];
282+
var retType = retTypeAndFuncName.split(" ")[0];
313283
var params = head.split("(")[1].split(",");
314284

315-
this.name = rettype_funcname.split(" ")[1];
285+
this.name = retTypeAndFuncName.split(" ")[1];
316286
// TODO check for function name clashes - maybe replace func name in function string with hash key?
317287

318-
if (rettype != "void") {
319-
this.addOutput(rettype, 'ret');
288+
if (retType != "void") {
289+
this.addOutput(retType, 'ret');
320290
}
321291

322292
for (var p = 0; p < params.length; p++) {
323-
var io_type_name = params[p].split(" ");
293+
var inOrOutAndTypeAndName = params[p].split(" ");
324294

325-
if (io_type_name[0] === "") io_type_name.shift();
295+
if (inOrOutAndTypeAndName[0] === "") inOrOutAndTypeAndName.shift();
326296

327-
if (io_type_name[0] === "out") {
328-
this.addOutput(io_type_name[1], io_type_name[2]);
297+
if (inOrOutAndTypeAndName[0] === "out") {
298+
this.addOutput(inOrOutAndTypeAndName[1], inOrOutAndTypeAndName[2]);
329299
// this.defineOuputGetter(this.outputName[this.outputName.length - 1], this.outputName.length - 1);
330300
}
331-
if (io_type_name[0] === "in") {
332-
this.addInput(io_type_name[1], io_type_name[2]);
301+
if (inOrOutAndTypeAndName[0] === "in") {
302+
this.addInput(inOrOutAndTypeAndName[1], inOrOutAndTypeAndName[2]);
333303
// this.defineInputSetter(this.inputName[this.inputName.length - 1], this.inputName.length - 1);
334304
} else {
335305
// unsupported parameter !!! TODO add support for more parameter types?
@@ -462,10 +432,10 @@ Object.assign(NodeMaterial.prototype, {
462432
var generatedGlsl = '';
463433
// run through inputs (and const sampler2Ds) to declare uniforms - (default) values are set elsewhere
464434
for (i = 0; i < this.graphData.graphVars.length; i++) {
465-
var g_id = '_' + this.id;
435+
var matId = '_' + this.id;
466436
graphVar = this.graphData.graphVars[i];
467437
if (graphVar.name.startsWith('IN_') || (graphVar.name.startsWith('CONST_') && graphVar.type === 'sampler2D')) {
468-
generatedGlsl += 'uniform ' + graphVar.type + ' ' + graphVar.name + g_id + ';\n';
438+
generatedGlsl += 'uniform ' + graphVar.type + ' ' + graphVar.name + matId + ';\n';
469439
}
470440
}
471441
// run through constants values are set here (except for textures - which have to be uniforms)
@@ -515,8 +485,8 @@ Object.assign(NodeMaterial.prototype, {
515485

516486
depGraphList.push(funcString);
517487
}
518-
var t_len = depGraphList.length; // need this because pop() reduces array length!
519-
for (i = 0; i < t_len; i++) {
488+
var tLen = depGraphList.length; // need this because pop() reduces array length!
489+
for (i = 0; i < tLen; i++) {
520490
generatedGlsl += depGraphList.pop();
521491
}
522492

@@ -531,10 +501,10 @@ Object.assign(NodeMaterial.prototype, {
531501
var outNames = {};
532502

533503
for (var i = 0; i < this.graphData.graphVars.length; i++) {
534-
var g_id = '_' + this.id;
504+
var matId = '_' + this.id;
535505
var graphVar = this.graphData.graphVars[i];
536506
if (graphVar.name.startsWith('IN_')) {
537-
inNames[graphVar.name] = graphVar.name + g_id;
507+
inNames[graphVar.name] = graphVar.name + matId;
538508
}
539509
if (graphVar.name.startsWith('OUT_')) {
540510
generatedGlsl += graphVar.type + ' ' + graphVar.name + ';\n';
@@ -559,18 +529,17 @@ Object.assign(NodeMaterial.prototype, {
559529
} else if (this.graphData.subGraphs) {
560530
// graph
561531
// function head
562-
var ret_used = false;
532+
var retUsed = false;
563533

564534
for (i = 0; i < this.graphData.graphVars.length; i++) {
565535
graphVar = this.graphData.graphVars[i];
566536
if (graphVar.name.startsWith('OUT_ret')) {
567-
// graphVarNameToIndexMap[graphVar.name]={type:graphVar.type, value:graphVar.value};
568537
generatedGlsl = graphVar.type + ' ';
569-
ret_used = true;
538+
retUsed = true;
570539
}
571540
}
572541

573-
if (ret_used === true) {
542+
if (retUsed === true) {
574543
generatedGlsl += this.name + '_' + this.id + '( ';
575544
} else {
576545
generatedGlsl = 'void ' + this.name + '_' + this.id + '( ';
@@ -579,8 +548,6 @@ Object.assign(NodeMaterial.prototype, {
579548
for (i = 0; i < this.graphData.graphVars.length; i++) {
580549
graphVar = this.graphData.graphVars[i];
581550
if (graphVar.name.startsWith('IN_')) {
582-
// graphVarNameToIndexMap[graphVar.name]={type:graphVar.type, value:graphVar.value};
583-
584551
generatedGlsl += 'in ' + graphVar.type + ' ' + graphVar.name + ', ';
585552
}
586553
}
@@ -589,7 +556,6 @@ Object.assign(NodeMaterial.prototype, {
589556
graphVar = this.graphData.graphVars[i];
590557
if (graphVar.name.startsWith('OUT_')) {
591558
if (!graphVar.name.startsWith('OUT_ret')) {
592-
// graphVarNameToIndexMap[graphVar.name]={type:graphVar.type, value:graphVar.value};
593559
generatedGlsl += 'out ' + graphVar.type + ' ' + graphVar.name + ', ';
594560
}
595561
}
@@ -657,10 +623,11 @@ Object.assign(NodeMaterial.prototype, {
657623
var subGraphOnListFlags = [];
658624
var subGraphList = [];
659625

660-
var while_loop_count = 0; // it should not be possible for the the number of iterations to exceeds the number of connections - unless there is a cyclic dependency
626+
// it should not be possible for the the number of iterations to exceeds the number of connections - unless there is a cyclic dependency
627+
var whileLoopCount = 0;
661628

662-
while (subGraphList.length < this.graphData.subGraphs.length || while_loop_count < this.graphData.connections.length) {
663-
while_loop_count++;
629+
while (subGraphList.length < this.graphData.subGraphs.length || whileLoopCount < this.graphData.connections.length) {
630+
whileLoopCount++;
664631

665632
for (i = 0; i < this.graphData.subGraphs.length; i++) {
666633
if (subGraphOnListFlags[i] != true) {

0 commit comments

Comments
 (0)