diff --git a/src/scene/scene_forwardrenderer.js b/src/scene/scene_forwardrenderer.js index b7f49378f80..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++) { @@ -959,7 +959,8 @@ pc.extend(pc, function () { } device.setShader(meshInstance._shader); - var parameters = material.parameters; + // Uniforms I: material + parameters = material.parameters; for (var paramName in parameters) { var parameter = parameters[paramName]; if (!parameter.scopeId) { @@ -999,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]); 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) {