From ee54aaaea449286d362c212b83a4e624f8df5ee2 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 8 Apr 2013 15:55:55 +0200 Subject: [PATCH] Use simpler, faster shader when brightness, contrast, hue and saturation are unchanged --- .../{webglmap.glsl => webglmapcolor.glsl} | 4 +- src/ol/renderer/webgl/webglmapcolorshader.js | 147 ++++++++++++++++++ src/ol/renderer/webgl/webglmapdefault.glsl | 30 ++++ .../renderer/webgl/webglmapdefaultshader.js | 136 ++++++++++++++++ src/ol/renderer/webgl/webglmaprenderer.js | 131 +++++++++------- src/ol/renderer/webgl/webglmapshader.js | 147 ------------------ 6 files changed, 388 insertions(+), 207 deletions(-) rename src/ol/renderer/webgl/{webglmap.glsl => webglmapcolor.glsl} (88%) create mode 100644 src/ol/renderer/webgl/webglmapcolorshader.js create mode 100644 src/ol/renderer/webgl/webglmapdefault.glsl create mode 100644 src/ol/renderer/webgl/webglmapdefaultshader.js delete mode 100644 src/ol/renderer/webgl/webglmapshader.js diff --git a/src/ol/renderer/webgl/webglmap.glsl b/src/ol/renderer/webgl/webglmapcolor.glsl similarity index 88% rename from src/ol/renderer/webgl/webglmap.glsl rename to src/ol/renderer/webgl/webglmapcolor.glsl index 1302608e39..4ed15cd954 100644 --- a/src/ol/renderer/webgl/webglmap.glsl +++ b/src/ol/renderer/webgl/webglmapcolor.glsl @@ -1,5 +1,5 @@ -//! NAMESPACE=ol.renderer.webgl.map.shader -//! CLASS=ol.renderer.webgl.map.shader. +//! NAMESPACE=ol.renderer.webgl.map.shader.Color +//! CLASS=ol.renderer.webgl.map.shader.Color //! COMMON diff --git a/src/ol/renderer/webgl/webglmapcolorshader.js b/src/ol/renderer/webgl/webglmapcolorshader.js new file mode 100644 index 0000000000..f5bdfe6deb --- /dev/null +++ b/src/ol/renderer/webgl/webglmapcolorshader.js @@ -0,0 +1,147 @@ +// This file is automatically generated, do not edit +goog.provide('ol.renderer.webgl.map.shader.Color'); +goog.require('ol.webgl.shader'); +/** + * @constructor + * @extends {ol.webgl.shader.Fragment} + */ +ol.renderer.webgl.map.shader.ColorFragment = function() { + goog.base(this, ol.renderer.webgl.map.shader.ColorFragment.SOURCE); +}; +goog.inherits(ol.renderer.webgl.map.shader.ColorFragment, ol.webgl.shader.Fragment); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.ColorFragment); +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.ColorFragment.DEBUG_SOURCE = 'precision mediump float;\n//! NAMESPACE=ol.renderer.webgl.map.shader.Color\n//! CLASS=ol.renderer.webgl.map.shader.Color\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! FRAGMENT\n// @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp\nuniform mat4 u_colorMatrix;\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor = texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb = (u_colorMatrix * vec4(texColor.rgb, 1.)).rgb;\n gl_FragColor.a = texColor.a * u_opacity;\n}\n\n'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform mat4 d;uniform float e;uniform sampler2D f;void main(){vec4 g=texture2D(f,a);gl_FragColor.rgb=(d*vec4(g.rgb,1)).rgb;gl_FragColor.a=g.a*e;}'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.ColorFragment.SOURCE = goog.DEBUG ? + ol.renderer.webgl.map.shader.ColorFragment.DEBUG_SOURCE : + ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE; +/** + * @constructor + * @extends {ol.webgl.shader.Vertex} + */ +ol.renderer.webgl.map.shader.ColorVertex = function() { + goog.base(this, ol.renderer.webgl.map.shader.ColorVertex.SOURCE); +}; +goog.inherits(ol.renderer.webgl.map.shader.ColorVertex, ol.webgl.shader.Vertex); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.ColorVertex); +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.ColorVertex.DEBUG_SOURCE = '//! NAMESPACE=ol.renderer.webgl.map.shader.Color\n//! CLASS=ol.renderer.webgl.map.shader.Color\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! VERTEX\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 d,e;uniform mat4 b,c;void main(){gl_Position=c*vec4(d,0,1);a=(b*vec4(e,0,1)).st;}'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.ColorVertex.SOURCE = goog.DEBUG ? + ol.renderer.webgl.map.shader.ColorVertex.DEBUG_SOURCE : + ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE; +/** + * @constructor + */ +ol.renderer.webgl.map.shader.Color.uniform = function() {}; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Color.uniform.u_texCoordMatrix = + goog.DEBUG ? 'u_texCoordMatrix' : 'b'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Color.uniform.u_projectionMatrix = + goog.DEBUG ? 'u_projectionMatrix' : 'c'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Color.uniform.u_colorMatrix = + goog.DEBUG ? 'u_colorMatrix' : 'd'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Color.uniform.u_opacity = + goog.DEBUG ? 'u_opacity' : 'e'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Color.uniform.u_texture = + goog.DEBUG ? 'u_texture' : 'f'; +/** + * @constructor + */ +ol.renderer.webgl.map.shader.Color.attribute = function() {}; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Color.attribute.a_position = + goog.DEBUG ? 'a_position' : 'd'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Color.attribute.a_texCoord = + goog.DEBUG ? 'a_texCoord' : 'e'; +/** + * @constructor + * @param {WebGLRenderingContext} gl GL. + * @param {WebGLProgram} program Program. + */ +ol.renderer.webgl.map.shader.Color.Locations = function(gl, program) { + /** + * @type {WebGLUniformLocation} + */ + this.u_texCoordMatrix = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.Color.uniform.u_texCoordMatrix); + /** + * @type {WebGLUniformLocation} + */ + this.u_projectionMatrix = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.Color.uniform.u_projectionMatrix); + /** + * @type {WebGLUniformLocation} + */ + this.u_colorMatrix = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.Color.uniform.u_colorMatrix); + /** + * @type {WebGLUniformLocation} + */ + this.u_opacity = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.Color.uniform.u_opacity); + /** + * @type {WebGLUniformLocation} + */ + this.u_texture = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.Color.uniform.u_texture); + /** + * @type {number} + */ + this.a_position = gl.getAttribLocation(program, + ol.renderer.webgl.map.shader.Color.attribute.a_position); + /** + * @type {number} + */ + this.a_texCoord = gl.getAttribLocation(program, + ol.renderer.webgl.map.shader.Color.attribute.a_texCoord); +}; diff --git a/src/ol/renderer/webgl/webglmapdefault.glsl b/src/ol/renderer/webgl/webglmapdefault.glsl new file mode 100644 index 0000000000..b07838dc3b --- /dev/null +++ b/src/ol/renderer/webgl/webglmapdefault.glsl @@ -0,0 +1,30 @@ +//! NAMESPACE=ol.renderer.webgl.map.shader.Default +//! CLASS=ol.renderer.webgl.map.shader.Default + + +//! COMMON +varying vec2 v_texCoord; + + +//! VERTEX +attribute vec2 a_position; +attribute vec2 a_texCoord; + +uniform mat4 u_texCoordMatrix; +uniform mat4 u_projectionMatrix; + +void main(void) { + gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.); + v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st; +} + + +//! FRAGMENT +uniform float u_opacity; +uniform sampler2D u_texture; + +void main(void) { + vec4 texColor = texture2D(u_texture, v_texCoord); + gl_FragColor.rgb = texColor.rgb; + gl_FragColor.a = texColor.a * u_opacity; +} diff --git a/src/ol/renderer/webgl/webglmapdefaultshader.js b/src/ol/renderer/webgl/webglmapdefaultshader.js new file mode 100644 index 0000000000..3b9dfcb023 --- /dev/null +++ b/src/ol/renderer/webgl/webglmapdefaultshader.js @@ -0,0 +1,136 @@ +// This file is automatically generated, do not edit +goog.provide('ol.renderer.webgl.map.shader.Default'); +goog.require('ol.webgl.shader'); +/** + * @constructor + * @extends {ol.webgl.shader.Fragment} + */ +ol.renderer.webgl.map.shader.DefaultFragment = function() { + goog.base(this, ol.renderer.webgl.map.shader.DefaultFragment.SOURCE); +}; +goog.inherits(ol.renderer.webgl.map.shader.DefaultFragment, ol.webgl.shader.Fragment); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.DefaultFragment); +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.DefaultFragment.DEBUG_SOURCE = 'precision mediump float;\n//! NAMESPACE=ol.renderer.webgl.map.shader.Default\n//! CLASS=ol.renderer.webgl.map.shader.Default\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! FRAGMENT\n// @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor = texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb = texColor.rgb;\n gl_FragColor.a = texColor.a * u_opacity;\n}\n\n'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform float d;uniform sampler2D e;void main(){vec4 f=texture2D(e,a);gl_FragColor.rgb=f.rgb;gl_FragColor.a=f.a*d;}'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.DefaultFragment.SOURCE = goog.DEBUG ? + ol.renderer.webgl.map.shader.DefaultFragment.DEBUG_SOURCE : + ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE; +/** + * @constructor + * @extends {ol.webgl.shader.Vertex} + */ +ol.renderer.webgl.map.shader.DefaultVertex = function() { + goog.base(this, ol.renderer.webgl.map.shader.DefaultVertex.SOURCE); +}; +goog.inherits(ol.renderer.webgl.map.shader.DefaultVertex, ol.webgl.shader.Vertex); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.DefaultVertex); +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.DefaultVertex.DEBUG_SOURCE = '//! NAMESPACE=ol.renderer.webgl.map.shader.Default\n//! CLASS=ol.renderer.webgl.map.shader.Default\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! VERTEX\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 d,e;uniform mat4 b,c;void main(){gl_Position=c*vec4(d,0,1);a=(b*vec4(e,0,1)).st;}'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.DefaultVertex.SOURCE = goog.DEBUG ? + ol.renderer.webgl.map.shader.DefaultVertex.DEBUG_SOURCE : + ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE; +/** + * @constructor + */ +ol.renderer.webgl.map.shader.Default.uniform = function() {}; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Default.uniform.u_texCoordMatrix = + goog.DEBUG ? 'u_texCoordMatrix' : 'b'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Default.uniform.u_projectionMatrix = + goog.DEBUG ? 'u_projectionMatrix' : 'c'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Default.uniform.u_opacity = + goog.DEBUG ? 'u_opacity' : 'd'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Default.uniform.u_texture = + goog.DEBUG ? 'u_texture' : 'e'; +/** + * @constructor + */ +ol.renderer.webgl.map.shader.Default.attribute = function() {}; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Default.attribute.a_position = + goog.DEBUG ? 'a_position' : 'd'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Default.attribute.a_texCoord = + goog.DEBUG ? 'a_texCoord' : 'e'; +/** + * @constructor + * @param {WebGLRenderingContext} gl GL. + * @param {WebGLProgram} program Program. + */ +ol.renderer.webgl.map.shader.Default.Locations = function(gl, program) { + /** + * @type {WebGLUniformLocation} + */ + this.u_texCoordMatrix = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.Default.uniform.u_texCoordMatrix); + /** + * @type {WebGLUniformLocation} + */ + this.u_projectionMatrix = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.Default.uniform.u_projectionMatrix); + /** + * @type {WebGLUniformLocation} + */ + this.u_opacity = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.Default.uniform.u_opacity); + /** + * @type {WebGLUniformLocation} + */ + this.u_texture = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.Default.uniform.u_texture); + /** + * @type {number} + */ + this.a_position = gl.getAttribLocation(program, + ol.renderer.webgl.map.shader.Default.attribute.a_position); + /** + * @type {number} + */ + this.a_texCoord = gl.getAttribLocation(program, + ol.renderer.webgl.map.shader.Default.attribute.a_texCoord); +}; diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index 9bbc4888ef..8d2fa79348 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -20,7 +20,8 @@ goog.require('ol.layer.TileLayer'); goog.require('ol.renderer.Map'); goog.require('ol.renderer.webgl.ImageLayer'); goog.require('ol.renderer.webgl.TileLayer'); -goog.require('ol.renderer.webgl.map.shader'); +goog.require('ol.renderer.webgl.map.shader.Color'); +goog.require('ol.renderer.webgl.map.shader.Default'); goog.require('ol.structs.Buffer'); goog.require('ol.structs.IntegerSet'); goog.require('ol.structs.LRUCache'); @@ -103,15 +104,15 @@ ol.renderer.webgl.Map = function(container, map) { /** * @private - * @type {{a_position: number, - * a_texCoord: number, - * u_colorMatrix: WebGLUniformLocation, - * u_opacity: WebGLUniformLocation, - * u_texture: WebGLUniformLocation, - * u_texCoordMatrix: WebGLUniformLocation, - * u_projectionMatrix: WebGLUniformLocation}|null} + * @type {ol.renderer.webgl.map.shader.Color.Locations} */ - this.locations_ = null; + this.colorLocations_ = null; + + /** + * @private + * @type {ol.renderer.webgl.map.shader.Default.Locations} + */ + this.defaultLocations_ = null; /** * @private @@ -200,18 +201,6 @@ ol.renderer.webgl.Map = function(container, map) { */ this.textureCacheFrameMarkerCount_ = 0; - /** - * @private - * @type {ol.webgl.shader.Fragment} - */ - this.fragmentShader_ = ol.renderer.webgl.map.shader.Fragment.getInstance(); - - /** - * @private - * @type {ol.webgl.shader.Vertex} - */ - this.vertexShader_ = ol.renderer.webgl.map.shader.Vertex.getInstance(); - this.initializeGL_(); }; @@ -468,7 +457,8 @@ ol.renderer.webgl.Map.prototype.getTileTextureQueue = function() { */ ol.renderer.webgl.Map.prototype.handleWebGLContextLost = function(event) { event.preventDefault(); - this.locations_ = null; + this.colorLocations_ = null; + this.defaultLocations_ = null; this.bufferCache_ = {}; this.shaderCache_ = {}; this.programCache_ = {}; @@ -560,54 +550,79 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { gl.enable(goog.webgl.BLEND); gl.viewport(0, 0, size.width, size.height); - var program = this.getProgram(this.fragmentShader_, this.vertexShader_); - gl.useProgram(program); - if (goog.isNull(this.locations_)) { - this.locations_ = { - a_position: gl.getAttribLocation( - program, ol.renderer.webgl.map.shader.attribute.a_position), - a_texCoord: gl.getAttribLocation( - program, ol.renderer.webgl.map.shader.attribute.a_texCoord), - u_colorMatrix: gl.getUniformLocation( - program, ol.renderer.webgl.map.shader.uniform.u_colorMatrix), - u_texCoordMatrix: gl.getUniformLocation( - program, ol.renderer.webgl.map.shader.uniform.u_texCoordMatrix), - u_projectionMatrix: gl.getUniformLocation( - program, ol.renderer.webgl.map.shader.uniform.u_projectionMatrix), - u_opacity: gl.getUniformLocation( - program, ol.renderer.webgl.map.shader.uniform.u_opacity), - u_texture: gl.getUniformLocation( - program, ol.renderer.webgl.map.shader.uniform.u_texture) - }; - } - this.bindBuffer(goog.webgl.ARRAY_BUFFER, this.arrayBuffer_); - gl.enableVertexAttribArray(this.locations_.a_position); - gl.vertexAttribPointer( - this.locations_.a_position, 2, goog.webgl.FLOAT, false, 16, 0); - gl.enableVertexAttribArray(this.locations_.a_texCoord); - gl.vertexAttribPointer( - this.locations_.a_texCoord, 2, goog.webgl.FLOAT, false, 16, 8); - gl.uniform1i(this.locations_.u_texture, 0); - + var currentProgram = null; + var locations; goog.array.forEach(frameState.layersArray, function(layer) { + var layerState = frameState.layerStates[goog.getUid(layer)]; if (!layerState.visible || !layerState.ready) { return; } + var useColor = + layerState.brightness || + layerState.contrast != 1 || + layerState.hue || + layerState.saturation != 1; + + var fragmentShader, vertexShader; + if (useColor) { + fragmentShader = ol.renderer.webgl.map.shader.ColorFragment.getInstance(); + vertexShader = ol.renderer.webgl.map.shader.ColorVertex.getInstance(); + } else { + fragmentShader = + ol.renderer.webgl.map.shader.DefaultFragment.getInstance(); + vertexShader = ol.renderer.webgl.map.shader.DefaultVertex.getInstance(); + } + + var program = this.getProgram(fragmentShader, vertexShader); + if (program != currentProgram) { + + gl.useProgram(program); + currentProgram = program; + + if (useColor) { + if (goog.isNull(this.colorLocations_)) { + locations = + new ol.renderer.webgl.map.shader.Color.Locations(gl, program); + this.colorLocations_ = locations; + } else { + locations = this.colorLocations_; + } + } else { + if (goog.isNull(this.defaultLocations_)) { + locations = + new ol.renderer.webgl.map.shader.Default.Locations(gl, program); + this.defaultLocations_ = locations; + } else { + locations = this.defaultLocations_; + } + } + + gl.enableVertexAttribArray(locations.a_position); + gl.vertexAttribPointer( + locations.a_position, 2, goog.webgl.FLOAT, false, 16, 0); + gl.enableVertexAttribArray(locations.a_texCoord); + gl.vertexAttribPointer( + locations.a_texCoord, 2, goog.webgl.FLOAT, false, 16, 8); + gl.uniform1i(locations.u_texture, 0); + + } + var layerRenderer = this.getLayerRenderer(layer); gl.uniformMatrix4fv( - this.locations_.u_texCoordMatrix, false, - layerRenderer.getTexCoordMatrix()); - gl.uniformMatrix4fv( - this.locations_.u_projectionMatrix, false, + locations.u_texCoordMatrix, false, layerRenderer.getTexCoordMatrix()); + gl.uniformMatrix4fv(locations.u_projectionMatrix, false, layerRenderer.getProjectionMatrix()); - gl.uniformMatrix4fv( - this.locations_.u_colorMatrix, false, layerRenderer.getColorMatrix()); - gl.uniform1f(this.locations_.u_opacity, layer.getOpacity()); + if (useColor) { + gl.uniformMatrix4fv(locations.u_colorMatrix, false, + layerRenderer.getColorMatrix()); + } + gl.uniform1f(locations.u_opacity, layer.getOpacity()); gl.bindTexture(goog.webgl.TEXTURE_2D, layerRenderer.getTexture()); gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4); + }, this); if (!this.renderedVisible_) { diff --git a/src/ol/renderer/webgl/webglmapshader.js b/src/ol/renderer/webgl/webglmapshader.js deleted file mode 100644 index 18e6fe7f3a..0000000000 --- a/src/ol/renderer/webgl/webglmapshader.js +++ /dev/null @@ -1,147 +0,0 @@ -// This file is automatically generated, do not edit -goog.provide('ol.renderer.webgl.map.shader'); -goog.require('ol.webgl.shader'); -/** - * @constructor - * @extends {ol.webgl.shader.Fragment} - */ -ol.renderer.webgl.map.shader.Fragment = function() { - goog.base(this, ol.renderer.webgl.map.shader.Fragment.SOURCE); -}; -goog.inherits(ol.renderer.webgl.map.shader.Fragment, ol.webgl.shader.Fragment); -goog.addSingletonGetter(ol.renderer.webgl.map.shader.Fragment); -/** - * @const - * @type {string} - */ -ol.renderer.webgl.map.shader.Fragment.DEBUG_SOURCE = 'precision mediump float;\n//! NAMESPACE=ol.renderer.webgl.map.shader\n//! CLASS=ol.renderer.webgl.map.shader.\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! FRAGMENT\n// @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp\nuniform mat4 u_colorMatrix;\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor = texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb = (u_colorMatrix * vec4(texColor.rgb, 1.)).rgb;\n gl_FragColor.a = texColor.a * u_opacity;\n}\n\n'; -/** - * @const - * @type {string} - */ -ol.renderer.webgl.map.shader.Fragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform mat4 d;uniform float e;uniform sampler2D f;void main(){vec4 g=texture2D(f,a);gl_FragColor.rgb=(d*vec4(g.rgb,1)).rgb;gl_FragColor.a=g.a*e;}'; -/** - * @const - * @type {string} - */ -ol.renderer.webgl.map.shader.Fragment.SOURCE = goog.DEBUG ? - ol.renderer.webgl.map.shader.Fragment.DEBUG_SOURCE : - ol.renderer.webgl.map.shader.Fragment.OPTIMIZED_SOURCE; -/** - * @constructor - * @extends {ol.webgl.shader.Vertex} - */ -ol.renderer.webgl.map.shader.Vertex = function() { - goog.base(this, ol.renderer.webgl.map.shader.Vertex.SOURCE); -}; -goog.inherits(ol.renderer.webgl.map.shader.Vertex, ol.webgl.shader.Vertex); -goog.addSingletonGetter(ol.renderer.webgl.map.shader.Vertex); -/** - * @const - * @type {string} - */ -ol.renderer.webgl.map.shader.Vertex.DEBUG_SOURCE = '//! NAMESPACE=ol.renderer.webgl.map.shader\n//! CLASS=ol.renderer.webgl.map.shader.\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! VERTEX\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n'; -/** - * @const - * @type {string} - */ -ol.renderer.webgl.map.shader.Vertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 d,e;uniform mat4 b,c;void main(){gl_Position=c*vec4(d,0,1);a=(b*vec4(e,0,1)).st;}'; -/** - * @const - * @type {string} - */ -ol.renderer.webgl.map.shader.Vertex.SOURCE = goog.DEBUG ? - ol.renderer.webgl.map.shader.Vertex.DEBUG_SOURCE : - ol.renderer.webgl.map.shader.Vertex.OPTIMIZED_SOURCE; -/** - * @constructor - */ -ol.renderer.webgl.map.shader.uniform = function() {}; -/** - * @const - * @type {string} - */ -ol.renderer.webgl.map.shader.uniform.u_texCoordMatrix = - goog.DEBUG ? 'u_texCoordMatrix' : 'b'; -/** - * @const - * @type {string} - */ -ol.renderer.webgl.map.shader.uniform.u_projectionMatrix = - goog.DEBUG ? 'u_projectionMatrix' : 'c'; -/** - * @const - * @type {string} - */ -ol.renderer.webgl.map.shader.uniform.u_colorMatrix = - goog.DEBUG ? 'u_colorMatrix' : 'd'; -/** - * @const - * @type {string} - */ -ol.renderer.webgl.map.shader.uniform.u_opacity = - goog.DEBUG ? 'u_opacity' : 'e'; -/** - * @const - * @type {string} - */ -ol.renderer.webgl.map.shader.uniform.u_texture = - goog.DEBUG ? 'u_texture' : 'f'; -/** - * @constructor - */ -ol.renderer.webgl.map.shader.attribute = function() {}; -/** - * @const - * @type {string} - */ -ol.renderer.webgl.map.shader.attribute.a_position = - goog.DEBUG ? 'a_position' : 'd'; -/** - * @const - * @type {string} - */ -ol.renderer.webgl.map.shader.attribute.a_texCoord = - goog.DEBUG ? 'a_texCoord' : 'e'; -/** - * @constructor - * @param {WebGLRenderingContext} gl GL. - * @param {WebGLProgram} program Program. - */ -ol.renderer.webgl.map.shader.Locations = function(gl, program) { - /** - * @type {WebGLUniformLocation} - */ - this.u_texCoordMatrix = gl.getUniformLocation(program, - ol.renderer.webgl.map.shader.uniform.u_texCoordMatrix); - /** - * @type {WebGLUniformLocation} - */ - this.u_projectionMatrix = gl.getUniformLocation(program, - ol.renderer.webgl.map.shader.uniform.u_projectionMatrix); - /** - * @type {WebGLUniformLocation} - */ - this.u_colorMatrix = gl.getUniformLocation(program, - ol.renderer.webgl.map.shader.uniform.u_colorMatrix); - /** - * @type {WebGLUniformLocation} - */ - this.u_opacity = gl.getUniformLocation(program, - ol.renderer.webgl.map.shader.uniform.u_opacity); - /** - * @type {WebGLUniformLocation} - */ - this.u_texture = gl.getUniformLocation(program, - ol.renderer.webgl.map.shader.uniform.u_texture); - /** - * @type {number} - */ - this.a_position = gl.getAttribLocation(program, - ol.renderer.webgl.map.shader.attribute.a_position); - /** - * @type {number} - */ - this.a_texCoord = gl.getAttribLocation(program, - ol.renderer.webgl.map.shader.attribute.a_texCoord); -};