diff --git a/js/Tracker.js b/js/Tracker.js
index 4c011c1d..e5c579d7 100644
--- a/js/Tracker.js
+++ b/js/Tracker.js
@@ -301,6 +301,7 @@ export default class Tracker extends EventEmitter {
if ('lbp' in this.weights) this.lbpInit = true;
if ('sobel' in this.weights) this.sobelInit = true;
} catch (err) {
+ console.error(err);
alert('There was a problem setting up webGL programs, falling back to slightly slower javascript version. :(');
this.webglFi = undefined;
this.svmFi = new SvmFilter();
diff --git a/js/svmfilter/svmfilter_webgl.js b/js/svmfilter/svmfilter_webgl.js
index 280ac83e..db3c4cf0 100644
--- a/js/svmfilter/svmfilter_webgl.js
+++ b/js/svmfilter/svmfilter_webgl.js
@@ -1,4 +1,8 @@
-'use strict';
+import {
+ setupWebGL,
+ loadShader,
+ loadProgram
+} from 'clmtrackr/js/utils/webgl';
import createLbpResponseVS from './shaders/lbpResponse.vert';
import createLbpResponseFS from './shaders/lbpResponse.frag';
@@ -142,8 +146,11 @@ var webglFilter = function () {
canvas.setAttribute('style', 'display:none;');
// FIXME: dont litter the DOM with render canvases
document.body.appendChild(canvas);
- // TODO : isolate this library from webgl-util.js
- gl = setupWebGL(canvas, {premultipliedAlpha: false, preserveDrawingBuffer : true, antialias : false});
+ gl = setupWebGL(canvas, {
+ premultipliedAlpha: false,
+ preserveDrawingBuffer: true,
+ antialias: false
+ });
// check for float textures support and fail if not
@@ -316,7 +323,7 @@ var webglFilter = function () {
if ('sobel' in filters) {
var grVertexShader = loadShader(gl, gradientResponseVS, gl.VERTEX_SHADER);
var grFragmentShader = loadShader(gl, gradientResponseFS, gl.FRAGMENT_SHADER);
- gradientResponseProgram = createProgram(gl, [grVertexShader, grFragmentShader]);
+ gradientResponseProgram = loadProgram(gl, [grVertexShader, grFragmentShader]);
gl.useProgram(gradientResponseProgram);
// set up vertices with rectangles
@@ -341,7 +348,7 @@ var webglFilter = function () {
if ('lbp' in filters) {
var lbpVertexShader = loadShader(gl, lbpResponseVS, gl.VERTEX_SHADER);
var lbpFragmentShader = loadShader(gl, lbpResponseFS, gl.FRAGMENT_SHADER);
- lbpResponseProgram = createProgram(gl, [lbpVertexShader, lbpFragmentShader]);
+ lbpResponseProgram = loadProgram(gl, [lbpVertexShader, lbpFragmentShader]);
gl.useProgram(lbpResponseProgram);
// set up vertices with rectangles
@@ -367,7 +374,7 @@ var webglFilter = function () {
// setup patchdraw program
var drVertexShader = loadShader(gl, drawResponsesVS, gl.VERTEX_SHADER);
var drFragmentShader = loadShader(gl, drawResponsesFS, gl.FRAGMENT_SHADER);
- patchDrawProgram = createProgram(gl, [drVertexShader, drFragmentShader]);
+ patchDrawProgram = loadProgram(gl, [drVertexShader, drFragmentShader]);
gl.useProgram(patchDrawProgram);
// set the resolution/dimension of the canvas
@@ -381,7 +388,7 @@ var webglFilter = function () {
// setup patchresponse program
var prVertexShader = loadShader(gl, patchResponseVS, gl.VERTEX_SHADER);
var prFragmentShader = loadShader(gl, patchResponseFS, gl.FRAGMENT_SHADER);
- patchResponseProgram = createProgram(gl, [prVertexShader, prFragmentShader]);
+ patchResponseProgram = loadProgram(gl, [prVertexShader, prFragmentShader]);
gl.useProgram(patchResponseProgram);
// set up vertices with rectangles
@@ -851,314 +858,5 @@ var webglFilter = function () {
}
};
-// The rest of the code is based on webgl-utils.js authored by Gregg Tavares, license below:
-/*
- * Copyright (c) 2011, Gregg Tavares
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * * Neither the name of greggman.com nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 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.
- */
-
-(function() {
-
- /**
- * Wrapped logging function.
- * @param {string} msg The message to log.
- */
- var log = function(msg) {
- if (window.console && window.console.log) {
- window.console.log(msg);
- }
- };
-
- /**
- * Wrapped logging function.
- * @param {string} msg The message to log.
- */
- var error = function(msg) {
- if (window.console) {
- if (window.console.error) {
- window.console.error(msg);
- }
- else if (window.console.log) {
- window.console.log(msg);
- }
- }
- throw msg;
- };
-
- /**
- * Turn off all logging.
- */
- var loggingOff = function() {
- log = function() {};
- error = function() {};
- };
-
- /**
- * Check if the page is embedded.
- * @return {boolean} True of we are in an iframe
- */
- var isInIFrame = function() {
- return window != window.top;
- };
-
- /**
- * Converts a WebGL enum to a string
- * @param {!WebGLContext} gl The WebGLContext to use.
- * @param {number} value The enum value.
- * @return {string} The enum as a string.
- */
- var glEnumToString = function(gl, value) {
- for (var p in gl) {
- if (gl[p] == value) {
- return p;
- }
- }
- return "0x" + value.toString(16);
- };
-
- /**
- * Creates the HTLM for a failure message
- * @param {string} canvasContainerId id of container of th
- * canvas.
- * @return {string} The html.
- */
- var makeFailHTML = function(msg) {
- return '' +
- '
' +
- '' +
- '' +
- ' ' + msg + ' ' +
- ' ' +
- ' |
';
- };
-
- /**
- * Mesasge for getting a webgl browser
- * @type {string}
- */
- var GET_A_WEBGL_BROWSER = '' +
- 'This page requires a browser that supports WebGL.
' +
- 'Click here to upgrade your browser.';
-
- /**
- * Mesasge for need better hardware
- * @type {string}
- */
- var OTHER_PROBLEM = '' +
- "It doesn't appear your computer can support WebGL.
" +
- 'Click here for more information.';
-
- /**
- * Creates a webgl context. If creation fails it will
- * change the contents of the container of the