Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
182 changes: 74 additions & 108 deletions src/renderers/webgl/WebGLUniforms.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ function allocTexUnits( textures, n ) {

// Single scalar

function setValue1f( gl, v ) {
function setValueV1f( gl, v ) {

var cache = this.cache;

Expand All @@ -168,21 +168,9 @@ function setValue1f( gl, v ) {

}

function setValue1i( gl, v ) {

var cache = this.cache;

if ( cache[ 0 ] === v ) return;

gl.uniform1i( this.addr, v );

cache[ 0 ] = v;

}

// Single float vector (from flat array or THREE.VectorN)

function setValue2fv( gl, v ) {
function setValueV2f( gl, v ) {

var cache = this.cache;

Expand All @@ -209,7 +197,7 @@ function setValue2fv( gl, v ) {

}

function setValue3fv( gl, v ) {
function setValueV3f( gl, v ) {

var cache = this.cache;

Expand Down Expand Up @@ -249,7 +237,7 @@ function setValue3fv( gl, v ) {

}

function setValue4fv( gl, v ) {
function setValueV4f( gl, v ) {

var cache = this.cache;

Expand Down Expand Up @@ -280,7 +268,7 @@ function setValue4fv( gl, v ) {

// Single matrix (from flat array or MatrixN)

function setValue2fm( gl, v ) {
function setValueM2( gl, v ) {

var cache = this.cache;
var elements = v.elements;
Expand All @@ -307,7 +295,7 @@ function setValue2fm( gl, v ) {

}

function setValue3fm( gl, v ) {
function setValueM3( gl, v ) {

var cache = this.cache;
var elements = v.elements;
Expand All @@ -334,7 +322,7 @@ function setValue3fm( gl, v ) {

}

function setValue4fm( gl, v ) {
function setValueM4( gl, v ) {

var cache = this.cache;
var elements = v.elements;
Expand Down Expand Up @@ -429,7 +417,19 @@ function setValueT6( gl, v, textures ) {

// Integer / Boolean vectors or arrays thereof (always flat arrays)

function setValue2iv( gl, v ) {
function setValueV1i( gl, v ) {

var cache = this.cache;

if ( arraysEqual( cache, v ) ) return;

gl.uniform1iv( this.addr, v );

copyArray( cache, v );

}

function setValueV2i( gl, v ) {

var cache = this.cache;

Expand All @@ -441,7 +441,7 @@ function setValue2iv( gl, v ) {

}

function setValue3iv( gl, v ) {
function setValueV3i( gl, v ) {

var cache = this.cache;

Expand All @@ -453,7 +453,7 @@ function setValue3iv( gl, v ) {

}

function setValue4iv( gl, v ) {
function setValueV4i( gl, v ) {

var cache = this.cache;

Expand All @@ -471,151 +471,123 @@ function getSingularSetter( type ) {

switch ( type ) {

case 0x1406: return setValue1f; // FLOAT
case 0x8b50: return setValue2fv; // _VEC2
case 0x8b51: return setValue3fv; // _VEC3
case 0x8b52: return setValue4fv; // _VEC4
case 0x1406: return setValueV1f; // FLOAT
case 0x8b50: return setValueV2f; // _VEC2
case 0x8b51: return setValueV3f; // _VEC3
case 0x8b52: return setValueV4f; // _VEC4

case 0x8b5a: return setValue2fm; // _MAT2
case 0x8b5b: return setValue3fm; // _MAT3
case 0x8b5c: return setValue4fm; // _MAT4
case 0x8b5a: return setValueM2; // _MAT2
case 0x8b5b: return setValueM3; // _MAT3
case 0x8b5c: return setValueM4; // _MAT4

case 0x8b5e: case 0x8d66: return setValueT1; // SAMPLER_2D, SAMPLER_EXTERNAL_OES
case 0x8b5f: return setValueT3D1; // SAMPLER_3D
case 0x8b60: return setValueT6; // SAMPLER_CUBE
case 0x8DC1: return setValueT2DArray1; // SAMPLER_2D_ARRAY

case 0x1404: case 0x8b56: return setValue1i; // INT, BOOL
case 0x8b53: case 0x8b57: return setValue2iv; // _VEC2
case 0x8b54: case 0x8b58: return setValue3iv; // _VEC3
case 0x8b55: case 0x8b59: return setValue4iv; // _VEC4
case 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL
case 0x8b53: case 0x8b57: return setValueV2i; // _VEC2
case 0x8b54: case 0x8b58: return setValueV3i; // _VEC3
case 0x8b55: case 0x8b59: return setValueV4i; // _VEC4

}

}

// Array of scalars
function setValueV1fArray( gl, v ) {

function setValue1fv( gl, v ) {
gl.uniform1fv( this.addr, v );

var cache = this.cache;
}

if ( arraysEqual( cache, v ) ) return;
// Integer / Boolean vectors or arrays thereof (always flat arrays)
function setValueV1iArray( gl, v ) {

gl.uniform1fv( this.addr, v );
gl.uniform1iv( this.addr, v );

copyArray( cache, v );
}

function setValueV2iArray( gl, v ) {

gl.uniform2iv( this.addr, v );

}
function setValue1iv( gl, v ) {

var cache = this.cache;
function setValueV3iArray( gl, v ) {

if ( arraysEqual( cache, v ) ) return;
gl.uniform3iv( this.addr, v );

gl.uniform1iv( this.addr, v );
}

copyArray( cache, v );
function setValueV4iArray( gl, v ) {

gl.uniform4iv( this.addr, v );

}


// Array of vectors (flat or from THREE classes)

function setValueV2a( gl, v ) {
function setValueV2fArray( gl, v ) {

var cache = this.cache;
var data = flatten( v, this.size, 2 );

if ( arraysEqual( cache, data ) ) return;

gl.uniform2fv( this.addr, data );

this.updateCache( data );

}

function setValueV3a( gl, v ) {
function setValueV3fArray( gl, v ) {

var cache = this.cache;
var data = flatten( v, this.size, 3 );

if ( arraysEqual( cache, data ) ) return;

gl.uniform3fv( this.addr, data );

this.updateCache( data );

}

function setValueV4a( gl, v ) {
function setValueV4fArray( gl, v ) {

var cache = this.cache;
var data = flatten( v, this.size, 4 );

if ( arraysEqual( cache, data ) ) return;

gl.uniform4fv( this.addr, data );

this.updateCache( data );

}

// Array of matrices (flat or from THREE clases)

function setValueM2a( gl, v ) {
function setValueM2Array( gl, v ) {

var cache = this.cache;
var data = flatten( v, this.size, 4 );

if ( arraysEqual( cache, data ) ) return;

gl.uniformMatrix2fv( this.addr, false, data );

this.updateCache( data );

}

function setValueM3a( gl, v ) {
function setValueM3Array( gl, v ) {

var cache = this.cache;
var data = flatten( v, this.size, 9 );

if ( arraysEqual( cache, data ) ) return;

gl.uniformMatrix3fv( this.addr, false, data );

this.updateCache( data );

}

function setValueM4a( gl, v ) {
function setValueM4Array( gl, v ) {

var cache = this.cache;
var data = flatten( v, this.size, 16 );

if ( arraysEqual( cache, data ) ) return;

gl.uniformMatrix4fv( this.addr, false, data );

this.updateCache( data );

}

// Array of textures (2D / Cube)

function setValueT1a( gl, v, textures ) {
function setValueT1Array( gl, v, textures ) {

var cache = this.cache;
var n = v.length;

var units = allocTexUnits( textures, n );

if ( arraysEqual( cache, units ) === false ) {

gl.uniform1iv( this.addr, units );
copyArray( cache, units );

}
gl.uniform1iv( this.addr, units );

for ( var i = 0; i !== n; ++ i ) {

Expand All @@ -625,19 +597,13 @@ function setValueT1a( gl, v, textures ) {

}

function setValueT6a( gl, v, textures ) {
function setValueT6Array( gl, v, textures ) {

var cache = this.cache;
var n = v.length;

var units = allocTexUnits( textures, n );

if ( arraysEqual( cache, units ) === false ) {

gl.uniform1iv( this.addr, units );
copyArray( cache, units );

}
gl.uniform1iv( this.addr, units );

for ( var i = 0; i !== n; ++ i ) {

Expand All @@ -653,22 +619,22 @@ function getPureArraySetter( type ) {

switch ( type ) {

case 0x1406: return setValue1fv; // FLOAT
case 0x8b50: return setValueV2a; // _VEC2
case 0x8b51: return setValueV3a; // _VEC3
case 0x8b52: return setValueV4a; // _VEC4
case 0x1406: return setValueV1fArray; // FLOAT
case 0x8b50: return setValueV2fArray; // _VEC2
case 0x8b51: return setValueV3fArray; // _VEC3
case 0x8b52: return setValueV4fArray; // _VEC4

case 0x8b5a: return setValueM2a; // _MAT2
case 0x8b5b: return setValueM3a; // _MAT3
case 0x8b5c: return setValueM4a; // _MAT4
case 0x8b5a: return setValueM2Array; // _MAT2
case 0x8b5b: return setValueM3Array; // _MAT3
case 0x8b5c: return setValueM4Array; // _MAT4

case 0x8b5e: return setValueT1a; // SAMPLER_2D
case 0x8b60: return setValueT6a; // SAMPLER_CUBE
case 0x8b5e: return setValueT1Array; // SAMPLER_2D
case 0x8b60: return setValueT6Array; // SAMPLER_CUBE

case 0x1404: case 0x8b56: return setValue1iv; // INT, BOOL
case 0x8b53: case 0x8b57: return setValue2iv; // _VEC2
case 0x8b54: case 0x8b58: return setValue3iv; // _VEC3
case 0x8b55: case 0x8b59: return setValue4iv; // _VEC4
case 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL
case 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2
case 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3
case 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4

}

Expand Down