diff --git a/src/ol/renderer/WebGL.js b/src/ol/renderer/WebGL.js new file mode 100644 index 0000000000..76fd0cbfa7 --- /dev/null +++ b/src/ol/renderer/WebGL.js @@ -0,0 +1,130 @@ +/** + * @fileoverview WebGL based MapRenderer drawing all the supplied layers in OpenGL + */ + +goog.provide('ol.renderer.WebGL'); + +goog.require('ol.renderer.MapRenderer'); +goog.require('ol.layer.Layer'); +goog.require('ol.Loc'); + +/** + * Initialization of the native WebGL renderer (canvas, context, layers) + * @constructor + * @param {!Element} target + * @extends {ol.renderer.MapRenderer} + */ +ol.renderer.WebGL = function(target) { + + /** @type {!Element} */ + var canvasEl = goog.dom.createDom('canvas', + {style: 'width:100%;height:100%;'}); + + + var upgradeRedirector = function() { + /** @type {!Element} */ + var upgradeLinkEl = goog.dom.createDom('a', + {style: 'font-size:110%;display:block;width:100%;top:50%;' + + 'position:relative;text-align:center;color:#800000;' + + 'text-shadow:rgba(0,0,0,0.4) 0 0 6px;', + href: 'http://get.webgl.org/' + }, 'You need a WebGL-enabled browser to run this application.'); + goog.dom.append(/** @type {!Element} */ (divEl), upgradeLinkEl); + }; + + /** + * @type {!we.gl.Context} + */ + this.context = new we.gl.Context(canvasEl, null, upgradeRedirector); + + if (!goog.isDefAndNotNull(this.context)) return; + + goog.base(this, target); + + /** + * @type Array. + * @private + */ + this.renderers_ = []; + +}; + +goog.inherits(ol.renderer.WebGL, ol.renderer.MapRenderer); + +/** + * @param {Array.} layers + * @param {ol.Loc} center + * @param {number} resolution + */ +ol.renderer.WebGL.prototype.draw = function(layers, center, resolution) { +}; + +/** + * @param {ol.layer.Layer} layer + */ +ol.renderer.WebGL.prototype.getRenderer = function(layer) { + function finder(candidate) { + return candidate.getLayer() === layer; + } + return goog.array.find(this.renderers_, finder); +}; + +/** + * @param {ol.layer.Layer} layer + */ +ol.renderer.WebGL.prototype.createRenderer = function(layer) { +}; + +/** + * List of preferred renderer types. Layer renderers have a getType method + * that returns a string describing their type. This list determines the + * preferences for picking a layer renderer. + * + * @type {Array.} + */ +ol.renderer.WebGL.preferredRenderers = ["svg", "canvas", "vml"]; + +/** + * @param {ol.layer.Layer} layer + * @returns {Function} + */ +ol.renderer.WebGL.prototype.pickRendererType = function(layer) { + // maps candidate renderer types to candidate renderers + var types = {}; + + function picker(Candidate) { + var supports = Candidate.isSupported() && Candidate.canRender(layer); + if (supports) { + types[Candidate.getType()] = Candidate; + } + return supports; + } + var Candidates = goog.array.some(ol.renderer.WebGL.registry_, picker); + + // check to see if any preferred renderers are available + var preferences = ol.renderer.WebGL.preferredRenderers; + + var Renderer; + for (var i=0, ii=preferences.length; i} + * @private + */ +ol.renderer.WebGL.registry_ = []; + +/** + * @param {Function} Renderer + */ +ol.renderer.WebGL.register = function(Renderer) { + ol.renderer.WebGL.registry_.push(Renderer); +};