Skip to content

Commit 56bebeb

Browse files
committed
Linted and tidied - still will do a naming convention pass
1 parent 5e7f36f commit 56bebeb

File tree

12 files changed

+652
-3219
lines changed

12 files changed

+652
-3219
lines changed

examples/graphics/shader-node-graph-material-fixedloop-n-branch.html

Lines changed: 0 additions & 396 deletions
This file was deleted.

examples/graphics/shader-node-graph-material.html

Lines changed: 0 additions & 546 deletions
This file was deleted.

examples/graphics/shader-node-graph-material_bakup.html

Lines changed: 0 additions & 609 deletions
This file was deleted.

examples/graphics/shader-node-hl2-basis.html

Lines changed: 0 additions & 646 deletions
This file was deleted.

examples/graphics/shader-node.html

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,10 @@
8585
var texSampleNode = pc.shadergraph.textureSample2D('diffSamp',diffuseMap, pc.shadergraph.uv0);
8686

8787
//hook up PS outputs
88-
//pc.shadergraph.connectFragColor(texSampleNode, 'color');
89-
//pc.shadergraph.connectFragAlpha(texSampleNode, 'alpha');
9088
pc.shadergraph.connectFragOut(texSampleNode);
9189

9290
//create a custom vertex offset shader graph node
93-
var wobbleVSNode = pc.shadergraph.customNode('wobbleVS', document.getElementById("wobbleVS").textContent);//'vec3 wobbleVS(in vec3 wp, in vec3 wn, in float t){ return vec3(sin(t*5.0+dot(wp.xy,vec2(1,1)))*0.3)*normalize(wn); }');
91+
var wobbleVSNode = pc.shadergraph.customNode('wobbleVS', document.getElementById("wobbleVS").textContent);
9492

9593
//hook up custom node inputs
9694
pc.shadergraph.connectCustom(wobbleVSNode, 'wp', pc.shadergraph.worldPosVS);
@@ -115,7 +113,7 @@
115113
//update time parameter every frame
116114
app.on("update", function (dt) {
117115
time += dt;
118-
material.setParameter('IN_uTime', time);
116+
material.setParameter('IN_uTime_'+material.id, time);
119117
});
120118

121119
app.start();

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

Lines changed: 15 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import {
33
} from '../../graphics.js';
44
import { shaderChunks } from '../chunks/chunks.js';
55

6-
//import {
6+
// TODO: support passes:
7+
// import {
78
// SHADER_DEPTH, SHADER_FORWARD, SHADER_FORWARDHDR, SHADER_PICK, SHADER_SHADOW
8-
//} from '../../scene/constants.js';
9+
// } from '../../scene/constants.js';
910

10-
//import { programlib } from './program-lib.js';
1111
import { begin, end, fogCode, precisionCode, skinCode, versionCode } from './common.js';
1212

1313
var node = {
@@ -16,16 +16,15 @@ var node = {
1616
if (options.fog) key += '_fog';
1717
if (options.alphaTest) key += '_atst';
1818
if (options.shaderGraph) key += options.shaderGraph.key;
19-
// key += '_' + options.pass;
19+
// TODO: support passes
20+
// key += '_' + options.pass;
2021
return key;
2122
},
2223

2324
createShaderDefinition: function (device, options) {
24-
//var n;
25-
2625
// generate graph
27-
var rootDeclGLSL=options.shaderGraph.generateRootDeclGlsl();
28-
var rootCallGLSL=options.shaderGraph.generateRootCallGlsl();
26+
var rootDeclGLSL = options.shaderGraph.generateRootDeclGlsl();
27+
var rootCallGLSL = options.shaderGraph.generateRootCallGlsl();
2928

3029
// GENERATE ATTRIBUTES
3130
var attributes = {
@@ -54,7 +53,6 @@ var node = {
5453
code += chunks.transformVS;
5554
}
5655

57-
// code += 'attribute vec3 vertex_position;\n';
5856
code += 'varying vec3 vPosition;\n';
5957

6058
code += 'attribute vec3 vertex_normal;\n';
@@ -66,40 +64,12 @@ var node = {
6664
code += 'attribute vec2 vertex_texCoord0;\n';
6765
code += 'varying vec2 vUv0;\n';
6866

69-
/*
70-
if (options.pass === SHADER_PICK) {
71-
// ##### PICK PASS #####
72-
} else if (options.pass === SHADER_DEPTH) {
73-
// ##### SCREEN DEPTH PASS #####
74-
code += " gl_FragColor = packFloat(vDepth);\n";
75-
}
76-
else if (options.pass === SHADER_FORWARD || options.pass === SHADER_FORWARDHDR )
77-
{
78-
79-
}*/
80-
81-
// if (options.pass === SHADER_DEPTH) {
82-
// code += 'varying float vDepth;\n';
83-
// code += '#ifndef VIEWMATRIX\n';
84-
// code += '#define VIEWMATRIX\n';
85-
// code += 'uniform mat4 matrix_view;\n';
86-
// code += '#endif\n';
87-
// code += '#ifndef CAMERAPLANES\n';
88-
// code += '#define CAMERAPLANES\n';
89-
// code += 'uniform vec4 camera_params;\n\n';
90-
// code += '#endif\n';
91-
// }
92-
/* if (options.shaderGraph) {
93-
for (n = 0; n < options.shaderGraph.params.length; n++) {
94-
code += 'uniform ' + options.shaderGraph.params[n].type + ' ' + options.shaderGraph.params[n].name + ';\n';
95-
}
96-
}*/
97-
67+
// TODO: support passes SHADER_DEPTH SHADER_FORWARD SHADER_FORWARDHDR SHADER_PICK
9868
code += 'vec3 getWorldPositionNM(){return (getModelMatrix()*vec4(vertex_position, 1.0)).xyz;}\n';
9969
code += 'vec3 getWorldNormalNM(){return (getModelMatrix()*vec4(vertex_normal, 0.0)).xyz;}\n';
10070

10171
if (options.shaderGraph) {
102-
code += "#define MAX_VS_LIGHTS "+Math.floor(options.maxVertexLights)+"\n";
72+
code += "#define MAX_VS_LIGHTS " + Math.floor(options.maxVertexLights) + "\n";
10373
code += "#define SG_VS\n";
10474
code += rootDeclGLSL;
10575
}
@@ -110,41 +80,17 @@ var node = {
11080
if (options.shaderGraph) {
11181
code += rootCallGLSL;
11282
code += " vPosition = getWorldPositionNM()+OUT_vertOff;\n";
113-
code += " gl_Position = matrix_viewProjection*vec4(vPosition,1);\n";
83+
code += " gl_Position = matrix_viewProjection*vec4(vPosition,1);\n";
11484
} else {
11585
code += " vPosition = getWorldPositionNM();\n";
11686
code += " gl_Position = matrix_viewProjection*vec4(vPosition,1);\n";
11787
}
118-
/*
119-
if (options.pass === SHADER_DEPTH)
120-
{
121-
code += " vDepth = -(matrix_view * vec4(getWorldPosition(),1.0)).z * camera_params.x;\n";
122-
}
123-
else if (options.pass === SHADER_FORWARD || options.pass === SHADER_FORWARDHDR )
124-
{
125-
//vert lighting!
126-
127-
}
128-
129-
if (options.pass === SHADER_PICK) {
130-
// ##### PICK PASS #####
131-
} else if (options.pass === SHADER_DEPTH) {
132-
// ##### SCREEN DEPTH PASS #####
133-
code += " gl_FragColor = packFloat(vDepth);\n";
134-
}
135-
else if (options.pass === SHADER_FORWARD || options.pass === SHADER_FORWARDHDR )
136-
{
137-
138-
} */
139-
140-
// code += ' vNormal = getNormal(vertex_normal);\n';
141-
//code += ' vNormal = vertex_normal;/*getWorldNormalNM();*/\n';
88+
89+
// TODO: support passes SHADER_DEPTH SHADER_FORWARD SHADER_FORWARDHDR SHADER_PICK
14290
code += ' vNormal = normalize(getWorldNormalNM());\n';
14391
code += ' vColor = vertex_color;\n';
14492
code += ' vUv0 = vertex_texCoord0;\n';
14593

146-
//code += ' calcVertexLightingVS(vPosition, vNormal);\n';
147-
14894
code += end();
14995

15096
var vshader = code;
@@ -173,7 +119,6 @@ var node = {
173119
if (options.forceFragmentPrecision === "mediump" && device.maxPrecision === "lowp") options.forceFragmentPrecision = "lowp";
174120
}
175121

176-
var fshader;
177122
code = '';
178123

179124
if (device.webgl2) {
@@ -194,7 +139,6 @@ var node = {
194139
code += options.forceFragmentPrecision ? "precision " + options.forceFragmentPrecision + " float;\n\n" : precisionCode(device);
195140

196141
// FRAGMENT SHADER DECLARATIONS
197-
198142
code += 'uniform vec3 view_position;\n';
199143

200144
code += 'varying vec3 vPosition;\n';
@@ -209,26 +153,11 @@ var node = {
209153
code += chunks.alphaTestPS;
210154
}
211155

212-
// if (options.pass === SHADER_DEPTH) {
213-
// // ##### SCREEN DEPTH PASS #####
214-
// code += 'varying float vDepth;\n';
215-
// code += chunks.packDepthPS;
216-
// }
217-
218156
if (options.shaderGraph) {
219-
/*for (n = 0; n < options.shaderGraph.params.length; n++) {
220-
code += 'uniform ' + options.shaderGraph.params[n].type + ' ' + options.shaderGraph.params[n].name + ';\n';
221-
}*/
222-
code += "#define MAX_PS_LIGHTS "+Math.floor(options.maxPixelLights)+"\n";
157+
code += "#define MAX_PS_LIGHTS " + Math.floor(options.maxPixelLights) + "\n";
223158
code += "#define SG_PS\n";
224159
code += rootDeclGLSL;
225160
}
226-
// if (options.nodeInputs.emissiveColor) code += options.nodeInputs.emissiveColor;
227-
// if (options.nodeInputs.baseColor) code += options.nodeInputs.baseColor;
228-
// if (options.nodeInputs.opacity) code += options.nodeInputs.opacity;
229-
// if (options.nodeInputs.normal) code += options.nodeInputs.normal;
230-
// if (options.nodeInputs.metallic) code += options.nodeInputs.metallic;
231-
// if (options.nodeInputs.roughness) code += options.nodeInputs.roughness;
232161

233162
// FRAGMENT SHADER BODY
234163
code += begin();
@@ -237,32 +166,16 @@ var node = {
237166
code += rootCallGLSL;
238167
code += 'gl_FragColor=OUT_fragOut;\n';
239168
}
240-
else
241-
{
242-
243-
}
244-
// code += NodeMaterial.generateLightingCode(options);
245-
246-
// code += ' gl_FragColor = getEmissiveColor()+lightGGX(getBaseColor(), getOpacity(), getNormal(), getMetallic(), getRoughness());\n';
247-
// code += ' gl_FragColor = vec4(getEmissiveColor(),1);\n';
248-
// code += ' gl_FragColor = '+options.shaderGraph.funcName+ root(getEmissiveColor(),1);\n';
249169

250170
if (options.alphatest) {
251171
code += " alphaTest(gl_FragColor.a);\n";
252172
}
253173

254-
// TODO implement passes
255-
// if (options.pass === SHADER_PICK) {
256-
// // ##### PICK PASS #####
257-
// } else if (options.pass === SHADER_DEPTH) {
258-
// // ##### SCREEN DEPTH PASS #####
259-
// code += " gl_FragColor = packFloat(vDepth);\n";
260-
// } else {
261-
// ##### FORWARD PASS #####
174+
// TODO implement passes SHADER_PICK SHADER_DEPTH
175+
// ##### FORWARD PASS #####
262176
if (options.fog) {
263177
code += " glFragColor.rgb = addFog(gl_FragColor.rgb);\n";
264178
}
265-
// }
266179

267180
code += end();
268181

src/index.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ export { NodeMaterial, shadergraph } from './scene/materials/node-material.js';
9191
export { ParticleEmitter } from './scene/particle-system/particle-emitter.js';
9292
export { Picker } from './scene/pick.js';
9393
export { Scene } from './scene/scene.js';
94-
//export { ShaderGraph } from './scene/materials/shader-graph.js';
9594
export { Skin, SkinInstance } from './scene/skin.js';
9695
export { Sprite } from './scene/sprite.js';
9796
export { StandardMaterial } from './scene/materials/standard-material.js';

src/resources/material.js

Lines changed: 17 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { NodeMaterialBinder } from './node-material.js';
77
import { JsonNodeMaterialParser } from './parser/material/json-node-material.js';
88

99
import { StandardMaterial } from '../scene/materials/standard-material.js';
10-
import { NodeMaterial, shadergraph } from '../scene/materials/node-material.js';
10+
import { NodeMaterial } from '../scene/materials/node-material.js';
1111

1212
/**
1313
* @class
@@ -17,11 +17,10 @@ import { NodeMaterial, shadergraph } from '../scene/materials/node-material.js';
1717
* @param {pc.Application} app - The running {@link pc.Application}.
1818
*/
1919
function MaterialHandler(app) {
20+
this._app = app;
2021
this._assets = app.assets;
2122
this._device = app.graphicsDevice;
2223

23-
this._placeholderTextures = null;
24-
2524
this._parsers = {};
2625
this._binders = {};
2726

@@ -54,55 +53,25 @@ Object.assign(MaterialHandler.prototype, {
5453
});
5554
},
5655

57-
_genPlaceholderNodeMat: function ()
58-
{
59-
//start building shader graph
60-
shadergraph.start();
61-
62-
//create a blank PS shader graph node
63-
var blankPSNode = shadergraph.customNode('blankPS', 'vec4 blankPS() { return vec4(0,0,1,1); }');
64-
65-
//hook up PS outputs
66-
shadergraph.connectFragOut(blankPSNode);
67-
68-
//create a blank vertex offset shader graph node
69-
var blankVSNode = shadergraph.customNode('blankVS', 'vec3 blankVS() { return vec3(0,0,0); }');
70-
71-
//hook up VS output
72-
shadergraph.connectVertexOffset(blankVSNode);
73-
74-
//end graph and assign built graph to material
75-
var material = shadergraph.end();
76-
77-
//initialize shader and update uniforms
78-
material.initShader(this._device);
79-
material.updateUniforms();
80-
81-
return material;
82-
},
83-
8456
_getSubClass: function (data) {
85-
//maybe there is a better way to tell if node material path should be taken?
86-
var subclass = 'Standard'
87-
if (data.graphData)
88-
{
57+
// maybe there is a better way to tell if node material path should be taken?
58+
var subclass = 'Standard';
59+
if (data.graphData) {
8960
subclass = 'Node';
9061

91-
if (!this._parsers[subclass]) this._parsers[subclass] = new JsonNodeMaterialParser(this._device, this._genPlaceholderNodeMat());
92-
if (!this._binders[subclass]) this._binders[subclass] = new NodeMaterialBinder(this._assets, this._device, this._parsers[subclass]);
93-
}
94-
else
95-
{
62+
if (!this._parsers[subclass]) this._parsers[subclass] = new JsonNodeMaterialParser(this._device);
63+
if (!this._binders[subclass]) this._binders[subclass] = new NodeMaterialBinder(this._app, this._parsers[subclass]);
64+
} else {
9665
if (!this._parsers[subclass]) this._parsers[subclass] = new JsonStandardMaterialParser();
97-
if (!this._binders[subclass]) this._binders[subclass] = new StandardMaterialBinder(this._assets, this._device, this._parsers[subclass]);
66+
if (!this._binders[subclass]) this._binders[subclass] = new StandardMaterialBinder(this._app, this._parsers[subclass]);
9867

9968
}
10069

10170
return subclass;
10271
},
10372

10473
open: function (url, data) {
105-
74+
10675
var subclass = this._getSubClass(data);
10776

10877
var material = this._parsers[subclass].parse(data);
@@ -130,21 +99,17 @@ Object.assign(MaterialHandler.prototype, {
13099

131100
var subclass = this._getSubClass(asset.data);
132101

133-
//adjust name if node material
134-
if (subclass == 'Node')
135-
{
102+
// adjust name if node material
103+
if (subclass == 'Node') {
136104
asset.resource.name = asset.name.replace(/[^A-Z0-9]+/ig, "_");
137105
}
138106

139-
//this should only happen in the editor?
140-
if (subclass == 'Node' && !(asset.resource instanceof NodeMaterial))
141-
{
142-
//TODO: clean up old material nicely?
107+
// this should only happen in the editor?
108+
if (subclass == 'Node' && !(asset.resource instanceof NodeMaterial)) {
109+
// TODO: clean up old material nicely?
143110
asset.resource = this._parsers[subclass].parse(asset.data);
144-
}
145-
else if (subclass == 'Standard' && !(asset.resource instanceof StandardMaterial))
146-
{
147-
//TODO: clean up old material nicely?
111+
} else if (subclass == 'Standard' && !(asset.resource instanceof StandardMaterial)) {
112+
// TODO: clean up old material nicely?
148113
asset.resource = this._parsers[subclass].parse(asset.data);
149114
}
150115

0 commit comments

Comments
 (0)