Skip to content

Commit f719206

Browse files
committed
Shader.uniforms now uses Extend instead of Clone to perform a deep object copy, instead of a shallow one, avoiding multiple instances of the same shader sharing uniforms. Fix phaserjs#4641
1 parent 5f13fe8 commit f719206

1 file changed

Lines changed: 11 additions & 10 deletions

File tree

src/gameobjects/shader/Shader.js

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ var Class = require('../../utils/Class');
88
var Components = require('../components');
99
var GameObject = require('../GameObject');
1010
var GetFastValue = require('../../utils/object/GetFastValue');
11-
var Merge = require('../../utils/object/Merge');
11+
var Extend = require('../../utils/object/Extend');
1212
var SetValue = require('../../utils/object/SetValue');
1313
var ShaderRender = require('./ShaderRender');
1414
var TransformMatrix = require('../components/TransformMatrix');
@@ -512,7 +512,7 @@ var Shader = new Class({
512512

513513
// The default uniforms available within the fragment shader
514514
var defaultUniforms = {
515-
resolution: { type: '2f', value: { x: this.width, y: this.height }},
515+
resolution: { type: '2f', value: { x: this.width, y: this.height } },
516516
time: { type: '1f', value: 0 },
517517
mouse: { type: '2f', value: { x: this.width / 2, y: this.height / 2 } },
518518
date: { type: '4fv', value: [ d.getFullYear(), d.getMonth(), d.getDate(), d.getHours() * 60 * 60 + d.getMinutes() * 60 + d.getSeconds() ] },
@@ -522,10 +522,10 @@ var Shader = new Class({
522522
iChannel2: { type: 'sampler2D', value: null, textureData: { repeat: true } },
523523
iChannel3: { type: 'sampler2D', value: null, textureData: { repeat: true } }
524524
};
525-
525+
526526
if (this.shader.uniforms)
527527
{
528-
this.uniforms = Merge(this.shader.uniforms, defaultUniforms);
528+
this.uniforms = Extend(true, {}, this.shader.uniforms, defaultUniforms);
529529
}
530530
else
531531
{
@@ -1037,18 +1037,18 @@ var Shader = new Class({
10371037
{
10381038
// ITRS
10391039

1040+
var gl = this.gl;
10401041
var width = this.width;
10411042
var height = this.height;
10421043
var renderer = this.renderer;
10431044
var program = this.program;
1045+
var vm = this.viewMatrix;
10441046

10451047
if (!this.renderToTexture)
10461048
{
10471049
var x = -this._displayOriginX;
10481050
var y = -this._displayOriginY;
10491051

1050-
var vm = this.viewMatrix;
1051-
10521052
vm[0] = matrix2D[0];
10531053
vm[1] = matrix2D[1];
10541054
vm[4] = matrix2D[2];
@@ -1061,8 +1061,10 @@ var Shader = new Class({
10611061

10621062
// Update vertex shader uniforms
10631063

1064-
this.renderer.setMatrix4(program, 'uViewMatrix', false, this.viewMatrix);
1065-
this.renderer.setFloat2(program, 'uResolution', this.width, this.height);
1064+
gl.useProgram(program);
1065+
1066+
gl.uniformMatrix4fv(gl.getUniformLocation(program, 'uViewMatrix'), false, vm);
1067+
gl.uniform2f(gl.getUniformLocation(program, 'uResolution'), this.width, this.height);
10661068

10671069
// Update fragment shader uniforms
10681070

@@ -1120,8 +1122,7 @@ var Shader = new Class({
11201122
gl.clear(gl.COLOR_BUFFER_BIT);
11211123
}
11221124

1123-
renderer.setProgram(program);
1124-
renderer.setVertexBuffer(vertexBuffer);
1125+
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
11251126

11261127
var location = gl.getAttribLocation(program, 'inPosition');
11271128

0 commit comments

Comments
 (0)