From 7e2816ecd8d4f2784915ee5569d6f04948569b8d Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Tue, 17 Jul 2012 13:15:57 +0200 Subject: [PATCH] Implement shaders as singletons --- src/ol/webgl/map.js | 90 ++++++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 42 deletions(-) diff --git a/src/ol/webgl/map.js b/src/ol/webgl/map.js index 2a2d4029a1..8d5360407f 100644 --- a/src/ol/webgl/map.js +++ b/src/ol/webgl/map.js @@ -1,4 +1,5 @@ goog.provide('ol.webgl.Map'); +goog.provide('ol.webgl.map.shader'); goog.require('goog.dispose'); goog.require('goog.dom'); @@ -18,7 +19,6 @@ goog.require('ol.webgl.shader.Fragment'); goog.require('ol.webgl.shader.Vertex'); - /** * @define {boolean} Enable WebGL debugging. */ @@ -26,6 +26,51 @@ ol.DEBUG_WEBGL = false; +/** + * @constructor + * @extends {ol.webgl.shader.Fragment} + */ +ol.webgl.map.shader.Fragment = function() { + goog.base(this, [ + 'precision mediump float;', + '', + 'uniform float uAlpha;', + 'uniform sampler2D uTexture;', + '', + 'varying vec2 vTexCoord;', + '', + 'void main(void) {', + ' gl_FragColor = vec4(texture2D(uTexture, vTexCoord).rgb, uAlpha);', + '}' + ].join('\n')); +}; +goog.inherits(ol.webgl.map.shader.Fragment, ol.webgl.shader.Fragment); +goog.addSingletonGetter(ol.webgl.map.shader.Fragment); + + + +/** + * @constructor + * @extends {ol.webgl.shader.Vertex} + */ +ol.webgl.map.shader.Vertex = function() { + goog.base(this, [ + 'attribute vec2 aPosition;', + 'attribute vec2 aTexCoord;', + '', + 'varying vec2 vTexCoord;', + '', + 'void main(void) {', + ' gl_Position = vec4(aPosition, 0., 1.);', + ' vTexCoord = aTexCoord;', + '}' + ].join('\n')); +}; +goog.inherits(ol.webgl.map.shader.Vertex, ol.webgl.shader.Vertex); +goog.addSingletonGetter(ol.webgl.map.shader.Vertex); + + + /** * @constructor * @extends {ol.Map} @@ -90,13 +135,13 @@ ol.webgl.Map = function(target, opt_values) { * @private * @type {ol.webgl.shader.Fragment} */ - this.fragmentShader_ = ol.webgl.Map.createFragmentShader_(); + this.fragmentShader_ = ol.webgl.map.shader.Fragment.getInstance(); /** * @private * @type {ol.webgl.shader.Vertex} */ - this.vertexShader_ = ol.webgl.Map.createVertexShader_(); + this.vertexShader_ = ol.webgl.map.shader.Vertex.getInstance(); /** * @private @@ -115,45 +160,6 @@ ol.webgl.Map = function(target, opt_values) { goog.inherits(ol.webgl.Map, ol.Map); -/** - * @private - * @return {ol.webgl.shader.Fragment} Fragment shader. - */ -ol.webgl.Map.createFragmentShader_ = function() { - return new ol.webgl.shader.Fragment([ - 'precision mediump float;', - '', - 'uniform float uAlpha;', - 'uniform sampler2D uTexture;', - '', - 'varying vec2 vTexCoord;', - '', - 'void main(void) {', - ' gl_FragColor = vec4(texture2D(uTexture, vTexCoord).rgb, uAlpha);', - '}' - ].join('\n')); -}; - - -/** - * @private - * @return {ol.webgl.shader.Vertex} Vertex shader. - */ -ol.webgl.Map.createVertexShader_ = function() { - return new ol.webgl.shader.Vertex([ - 'attribute vec2 aPosition;', - 'attribute vec2 aTexCoord;', - '', - 'varying vec2 vTexCoord;', - '', - 'void main(void) {', - ' gl_Position = vec4(aPosition, 0., 1.);', - ' vTexCoord = aTexCoord;', - '}' - ].join('\n')); -}; - - /** * @inheritDoc */