Skip to content

Commit d4fa832

Browse files
committed
Engine changes to allow Node material to work in Editor
1 parent 3ca76bf commit d4fa832

File tree

5 files changed

+298
-98
lines changed

5 files changed

+298
-98
lines changed

src/graphics/program-lib/programs/node.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var node = {
2121
},
2222

2323
createShaderDefinition: function (device, options) {
24-
var n;
24+
//var n;
2525

2626
// generate graph
2727
var rootDeclGLSL=options.shaderGraph.generateRootDeclGlsl();

src/resources/material.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ Object.assign(MaterialHandler.prototype, {
5454
});
5555
},
5656

57-
_genPlacholderNodeMat: function ()
57+
_genPlaceholderNodeMat: function ()
5858
{
5959
//start building shader graph
6060
shadergraph.start();
@@ -88,7 +88,7 @@ Object.assign(MaterialHandler.prototype, {
8888
{
8989
subclass = 'Node';
9090

91-
if (!this._parsers[subclass]) this._parsers[subclass] = new JsonNodeMaterialParser(this._device, this._genPlacholderNodeMat());
91+
if (!this._parsers[subclass]) this._parsers[subclass] = new JsonNodeMaterialParser(this._device, this._genPlaceholderNodeMat());
9292
if (!this._binders[subclass]) this._binders[subclass] = new NodeMaterialBinder(this._assets, this._device, this._parsers[subclass]);
9393
}
9494
else
@@ -130,15 +130,21 @@ Object.assign(MaterialHandler.prototype, {
130130

131131
var subclass = this._getSubClass(asset.data);
132132

133+
//adjust name if node material
134+
if (subclass == 'Node')
135+
{
136+
asset.resource.name = asset.name.replace(/[^A-Z0-9]+/ig, "_");
137+
}
138+
133139
//this should only happen in the editor?
134140
if (subclass == 'Node' && !(asset.resource instanceof NodeMaterial))
135141
{
136-
//TODO clean up old material nicely?
142+
//TODO: clean up old material nicely?
137143
asset.resource = this._parsers[subclass].parse(asset.data);
138144
}
139145
else if (subclass == 'Standard' && !(asset.resource instanceof StandardMaterial))
140146
{
141-
//TODO clean up old material nicely?
147+
//TODO: clean up old material nicely?
142148
asset.resource = this._parsers[subclass].parse(asset.data);
143149
}
144150

src/resources/node-material.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ Object.assign(NodeMaterialBinder.prototype, {
6565

6666
onAssetUnload: function (asset) {
6767
// remove the parameter block we created which includes texture references
68-
delete asset.data.parameters;
68+
//delete asset.data.parameters;
6969
//delete asset.data.chunks;
70-
delete asset.data.name;
70+
//delete asset.data.name;
7171
},
7272

7373
_assignTexture: function (iocVarIndex, materialAsset, resource) {
@@ -191,7 +191,7 @@ Object.assign(NodeMaterialBinder.prototype, {
191191
//for (var i=0;i<data.graphData.iocVars.length;i++)
192192
for (var i=0;i<Object.keys(data.graphData.iocVars).length;i++)
193193
{
194-
if (data.graphData.iocVars[i].valueTex)
194+
if (data.graphData.iocVars[i].type==='sampler2D' && data.graphData.iocVars[i].valueTex)
195195
{
196196
assetReference = material._iocVarAssetReferences[i];
197197

@@ -280,7 +280,7 @@ Object.assign(NodeMaterialBinder.prototype, {
280280
else
281281
{
282282
//assign placeholder glsl
283-
this._assignPlaceholderCustomGlsl(name, materialAsset);
283+
//this._assignPlaceholderCustomGlsl(name, materialAsset);
284284
}
285285

286286
assets.load(assetReference.asset);
@@ -293,7 +293,6 @@ Object.assign(NodeMaterialBinder.prototype, {
293293
if (data.graphData.subGraphs)
294294
{
295295
for (var i=0;i<Object.keys(data.graphData.subGraphs).length;i++)
296-
//for (var i=0;i<data.graphData.subGraphs.length;i++)
297296
{
298297
if (data.graphData.subGraphs[i])
299298
{
@@ -329,7 +328,7 @@ Object.assign(NodeMaterialBinder.prototype, {
329328
else
330329
{
331330
//assign placeholder texture
332-
this._assignPlaceholderSubGraph(i, materialAsset);
331+
//this._assignPlaceholderSubGraph(i, materialAsset);
333332
}
334333

335334
assets.load(assetReference.asset);

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

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
5050
//for (var i=0;i<data.graphData.iocVars.length;i++)
5151
for (var i=0;i<Object.keys(data.graphData.iocVars).length;i++)
5252
{
53-
if (data.graphData.iocVars[i].valueTex)
53+
if (data.graphData.iocVars[i].type==='sampler2D' && data.graphData.iocVars[i].valueTex)
5454
{
5555
if (typeof(data.graphData.iocVars[i].valueTex) === 'number' && data.graphData.iocVars[i].valueTex > 0)
5656
{
@@ -73,6 +73,13 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
7373
//assign directly - we (probably) don't need to convert to Vec2/3/4 objects?
7474
material.graphData.iocVars[i]={};
7575
Object.assign(material.graphData.iocVars[i], data.graphData.iocVars[i]);
76+
77+
//deal with 0 being undefined (TODO: find better way?)
78+
var var_type=material.graphData.iocVars[i].type;
79+
if (material.graphData.iocVars[i].valueW===undefined && var_type==='vec4') material.graphData.iocVars[i].valueW=0;
80+
if (material.graphData.iocVars[i].valueZ===undefined && (var_type==='vec4' || var_type==='vec3' )) material.graphData.iocVars[i].valueZ=0;
81+
if (material.graphData.iocVars[i].valueY===undefined && (var_type==='vec4' || var_type==='vec3' || var_type==='vec2' )) material.graphData.iocVars[i].valueY=0;
82+
if (material.graphData.iocVars[i].valueX===undefined && (var_type==='vec4' || var_type==='vec3' || var_type==='vec2' || var_type==='float' )) material.graphData.iocVars[i].valueX=0;
7683
}
7784
}
7885
}
@@ -145,25 +152,41 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
145152
//connections are indices and names - no asset refs - so just assign
146153
material.graphData.connections[i]={};
147154
Object.assign(material.graphData.connections[i], data.graphData.connections[i]);
155+
156+
//deal with 0 index problem
157+
if (material.graphData.connections[i].inVarName && material.graphData.connections[i].inNodeIndex===undefined) material.graphData.connections[i].inNodeIndex=0;
158+
if (material.graphData.connections[i].outVarName && material.graphData.connections[i].outNodeIndex===undefined) material.graphData.connections[i].outNodeIndex=0;
148159
}
149160
}
150161

151162
if (data.graphData.subGraphs)
152163
{
153-
material.graphData.subGraphs=[];
164+
if (material.graphData.subGraphs.length!=Object.keys(data.graphData.subGraphs).length)
165+
{
166+
material.graphData.subGraphs.length=Object.keys(data.graphData.subGraphs).length;
167+
}
154168

155169
//for (var i=0;i<data.graphData.subGraphs.length;i++)
156170
for (var i=0;i<Object.keys(data.graphData.subGraphs).length;i++)
157171
{
158172
if (typeof(data.graphData.subGraphs[i]) === 'number' && data.graphData.subGraphs[i] > 0)
159173
{
174+
material.graphData.subGraphs[i]=data.graphData.subGraphs[i];
160175
//this means sub graph asset is not loaded yet - cannot assign
161176
material_ready = false;
162177
}
163178
else
164179
{
165-
//sub graph asset loaded - assign!
166-
material.graphData.subGraphs[i]=data.graphData.subGraphs[i];
180+
//check if ready
181+
//if (data.graphData.subGraphs[i]._material_ready===true)
182+
{
183+
//sub graph asset loaded and ready - assign!
184+
material.graphData.subGraphs[i]=data.graphData.subGraphs[i];
185+
}
186+
//else
187+
//{
188+
// material_ready = false;
189+
//}
167190
}
168191
}
169192
}
@@ -186,11 +209,13 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
186209
//only mark for update if ready dependent assets (with no placeholders) are loaded
187210
if (material_ready)
188211
{
212+
//data._material_ready=true;
189213
material.dirtyShader = true;
190214
material.update();
191215
}
192216
else
193217
{
218+
//data._material_ready = false;
194219
material.setPlaceHolderShader(this._placeholderNodeMat);
195220
}
196221
};

0 commit comments

Comments
 (0)