From 955cb988cbf2cdd7ff31cf3b1204856476367004 Mon Sep 17 00:00:00 2001 From: Mr F Date: Wed, 17 Jun 2015 17:46:27 +0300 Subject: [PATCH 1/4] basic uniform overrides for meshInstances --- src/scene/scene_forwardrenderer.js | 8 ++++++++ src/scene/scene_mesh.js | 10 +++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/scene/scene_forwardrenderer.js b/src/scene/scene_forwardrenderer.js index b7f49378f80..ed12a0763b9 100644 --- a/src/scene/scene_forwardrenderer.js +++ b/src/scene/scene_forwardrenderer.js @@ -967,6 +967,14 @@ pc.extend(pc, function () { } parameter.scopeId.setValue(parameter.data); } + parameters = meshInstance.parameters; + for (var paramName in parameters) { + var parameter = parameters[paramName]; + if (!parameter.scopeId) { + parameter.scopeId = device.scope.resolve(paramName); + } + parameter.scopeId.setValue(parameter.data); + } if (!prevMaterial || lightMask !== prevLightMask) { this._activeShadowLights = []; diff --git a/src/scene/scene_mesh.js b/src/scene/scene_mesh.js index ff548dee3c9..0755ddd8198 100644 --- a/src/scene/scene_mesh.js +++ b/src/scene/scene_mesh.js @@ -87,6 +87,8 @@ pc.extend(pc, function () { this.normalMatrix = new pc.Mat3(); this._boneAabb = null; + + this.parameters = {}; }; Object.defineProperty(MeshInstance.prototype, 'aabb', { @@ -231,7 +233,13 @@ pc.extend(pc, function () { updateKey: function () { var material = this.material; this.key = getKey(this.layer, material.blendType, false, material.id); - } + }, + + setParameter : pc.Material.prototype.setParameter, + setParameters : pc.Material.prototype.setParameters, + deleteParameter : pc.Material.prototype.deleteParameter, + getParameters : pc.Material.prototype.getParameters, + clearParameters : pc.Material.prototype.clearParameters }); var Command = function (layer, blendType, command) { From 37bd89b26825d2b9e0f8068579f849d36f89573e Mon Sep 17 00:00:00 2001 From: Mr F Date: Wed, 17 Jun 2015 17:58:59 +0300 Subject: [PATCH 2/4] commented --- src/scene/scene_forwardrenderer.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/scene/scene_forwardrenderer.js b/src/scene/scene_forwardrenderer.js index ed12a0763b9..71d913fbac7 100644 --- a/src/scene/scene_forwardrenderer.js +++ b/src/scene/scene_forwardrenderer.js @@ -959,6 +959,7 @@ pc.extend(pc, function () { } device.setShader(meshInstance._shader); + // First apply material parameters var parameters = material.parameters; for (var paramName in parameters) { var parameter = parameters[paramName]; @@ -967,6 +968,8 @@ pc.extend(pc, function () { } parameter.scopeId.setValue(parameter.data); } + // Then apply meshInstance overrides + // (no actual WebGL calls are done at this point) parameters = meshInstance.parameters; for (var paramName in parameters) { var parameter = parameters[paramName]; @@ -976,6 +979,7 @@ pc.extend(pc, function () { parameter.scopeId.setValue(parameter.data); } + if (!prevMaterial || lightMask !== prevLightMask) { this._activeShadowLights = []; usedDirLights = this.dispatchDirectLights(scene, lightMask); From e27da867d3c65bd4f23379f364e54a3d8e8a59b8 Mon Sep 17 00:00:00 2001 From: Mr F Date: Wed, 17 Jun 2015 18:28:44 +0300 Subject: [PATCH 3/4] fix --- src/scene/scene_forwardrenderer.js | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/scene/scene_forwardrenderer.js b/src/scene/scene_forwardrenderer.js index 71d913fbac7..95f4f829624 100644 --- a/src/scene/scene_forwardrenderer.js +++ b/src/scene/scene_forwardrenderer.js @@ -959,7 +959,7 @@ pc.extend(pc, function () { } device.setShader(meshInstance._shader); - // First apply material parameters + // Uniforms I: material var parameters = material.parameters; for (var paramName in parameters) { var parameter = parameters[paramName]; @@ -968,17 +968,6 @@ pc.extend(pc, function () { } parameter.scopeId.setValue(parameter.data); } - // Then apply meshInstance overrides - // (no actual WebGL calls are done at this point) - parameters = meshInstance.parameters; - for (var paramName in parameters) { - var parameter = parameters[paramName]; - if (!parameter.scopeId) { - parameter.scopeId = device.scope.resolve(paramName); - } - parameter.scopeId.setValue(parameter.data); - } - if (!prevMaterial || lightMask !== prevLightMask) { this._activeShadowLights = []; @@ -1011,6 +1000,16 @@ pc.extend(pc, function () { device.setDepthTest(material.depthTest); } + // Uniforms II: meshInstance overrides + parameters = meshInstance.parameters; + for (var paramName in parameters) { + var parameter = parameters[paramName]; + if (!parameter.scopeId) { + parameter.scopeId = device.scope.resolve(paramName); + } + parameter.scopeId.setValue(parameter.data); + } + device.setVertexBuffer(mesh.vertexBuffer, 0); style = meshInstance.renderStyle; device.setIndexBuffer(mesh.indexBuffer[style]); From 348fbaee9f45bae42768c73c7ddf330a0714c9a6 Mon Sep 17 00:00:00 2001 From: Mr F Date: Wed, 17 Jun 2015 18:34:14 +0300 Subject: [PATCH 4/4] fix2 --- src/scene/scene_forwardrenderer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scene/scene_forwardrenderer.js b/src/scene/scene_forwardrenderer.js index 95f4f829624..cdd2542d9cc 100644 --- a/src/scene/scene_forwardrenderer.js +++ b/src/scene/scene_forwardrenderer.js @@ -878,7 +878,7 @@ pc.extend(pc, function () { var next; var autoInstances; var j; - var objDefs, prevObjDefs, lightMask, prevLightMask; + var objDefs, prevObjDefs, lightMask, prevLightMask, parameters; // Render the scene for (i = 0; i < drawCallsCount; i++) { @@ -960,7 +960,7 @@ pc.extend(pc, function () { device.setShader(meshInstance._shader); // Uniforms I: material - var parameters = material.parameters; + parameters = material.parameters; for (var paramName in parameters) { var parameter = parameters[paramName]; if (!parameter.scopeId) {