Skip to content

Commit c6ca4b9

Browse files
committed
iocVars renamed, connections refactored (need debug), other misc refactoring
1 parent 0a45c20 commit c6ca4b9

File tree

3 files changed

+262
-292
lines changed

3 files changed

+262
-292
lines changed

src/resources/node-material.js

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ Object.assign(NodeMaterialBinder.prototype, {
7070
// delete asset.data.name;
7171
},
7272

73-
_assignTexture: function (iocVarIndex, materialAsset, resource) {
74-
materialAsset.data.graphData.iocVars[iocVarIndex].valueTex = resource;
75-
materialAsset.resource.graphData.iocVars[iocVarIndex].valueTex = resource;
73+
_assignTexture: function (graphVarIndex, materialAsset, resource) {
74+
materialAsset.data.graphData.graphVars[graphVarIndex].valueTex = resource;
75+
materialAsset.resource.graphData.graphVars[graphVarIndex].valueTex = resource;
7676
},
7777

7878
_assignSubGraph: function (subGraphIndex, materialAsset, resource) {
@@ -88,15 +88,15 @@ Object.assign(NodeMaterialBinder.prototype, {
8888
// assign a placeholder texture and graph while waiting for one to load
8989
// placeholder textures and graph do not replace the data[parameterName] value
9090
// in the asset.data thus preserving the final asset id until it is loaded
91-
_assignPlaceholderTexture: function (iocVarIndex, materialAsset) {
91+
_assignPlaceholderTexture: function (graphVarIndex, materialAsset) {
9292
// create placeholders on-demand
9393
if (!this._placeholderTextures) {
9494
this._createPlaceholders();
9595
}
9696

9797
var texture = this._placeholderTextures.white;
9898

99-
materialAsset.resource.graphData.iocVars[iocVarIndex].valueTex = texture;
99+
materialAsset.resource.graphData.graphVars[graphVarIndex].valueTex = texture;
100100
},
101101

102102
_assignPlaceholderSubGraph: function (subGraphIndex, materialAsset) {
@@ -139,19 +139,19 @@ Object.assign(NodeMaterialBinder.prototype, {
139139
}
140140
},
141141

142-
_onIocVarTexLoad: function (i, materialAsset, textureAsset) {
142+
_onGraphVarTexLoad: function (i, materialAsset, textureAsset) {
143143
this._assignTexture(i, materialAsset, textureAsset.resource);
144144
this._parser.initialize(materialAsset.resource, materialAsset.data);
145145
},
146146

147-
_onIocVarTexAdd: function (i, materialAsset, textureAsset) {
147+
_onGraphVarTexAdd: function (i, materialAsset, textureAsset) {
148148
this._assets.load(textureAsset);
149149
},
150150

151-
_onIocVarTexRemove: function (i, materialAsset, textureAsset) {
151+
_onGraphVarTexRemove: function (i, materialAsset, textureAsset) {
152152
var material = materialAsset.resource;
153153

154-
if (material.graphData.iocVars[i].valueTex === textureAsset.resource) {
154+
if (material.graphData.graphVars[i].valueTex === textureAsset.resource) {
155155
this._assignTexture(i, materialAsset, null);
156156
this._parser.initialize(materialAsset.resource, materialAsset.data);
157157
}
@@ -186,40 +186,40 @@ Object.assign(NodeMaterialBinder.prototype, {
186186

187187
var assetReference;
188188

189-
// deal with textures (which are only in the iocVars block)
190-
if (data.graphData.iocVars) {
191-
for (i = 0; i < Object.keys(data.graphData.iocVars).length; i++) {
192-
if (data.graphData.iocVars[i].type === 'sampler2D' && data.graphData.iocVars[i].valueTex) {
193-
assetReference = material._iocVarAssetReferences[i];
189+
// deal with textures (which are only in the graphVars block)
190+
if (data.graphData.graphVars) {
191+
for (i = 0; i < Object.keys(data.graphData.graphVars).length; i++) {
192+
if (data.graphData.graphVars[i].type === 'sampler2D' && data.graphData.graphVars[i].valueTex) {
193+
assetReference = material._graphVarAssetReferences[i];
194194

195-
if (!(data.graphData.iocVars[i].valueTex instanceof Texture)) {
195+
if (!(data.graphData.graphVars[i].valueTex instanceof Texture)) {
196196
if (!assetReference) {
197197
assetReference = new AssetReference(i, materialAsset, assets, {
198-
load: this._onIocVarTexLoad,
199-
add: this._onIocVarTexAdd,
200-
remove: this._onIocVarTexRemove
198+
load: this._onGraphVarTexLoad,
199+
add: this._onGraphVarTexAdd,
200+
remove: this._onGraphVarTexRemove
201201
}, this);
202202

203-
material._iocVarAssetReferences[i] = assetReference;
203+
material._graphVarAssetReferences[i] = assetReference;
204204
}
205205

206206
if (pathMapping) {
207207
// texture paths are measured from the material directory
208-
assetReference.url = materialAsset.getAbsoluteUrl(data.iocVars[i].valueTex);
208+
assetReference.url = materialAsset.getAbsoluteUrl(data.graphVars[i].valueTex);
209209
} else {
210-
assetReference.id = data.graphData.iocVars[i].valueTex;
210+
assetReference.id = data.graphData.graphVars[i].valueTex;
211211
}
212212

213213
if (assetReference.asset) {
214214
if (assetReference.asset.resource) {
215215
// asset is already loaded
216-
material.graphData.iocVars[i] = {};
217-
Object.assign(material.graphData.iocVars[i], data.graphData.iocVars[i]);
216+
material.graphData.graphVars[i] = {};
217+
Object.assign(material.graphData.graphVars[i], data.graphData.graphVars[i]);
218218
this._assignTexture(i, materialAsset, assetReference.asset.resource);
219219
} else {
220220
// assign placeholder texture
221-
material.graphData.iocVars[i] = {};
222-
Object.assign(material.graphData.iocVars[i], data.graphData.iocVars[i]);
221+
material.graphData.graphVars[i] = {};
222+
Object.assign(material.graphData.graphVars[i], data.graphData.graphVars[i]);
223223
this._assignPlaceholderTexture(i, materialAsset);
224224
}
225225

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

Lines changed: 35 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -34,31 +34,31 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
3434
var i = 0;
3535
var material_ready = true;
3636
// input or output or constant variables - all node material types have this block
37-
if (data.graphData.iocVars) {
38-
for (i = 0; i < Object.keys(data.graphData.iocVars).length; i++) {
39-
if (data.graphData.iocVars[i].type === 'sampler2D' && data.graphData.iocVars[i].valueTex) {
40-
if (typeof(data.graphData.iocVars[i].valueTex) === 'number' && data.graphData.iocVars[i].valueTex > 0) {
37+
if (data.graphData.graphVars) {
38+
for (i = 0; i < Object.keys(data.graphData.graphVars).length; i++) {
39+
if (data.graphData.graphVars[i].type === 'sampler2D' && data.graphData.graphVars[i].valueTex) {
40+
if (typeof(data.graphData.graphVars[i].valueTex) === 'number' && data.graphData.graphVars[i].valueTex > 0) {
4141
// texture asset not loaded yet - deal with in node material binder
42-
if (!(material.graphData.iocVars[i] && material.graphData.iocVars[i].valueTex)) {
42+
if (!(material.graphData.graphVars[i] && material.graphData.graphVars[i].valueTex)) {
4343
// seems no placeholder is set yet
4444
material_ready = false;
4545
}
4646
} else {
4747
// texture asset loaded - assign
48-
material.graphData.iocVars[i] = {};
49-
Object.assign(material.graphData.iocVars[i], data.graphData.iocVars[i]);
48+
material.graphData.graphVars[i] = {};
49+
Object.assign(material.graphData.graphVars[i], data.graphData.graphVars[i]);
5050
}
5151
} else {
5252
// assign directly - we (probably) don't need to convert to Vec2/3/4 objects?
53-
material.graphData.iocVars[i] = {};
54-
Object.assign(material.graphData.iocVars[i], data.graphData.iocVars[i]);
55-
56-
// deal with 0 being undefined (TODO: find better way?)
57-
var var_type = material.graphData.iocVars[i].type;
58-
if (material.graphData.iocVars[i].valueW === undefined && var_type === 'vec4') material.graphData.iocVars[i].valueW = 0;
59-
if (material.graphData.iocVars[i].valueZ === undefined && (var_type === 'vec4' || var_type === 'vec3' )) material.graphData.iocVars[i].valueZ = 0;
60-
if (material.graphData.iocVars[i].valueY === undefined && (var_type === 'vec4' || var_type === 'vec3' || var_type === 'vec2' )) material.graphData.iocVars[i].valueY = 0;
61-
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;
53+
material.graphData.graphVars[i] = {};
54+
Object.assign(material.graphData.graphVars[i], data.graphData.graphVars[i]);
55+
56+
// 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;
6262
}
6363
}
6464
}
@@ -80,23 +80,19 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
8080
// this means asset is not loaded yet - cannot assign
8181
material_ready = false;
8282
} else {
83-
// shader asset loaded - assign and generate matching iocVars
83+
// shader asset loaded - assign and generate matching graphVars
8484
material.graphData.customFuncGlsl = data.graphData.customFuncGlsl;
85-
material.graphData.iocVars.length = 0;
86-
material.genCustomFuncIocVars();
87-
88-
// copy values that match into new iocVars - if not matching reset
89-
// TODO: make this more robust (match even if index doesn't match)?
90-
if (material.graphData.iocVars) {
91-
for (i = 0; i < material.graphData.iocVars.length; i++) {
92-
// if (data.graphData.iocVars && i<data.graphData.iocVars.length && material.graphData.iocVars[i].name===data.graphData.iocVars[i].name && material.graphData.iocVars[i].type===data.graphData.iocVars[i].type )
93-
if (data.graphData.iocVars && i < Object.keys(data.graphData.iocVars).length && material.graphData.iocVars[i].name === data.graphData.iocVars[i].name && material.graphData.iocVars[i].type === data.graphData.iocVars[i].type ) {
85+
material.graphData.graphVars.length = 0;
86+
material.genCustomFuncVars();
87+
88+
// copy values that match into new graph variables - if not matching reset
89+
// TODO: make this more robust (match name even if index doesn't match)?
90+
if (material.graphData.graphVars) {
91+
for (i = 0; i < material.graphData.graphVars.length; i++) {
92+
// if (data.graphData.graphVars && i<data.graphData.graphVars.length && material.graphData.graphVars[i].name===data.graphData.graphVars[i].name && material.graphData.graphVars[i].type===data.graphData.graphVars[i].type )
93+
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 ) {
9494
// exists and matches copy what is already set in the asset
95-
Object.assign(material.graphData.iocVars[i], data.graphData.iocVars[i]);
96-
} else {
97-
// reset and copy material into data.graphData
98-
// data.graphData.iocVars[i]={};
99-
// Object.assign(data.graphData.iocVars[i], material.graphData.iocVars[i]);
95+
Object.assign(material.graphData.graphVars[i], data.graphData.graphVars[i]);
10096
}
10197
}
10298
}
@@ -113,9 +109,9 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
113109
material.graphData.connections[i] = {};
114110
Object.assign(material.graphData.connections[i], data.graphData.connections[i]);
115111

116-
// deal with 0 index problem
117-
if (material.graphData.connections[i].inVarName && material.graphData.connections[i].inNodeIndex === undefined) material.graphData.connections[i].inNodeIndex = 0;
118-
if (material.graphData.connections[i].outVarName && material.graphData.connections[i].outNodeIndex === undefined) material.graphData.connections[i].outNodeIndex = 0;
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;
119115
}
120116
}
121117

@@ -126,18 +122,19 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
126122

127123
for (i = 0; i < Object.keys(data.graphData.subGraphs).length; i++) {
128124
if (typeof(data.graphData.subGraphs[i]) === 'number' && data.graphData.subGraphs[i] > 0) {
129-
material.graphData.subGraphs[i] = data.graphData.subGraphs[i];
130-
// this means sub graph asset is not loaded yet - cannot assign
125+
// this means sub graph asset is not loaded yet
131126
material_ready = false;
127+
// set to something so that validation doesn't pass on all loaded sub graphs
128+
material.graphData.subGraphs[i] = i;
132129
} else {
133130
material.graphData.subGraphs[i] = data.graphData.subGraphs[i];
134131
}
135132
}
136133
}
137134
} else {
138-
if (data.graphData.iocVars) {
135+
if (data.graphData.graphVars) {
139136
// no custom glsl or sub graphs - this means this is a node material instance?
140-
// TODO: support material instances properly
137+
// TODO: support material instances properly?
141138
material_ready = false;
142139
} else {
143140
// completely empty?
@@ -147,29 +144,23 @@ JsonNodeMaterialParser.prototype.initialize = function (material, data) {
147144

148145
// only mark for update if ready dependent assets (with no placeholders) are loaded
149146
if (material_ready) {
150-
// data._material_ready=true;
151147
material.dirtyShader = true;
152148
material.update();
153149
} else {
154-
// data._material_ready = false;
155150
material.setPlaceHolderShader(this._placeholderNodeMat);
156151
}
157152
};
158153

159154
// convert any properties that are out of date
160155
// or from old versions into current version
161156
JsonNodeMaterialParser.prototype.migrate = function (data) {
162-
163157
// no conversion needed (yet)
164-
165158
return data;
166159
};
167160

168161
// check for invalid properties
169162
JsonNodeMaterialParser.prototype._validate = function (data) {
170-
171163
// no validation needed (yet)
172-
173164
return data;
174165
};
175166

0 commit comments

Comments
 (0)