Skip to content

Commit

Permalink
Use Array in glmatrix instead of Float32Array. It seems to be much fa…
Browse files Browse the repository at this point in the history
…ster and higher precision.
  • Loading branch information
pissang committed Jan 19, 2018
1 parent d095afc commit 1401e70
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 10 deletions.
17 changes: 10 additions & 7 deletions src/dep/glmatrix.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,17 +71,20 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */


if(!GLMAT_EPSILON) {
var GLMAT_EPSILON = 0.000001;
var GLMAT_EPSILON = window.GLMAT_EPSILON;
if(GLMAT_EPSILON == null) {
GLMAT_EPSILON = 0.000001;
}

if(!GLMAT_ARRAY_TYPE) {
var GLMAT_ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array;
}
// Use Array instead of Float32Array. It seems to be much faster and higher precision.
var GLMAT_ARRAY_TYPE = window.GLMAT_ARRAY_TYPE || Array;
// if(!GLMAT_ARRAY_TYPE) {
// GLMAT_ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array;
// }

var GLMAT_RANDOM = window.GLMAT_RANDOM;
if(!GLMAT_RANDOM) {
var GLMAT_RANDOM = Math.random;
GLMAT_RANDOM = Math.random;
}

/**
Expand Down
14 changes: 11 additions & 3 deletions src/gpu/GLProgram.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ function checkShaderErrorMsg(_gl, shader, shaderString) {
}
}

var tmpFloat32Array16 = new vendor.Float32Array(16);

var GLProgram = Base.extend({

uniformSemantics: {},
Expand Down Expand Up @@ -92,7 +94,13 @@ var GLProgram = Base.extend({
}
switch (type) {
case 'm4':
// The matrix must be created by glmatrix and can pass it directly.
if (!(value instanceof Float32Array)) {
// Use Float32Array is much faster than array when uniformMatrix4fv.
for (var i = 0; i < value.length; i++) {
tmpFloat32Array16[i] = value[i];
}
value = tmpFloat32Array16;
}
_gl.uniformMatrix4fv(location, false, value);
break;
case '2i':
Expand Down Expand Up @@ -153,7 +161,7 @@ var GLProgram = Base.extend({
break;
case 'm4v':
// Raw value
if (Array.isArray(value)) {
if (Array.isArray(value) && Array.isArray(value[0])) {
var array = new vendor.Float32Array(value.length * 16);
var cursor = 0;
for (var i = 0; i < value.length; i++) {
Expand All @@ -164,7 +172,7 @@ var GLProgram = Base.extend({
}
_gl.uniformMatrix4fv(location, false, array);
}
else if (value instanceof vendor.Float32Array) { // ArrayBufferView
else { // ArrayBufferView
_gl.uniformMatrix4fv(location, false, value);
}
break;
Expand Down

0 comments on commit 1401e70

Please sign in to comment.