blob: 154042260293be08a78c7befc04dc97de2637d8f [file] [log] [blame]
if (window.layoutTestController)
layoutTestController.overridePreference("WebKitWebGLEnabled", "1");
function getShaderSource(file) {
var xhr = new XMLHttpRequest();
xhr.open("GET", file, false);
xhr.send();
return xhr.responseText;
}
function create3DContext(attrs) {
var canvas = document.createElement("canvas");
try {
return canvas.getContext("experimental-webgl", attrs);
} catch(e) {}
return canvas.getContext("moz-webgl", attrs);
}
function createGLErrorWrapper(context, fname) {
return function() {
var rv = context[fname].apply(context, arguments);
var err = context.getError();
if (err != 0)
throw "GL error " + err + " in " + fname;
return rv;
};
}
function create3DDebugContext(attrs) {
var context = create3DContext(attrs);
// Thanks to Ilmari Heikkinen for the idea on how to implement this so elegantly.
var wrap = {};
for (var i in context) {
try {
if (typeof context[i] == 'function') {
wrap[i] = createGLErrorWrapper(context, i);
} else {
wrap[i] = context[i];
}
} catch (e) {
// console.log("create3DDebugContext: Error accessing " + i);
}
}
wrap.getError = function() {
return context.getError();
};
return wrap;
}
function loadStandardProgram(context) {
var program = context.createProgram();
context.attachShader(program, loadStandardVertexShader(context));
context.attachShader(program, loadStandardFragmentShader(context));
context.linkProgram(program);
return program;
}
function loadProgram(context, vertexShaderPath, fragmentShaderPath) {
var program = context.createProgram();
context.attachShader(program, loadVertexShader(context, vertexShaderPath));
context.attachShader(program, loadFragmentShader(context, fragmentShaderPath));
context.linkProgram(program);
return program;
}
function loadStandardVertexShader(context) {
return loadVertexShader(context, "resources/vertexShader.vert");
}
function loadVertexShader(context, path) {
var vertexShader = context.createShader(context.VERTEX_SHADER);
context.shaderSource(vertexShader, getShaderSource(path));
context.compileShader(vertexShader);
return vertexShader;
}
function loadStandardFragmentShader(context) {
return loadFragmentShader(context, "resources/fragmentShader.frag");
}
function loadFragmentShader(context, path) {
var fragmentShader = context.createShader(context.FRAGMENT_SHADER);
context.shaderSource(fragmentShader, getShaderSource(path));
context.compileShader(fragmentShader);
return fragmentShader;
}