The WebGLShader.set1fv, set2fv, set3fv, set4fv, set1iv, set2iv, set3iv, set4iv, setMatrix2fv, setMatrix3fv and setMatrix4fv methods no longer try to do array comparisons when setting the uniforms, but sets them directly. Fix #5670

This commit is contained in:
Richard Davey 2021-05-24 17:22:04 +01:00
parent 89b1c1e1b3
commit 3a6e82a042

View file

@ -470,10 +470,11 @@ var WebGLShader = new Class({
* @param {function} setter - The GL function to call.
* @param {string} name - The name of the uniform to set.
* @param {(boolean|number|number[]|Float32Array)} value1 - The new value of the uniform.
* @param {boolean} [skipCheck=false] - Skip the value comparison?
*
* @return {this} This WebGLShader instance.
*/
setUniform1: function (setter, name, value1)
setUniform1: function (setter, name, value1, skipCheck)
{
var uniform = this.uniforms[name];
@ -482,7 +483,7 @@ var WebGLShader = new Class({
return this;
}
if (uniform.value1 !== value1)
if (skipCheck || uniform.value1 !== value1)
{
uniform.value1 = value1;
@ -514,10 +515,11 @@ var WebGLShader = new Class({
* @param {string} name - The name of the uniform to set.
* @param {(boolean|number|number[]|Float32Array)} value1 - The new value of the uniform.
* @param {(boolean|number|number[]|Float32Array)} value2 - The new value of the uniform.
* @param {boolean} [skipCheck=false] - Skip the value comparison?
*
* @return {this} This WebGLShader instance.
*/
setUniform2: function (setter, name, value1, value2)
setUniform2: function (setter, name, value1, value2, skipCheck)
{
var uniform = this.uniforms[name];
@ -526,7 +528,7 @@ var WebGLShader = new Class({
return this;
}
if (uniform.value1 !== value1 || uniform.value2 !== value2)
if (skipCheck || uniform.value1 !== value1 || uniform.value2 !== value2)
{
uniform.value1 = value1;
uniform.value2 = value2;
@ -560,10 +562,11 @@ var WebGLShader = new Class({
* @param {(boolean|number|number[]|Float32Array)} value1 - The new value of the uniform.
* @param {(boolean|number|number[]|Float32Array)} value2 - The new value of the uniform.
* @param {(boolean|number|number[]|Float32Array)} value3 - The new value of the uniform.
* @param {boolean} [skipCheck=false] - Skip the value comparison?
*
* @return {this} This WebGLShader instance.
*/
setUniform3: function (setter, name, value1, value2, value3)
setUniform3: function (setter, name, value1, value2, value3, skipCheck)
{
var uniform = this.uniforms[name];
@ -572,7 +575,7 @@ var WebGLShader = new Class({
return this;
}
if (uniform.value1 !== value1 || uniform.value2 !== value2 || uniform.value3 !== value3)
if (skipCheck || uniform.value1 !== value1 || uniform.value2 !== value2 || uniform.value3 !== value3)
{
uniform.value1 = value1;
uniform.value2 = value2;
@ -608,10 +611,11 @@ var WebGLShader = new Class({
* @param {(boolean|number|number[]|Float32Array)} value2 - The new value of the uniform.
* @param {(boolean|number|number[]|Float32Array)} value3 - The new value of the uniform.
* @param {(boolean|number|number[]|Float32Array)} value4 - The new value of the uniform.
* @param {boolean} [skipCheck=false] - Skip the value comparison?
*
* @return {this} This WebGLShader instance.
*/
setUniform4: function (setter, name, value1, value2, value3, value4)
setUniform4: function (setter, name, value1, value2, value3, value4, skipCheck)
{
var uniform = this.uniforms[name];
@ -620,7 +624,7 @@ var WebGLShader = new Class({
return this;
}
if (uniform.value1 !== value1 || uniform.value2 !== value2 || uniform.value3 !== value3 || uniform.value4 !== value4)
if (skipCheck || uniform.value1 !== value1 || uniform.value2 !== value2 || uniform.value3 !== value3 || uniform.value4 !== value4)
{
uniform.value1 = value1;
uniform.value2 = value2;
@ -750,7 +754,7 @@ var WebGLShader = new Class({
*/
set1fv: function (name, arr)
{
return this.setUniform1(this.gl.uniform1fv, name, arr);
return this.setUniform1(this.gl.uniform1fv, name, arr, true);
},
/**
@ -772,7 +776,7 @@ var WebGLShader = new Class({
*/
set2fv: function (name, arr)
{
return this.setUniform1(this.gl.uniform2fv, name, arr);
return this.setUniform1(this.gl.uniform2fv, name, arr, true);
},
/**
@ -794,7 +798,7 @@ var WebGLShader = new Class({
*/
set3fv: function (name, arr)
{
return this.setUniform1(this.gl.uniform3fv, name, arr);
return this.setUniform1(this.gl.uniform3fv, name, arr, true);
},
/**
@ -816,7 +820,7 @@ var WebGLShader = new Class({
*/
set4fv: function (name, arr)
{
return this.setUniform1(this.gl.uniform4fv, name, arr);
return this.setUniform1(this.gl.uniform4fv, name, arr, true);
},
/**
@ -838,7 +842,7 @@ var WebGLShader = new Class({
*/
set1iv: function (name, arr)
{
return this.setUniform1(this.gl.uniform1iv, name, arr);
return this.setUniform1(this.gl.uniform1iv, name, arr, true);
},
/**
@ -860,7 +864,7 @@ var WebGLShader = new Class({
*/
set2iv: function (name, arr)
{
return this.setUniform1(this.gl.uniform2iv, name, arr);
return this.setUniform1(this.gl.uniform2iv, name, arr, true);
},
/**
@ -882,7 +886,7 @@ var WebGLShader = new Class({
*/
set3iv: function (name, arr)
{
return this.setUniform1(this.gl.uniform3iv, name, arr);
return this.setUniform1(this.gl.uniform3iv, name, arr, true);
},
/**
@ -904,7 +908,7 @@ var WebGLShader = new Class({
*/
set4iv: function (name, arr)
{
return this.setUniform1(this.gl.uniform4iv, name, arr);
return this.setUniform1(this.gl.uniform4iv, name, arr, true);
},
/**
@ -1021,7 +1025,7 @@ var WebGLShader = new Class({
*/
setMatrix2fv: function (name, transpose, matrix)
{
return this.setUniform2(this.gl.uniformMatrix2fv, name, transpose, matrix);
return this.setUniform2(this.gl.uniformMatrix2fv, name, transpose, matrix, true);
},
/**
@ -1044,7 +1048,7 @@ var WebGLShader = new Class({
*/
setMatrix3fv: function (name, transpose, matrix)
{
return this.setUniform2(this.gl.uniformMatrix3fv, name, transpose, matrix);
return this.setUniform2(this.gl.uniformMatrix3fv, name, transpose, matrix, true);
},
/**
@ -1067,7 +1071,7 @@ var WebGLShader = new Class({
*/
setMatrix4fv: function (name, transpose, matrix)
{
return this.setUniform2(this.gl.uniformMatrix4fv, name, transpose, matrix);
return this.setUniform2(this.gl.uniformMatrix4fv, name, transpose, matrix, true);
},
/**