NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name WebGL Inspector // @description Script to ease WebGL debugging // @version 1.0 // @author Ben Vanik // @license MIT // @include * // @icon http://pics.smotri.com/cskins/blue/smiles/bt.gif // @run-at document-end // @grant none // ==/UserScript== // This script is written by Ben Vanik you can find the original source code in his GitHub: https://github.com/benvanik // NOTE: this file should only be included when embedding the inspector - no other files should be included (this will do everything) // If gliEmbedDebug == true, split files will be used, otherwise the cat'ed scripts will be inserted setTimeout(function () { var pathRoot = "https://benvanik.github.com/WebGL-Inspector/core/"; var useDebug = window["gliEmbedDebug"]; // Find self in the <script> tags var scripts = document.head.getElementsByTagName("script"); for (var n = 0; n < scripts.length; n++) { var scriptTag = scripts[n]; var src = scriptTag.src.toLowerCase(); if (/core\/embed.js$/.test(src)) { // Found ourself - strip our name and set the root var index = src.lastIndexOf("embed.js"); pathRoot = scriptTag.src.substring(0, index); break; } } function insertHeaderNode(node) { var targets = [document.body, document.head, document.documentElement]; for (var n = 0; n < targets.length; n++) { var target = targets[n]; if (target) { if (target.firstElementChild) { target.insertBefore(node, target.firstElementChild); } else { target.appendChild(node); } break; } } }; function insertStylesheet(url) { var link = document.createElement("link"); link.rel = "stylesheet"; link.href = url; insertHeaderNode(link); return link; }; function insertScript(url) { var script = document.createElement("script"); script.type = "text/javascript"; script.src = url; insertHeaderNode(script); return script; }; if (useDebug) { // Fall through below and use the loader to get things } else { var jsurl = pathRoot + "lib/gli.all.js"; var cssurl = pathRoot + "lib/gli.all.css"; window.gliCssUrl = cssurl; insertStylesheet(cssurl); insertScript(jsurl); } // Always load the loader if (useDebug) { var script = insertScript(pathRoot + "loader.js"); function scriptLoaded() { gliloader.pathRoot = pathRoot; if (useDebug) { // In debug mode load all the scripts gliloader.load(["host", "replay", "ui"]); } }; script.onreadystatechange = function () { if (("loaded" === script.readyState || "complete" === script.readyState) && !script.loadCalled) { this.loadCalled = true; scriptLoaded(); } }; script.onload = function () { if (!script.loadCalled) { this.loadCalled = true; scriptLoaded(); } }; } // Hook canvas.getContext var originalGetContext = HTMLCanvasElement.prototype.getContext; if (!HTMLCanvasElement.prototype.getContextRaw) { HTMLCanvasElement.prototype.getContextRaw = originalGetContext; } HTMLCanvasElement.prototype.getContext = function () { var ignoreCanvas = this.internalInspectorSurface; if (ignoreCanvas) { return originalGetContext.apply(this, arguments); } var contextNames = ["moz-webgl", "webkit-3d", "experimental-webgl", "webgl"]; var requestingWebGL = contextNames.indexOf(arguments[0]) != -1; if (requestingWebGL) { // Page is requesting a WebGL context! // TODO: something } var result = originalGetContext.apply(this, arguments); if (result == null) { return null; } if (requestingWebGL) { // TODO: pull options from somewhere? result = gli.host.inspectContext(this, result); var hostUI = new gli.host.HostUI(result); result.hostUI = hostUI; // just so we can access it later for debugging } return result; }; }, 4000);