Merge pull request #425 from twpayne/glsl-unit

Use glsl-unit for WebGL shaders
This commit is contained in:
Tom Payne
2013-03-25 03:42:27 -07:00
13 changed files with 507 additions and 230 deletions

View File

@@ -1,81 +0,0 @@
goog.provide('ol.renderer.webgl.FragmentShader');
goog.provide('ol.renderer.webgl.VertexShader');
goog.require('goog.functions');
goog.require('goog.webgl');
/**
* @constructor
* @param {string} source Source.
*/
ol.renderer.webgl.Shader = function(source) {
/**
* @private
* @type {string}
*/
this.source_ = source;
};
/**
* @return {number} Type.
*/
ol.renderer.webgl.Shader.prototype.getType = goog.abstractMethod;
/**
* @return {string} Source.
*/
ol.renderer.webgl.Shader.prototype.getSource = function() {
return this.source_;
};
/**
* @return {boolean} Is animated?
*/
ol.renderer.webgl.Shader.prototype.isAnimated = goog.functions.FALSE;
/**
* @constructor
* @extends {ol.renderer.webgl.Shader}
* @param {string} source Source.
*/
ol.renderer.webgl.FragmentShader = function(source) {
goog.base(this, source);
};
goog.inherits(ol.renderer.webgl.FragmentShader, ol.renderer.webgl.Shader);
/**
* @inheritDoc
*/
ol.renderer.webgl.FragmentShader.prototype.getType = function() {
return goog.webgl.FRAGMENT_SHADER;
};
/**
* @constructor
* @extends {ol.renderer.webgl.Shader}
* @param {string} source Source.
*/
ol.renderer.webgl.VertexShader = function(source) {
goog.base(this, source);
};
goog.inherits(ol.renderer.webgl.VertexShader, ol.renderer.webgl.Shader);
/**
* @inheritDoc
*/
ol.renderer.webgl.VertexShader.prototype.getType = function() {
return goog.webgl.VERTEX_SHADER;
};

View File

@@ -0,0 +1,31 @@
//! NAMESPACE=ol.renderer.webgl.map
//! 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
// @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp
uniform mat4 u_colorMatrix;
uniform float u_opacity;
uniform sampler2D u_texture;
void main(void) {
vec4 texColor = texture2D(u_texture, v_texCoord);
gl_FragColor.rgb = (u_colorMatrix * vec4(texColor.rgb, 1.)).rgb;
gl_FragColor.a = texColor.a * u_opacity;
}

View File

@@ -1,7 +1,6 @@
// FIXME check against gl.getParameter(webgl.MAX_TEXTURE_SIZE)
goog.provide('ol.renderer.webgl.Map');
goog.provide('ol.renderer.webgl.map.shader');
goog.require('goog.array');
goog.require('goog.debug.Logger');
@@ -18,15 +17,15 @@ goog.require('ol.Tile');
goog.require('ol.layer.ImageLayer');
goog.require('ol.layer.TileLayer');
goog.require('ol.renderer.Map');
goog.require('ol.renderer.webgl.FragmentShader');
goog.require('ol.renderer.webgl.ImageLayer');
goog.require('ol.renderer.webgl.TileLayer');
goog.require('ol.renderer.webgl.VertexShader');
goog.require('ol.renderer.webgl.map.shader');
goog.require('ol.structs.Buffer');
goog.require('ol.structs.IntegerSet');
goog.require('ol.structs.LRUCache');
goog.require('ol.webgl');
goog.require('ol.webgl.WebGLContextEventType');
goog.require('ol.webgl.shader');
/**
@@ -50,64 +49,6 @@ ol.renderer.webgl.TextureCacheEntry;
/**
* @constructor
* @extends {ol.renderer.webgl.FragmentShader}
* @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp
*/
ol.renderer.webgl.map.shader.Fragment = function() {
goog.base(this, [
'precision mediump float;',
'',
'uniform mat4 u_colorMatrix;',
'uniform float u_opacity;',
'uniform sampler2D u_texture;',
'',
'varying vec2 v_texCoord;',
'',
'void main(void) {',
'',
' vec4 texColor = texture2D(u_texture, v_texCoord);',
' vec4 color = u_colorMatrix * vec4(texColor.rgb, 1.);',
' color.a = texColor.a * u_opacity;',
'',
' gl_FragColor = color;',
'',
'}'
].join('\n'));
};
goog.inherits(
ol.renderer.webgl.map.shader.Fragment, ol.renderer.webgl.FragmentShader);
goog.addSingletonGetter(ol.renderer.webgl.map.shader.Fragment);
/**
* @constructor
* @extends {ol.renderer.webgl.VertexShader}
*/
ol.renderer.webgl.map.shader.Vertex = function() {
goog.base(this, [
'attribute vec2 a_position;',
'attribute vec2 a_texCoord;',
'',
'uniform mat4 u_texCoordMatrix;',
'uniform mat4 u_projectionMatrix;',
'',
'varying vec2 v_texCoord;',
'',
'void main(void) {',
' gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);',
' v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;',
'}'
].join('\n'));
};
goog.inherits(
ol.renderer.webgl.map.shader.Vertex, ol.renderer.webgl.VertexShader);
goog.addSingletonGetter(ol.renderer.webgl.map.shader.Vertex);
/**
* @constructor
* @extends {ol.renderer.Map}
@@ -221,13 +162,13 @@ ol.renderer.webgl.Map = function(container, map) {
/**
* @private
* @type {ol.renderer.webgl.FragmentShader}
* @type {ol.webgl.shader.Fragment}
*/
this.fragmentShader_ = ol.renderer.webgl.map.shader.Fragment.getInstance();
/**
* @private
* @type {ol.renderer.webgl.VertexShader}
* @type {ol.webgl.shader.Vertex}
*/
this.vertexShader_ = ol.renderer.webgl.map.shader.Vertex.getInstance();
@@ -426,9 +367,8 @@ ol.renderer.webgl.Map.prototype.getGL = function() {
/**
* @param {ol.renderer.webgl.FragmentShader} fragmentShaderObject
* Fragment shader.
* @param {ol.renderer.webgl.VertexShader} vertexShaderObject Vertex shader.
* @param {ol.webgl.shader.Fragment} fragmentShaderObject Fragment shader.
* @param {ol.webgl.shader.Vertex} vertexShaderObject Vertex shader.
* @return {WebGLProgram} Program.
*/
ol.renderer.webgl.Map.prototype.getProgram = function(
@@ -458,7 +398,7 @@ ol.renderer.webgl.Map.prototype.getProgram = function(
/**
* @param {ol.renderer.webgl.Shader} shaderObject Shader object.
* @param {ol.webgl.Shader} shaderObject Shader object.
* @return {WebGLShader} Shader.
*/
ol.renderer.webgl.Map.prototype.getShader = function(shaderObject) {
@@ -586,13 +526,20 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) {
gl.useProgram(program);
if (goog.isNull(this.locations_)) {
this.locations_ = {
a_position: gl.getAttribLocation(program, 'a_position'),
a_texCoord: gl.getAttribLocation(program, 'a_texCoord'),
u_colorMatrix: gl.getUniformLocation(program, 'u_colorMatrix'),
u_texCoordMatrix: gl.getUniformLocation(program, 'u_texCoordMatrix'),
u_projectionMatrix: gl.getUniformLocation(program, 'u_projectionMatrix'),
u_opacity: gl.getUniformLocation(program, 'u_opacity'),
u_texture: gl.getUniformLocation(program, 'u_texture')
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)
};
}

View File

@@ -0,0 +1,105 @@
// 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\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\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';

View File

@@ -0,0 +1,24 @@
//! NAMESPACE=ol.renderer.webgl.tilelayer
//! COMMON
varying vec2 v_texCoord;
//! VERTEX
attribute vec2 a_position;
attribute vec2 a_texCoord;
uniform vec4 u_tileOffset;
void main(void) {
gl_Position = vec4(a_position * u_tileOffset.xy + u_tileOffset.zw, 0., 1.);
v_texCoord = a_texCoord;
}
//! FRAGMENT
uniform sampler2D u_texture;
void main(void) {
gl_FragColor = texture2D(u_texture, v_texCoord);
}

View File

@@ -2,7 +2,6 @@
// FIXME animated shaders! check in redraw
goog.provide('ol.renderer.webgl.TileLayer');
goog.provide('ol.renderer.webgl.tilelayer.shader');
goog.require('goog.array');
goog.require('goog.object');
@@ -18,65 +17,12 @@ goog.require('ol.TileRange');
goog.require('ol.TileState');
goog.require('ol.layer.TileLayer');
goog.require('ol.math');
goog.require('ol.renderer.webgl.FragmentShader');
goog.require('ol.renderer.webgl.Layer');
goog.require('ol.renderer.webgl.VertexShader');
goog.require('ol.renderer.webgl.tilelayer.shader');
goog.require('ol.structs.Buffer');
/**
* @constructor
* @extends {ol.renderer.webgl.FragmentShader}
*/
ol.renderer.webgl.tilelayer.shader.Fragment = function() {
goog.base(this, [
'precision mediump float;',
'',
'uniform sampler2D u_texture;',
'',
'varying vec2 v_texCoord;',
'',
'void main(void) {',
' gl_FragColor = texture2D(u_texture, v_texCoord);',
'}'
].join('\n'));
};
goog.inherits(
ol.renderer.webgl.tilelayer.shader.Fragment,
ol.renderer.webgl.FragmentShader);
goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Fragment);
/**
* @constructor
* @extends {ol.renderer.webgl.VertexShader}
*/
ol.renderer.webgl.tilelayer.shader.Vertex = function() {
goog.base(this, [
'attribute vec2 a_position;',
'attribute vec2 a_texCoord;',
'',
'varying vec2 v_texCoord;',
'',
'uniform vec4 u_tileOffset;',
'',
'void main(void) {',
' gl_Position.xy = a_position * u_tileOffset.xy + u_tileOffset.zw;',
' gl_Position.z = 0.;',
' gl_Position.w = 1.;',
' v_texCoord = a_texCoord;',
'}'
].join('\n'));
};
goog.inherits(
ol.renderer.webgl.tilelayer.shader.Vertex,
ol.renderer.webgl.VertexShader);
goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Vertex);
/**
* @constructor
* @extends {ol.renderer.webgl.Layer}
@@ -89,14 +35,14 @@ ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) {
/**
* @private
* @type {ol.renderer.webgl.FragmentShader}
* @type {ol.webgl.shader.Fragment}
*/
this.fragmentShader_ =
ol.renderer.webgl.tilelayer.shader.Fragment.getInstance();
/**
* @private
* @type {ol.renderer.webgl.VertexShader}
* @type {ol.webgl.shader.Vertex}
*/
this.vertexShader_ = ol.renderer.webgl.tilelayer.shader.Vertex.getInstance();
@@ -232,10 +178,14 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
gl.useProgram(program);
if (goog.isNull(this.locations_)) {
this.locations_ = {
a_position: gl.getAttribLocation(program, 'a_position'),
a_texCoord: gl.getAttribLocation(program, 'a_texCoord'),
u_tileOffset: gl.getUniformLocation(program, 'u_tileOffset'),
u_texture: gl.getUniformLocation(program, 'u_texture')
a_position: gl.getAttribLocation(
program, ol.renderer.webgl.tilelayer.shader.attribute.a_position),
a_texCoord: gl.getAttribLocation(
program, ol.renderer.webgl.tilelayer.shader.attribute.a_texCoord),
u_tileOffset: gl.getUniformLocation(
program, ol.renderer.webgl.tilelayer.shader.uniform.u_tileOffset),
u_texture: gl.getUniformLocation(
program, ol.renderer.webgl.tilelayer.shader.uniform.u_texture)
};
}

View File

@@ -0,0 +1,87 @@
// This file is automatically generated, do not edit
goog.provide('ol.renderer.webgl.tilelayer.shader');
goog.require('ol.webgl.shader');
/**
* @constructor
* @extends {ol.webgl.shader.Fragment}
*/
ol.renderer.webgl.tilelayer.shader.Fragment = function() {
goog.base(this, ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE);
};
goog.inherits(ol.renderer.webgl.tilelayer.shader.Fragment, ol.webgl.shader.Fragment);
goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Fragment);
/**
* @const
* @type {string}
*/
ol.renderer.webgl.tilelayer.shader.Fragment.DEBUG_SOURCE = 'precision mediump float;\n//! NAMESPACE=ol.renderer.webgl.tilelayer\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! FRAGMENT\nuniform sampler2D u_texture;\n\nvoid main(void) {\n gl_FragColor = texture2D(u_texture, v_texCoord);\n}\n\n';
/**
* @const
* @type {string}
*/
ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform sampler2D c;void main(){gl_FragColor=texture2D(c,a);}';
/**
* @const
* @type {string}
*/
ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE = goog.DEBUG ?
ol.renderer.webgl.tilelayer.shader.Fragment.DEBUG_SOURCE :
ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE;
/**
* @constructor
* @extends {ol.webgl.shader.Vertex}
*/
ol.renderer.webgl.tilelayer.shader.Vertex = function() {
goog.base(this, ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE);
};
goog.inherits(ol.renderer.webgl.tilelayer.shader.Vertex, ol.webgl.shader.Vertex);
goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Vertex);
/**
* @const
* @type {string}
*/
ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE = '//! NAMESPACE=ol.renderer.webgl.tilelayer\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! VERTEX\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\nuniform vec4 u_tileOffset;\n\nvoid main(void) {\n gl_Position = vec4(a_position * u_tileOffset.xy + u_tileOffset.zw, 0., 1.);\n v_texCoord = a_texCoord;\n}\n\n\n';
/**
* @const
* @type {string}
*/
ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 c,d;uniform vec4 b;void main(){gl_Position=vec4(c*b.xy+b.zw,0,1);a=d;}';
/**
* @const
* @type {string}
*/
ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE = goog.DEBUG ?
ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE :
ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE;
/**
* @constructor
*/
ol.renderer.webgl.tilelayer.shader.uniform = function() {};
/**
* @const
* @type {string}
*/
ol.renderer.webgl.tilelayer.shader.uniform.u_tileOffset =
goog.DEBUG ? 'u_tileOffset' : 'b';
/**
* @const
* @type {string}
*/
ol.renderer.webgl.tilelayer.shader.uniform.u_texture =
goog.DEBUG ? 'u_texture' : 'c';
/**
* @constructor
*/
ol.renderer.webgl.tilelayer.shader.attribute = function() {};
/**
* @const
* @type {string}
*/
ol.renderer.webgl.tilelayer.shader.attribute.a_position =
goog.DEBUG ? 'a_position' : 'c';
/**
* @const
* @type {string}
*/
ol.renderer.webgl.tilelayer.shader.attribute.a_texCoord =
goog.DEBUG ? 'a_texCoord' : 'd';

81
src/ol/webgl/shader.js Normal file
View File

@@ -0,0 +1,81 @@
goog.provide('ol.webgl.shader');
goog.require('goog.functions');
goog.require('goog.webgl');
goog.require('ol.webgl');
/**
* @constructor
* @param {string} source Source.
*/
ol.webgl.Shader = function(source) {
/**
* @private
* @type {string}
*/
this.source_ = source;
};
/**
* @return {number} Type.
*/
ol.webgl.Shader.prototype.getType = goog.abstractMethod;
/**
* @return {string} Source.
*/
ol.webgl.Shader.prototype.getSource = function() {
return this.source_;
};
/**
* @return {boolean} Is animated?
*/
ol.webgl.Shader.prototype.isAnimated = goog.functions.FALSE;
/**
* @constructor
* @extends {ol.webgl.Shader}
* @param {string} source Source.
*/
ol.webgl.shader.Fragment = function(source) {
goog.base(this, source);
};
goog.inherits(ol.webgl.shader.Fragment, ol.webgl.Shader);
/**
* @inheritDoc
*/
ol.webgl.shader.Fragment.prototype.getType = function() {
return goog.webgl.FRAGMENT_SHADER;
};
/**
* @constructor
* @extends {ol.webgl.Shader}
* @param {string} source Source.
*/
ol.webgl.shader.Vertex = function(source) {
goog.base(this, source);
};
goog.inherits(ol.webgl.shader.Vertex, ol.webgl.Shader);
/**
* @inheritDoc
*/
ol.webgl.shader.Vertex.prototype.getType = function() {
return goog.webgl.VERTEX_SHADER;
};

View File

@@ -0,0 +1,106 @@
// This file is automatically generated, do not edit
goog.provide('{{namespace}}.shader');
goog.require('ol.webgl.shader');
/**
* @constructor
* @extends {ol.webgl.shader.Fragment}
*/
{{namespace}}.shader.Fragment = function() {
goog.base(this, {{namespace}}.shader.Fragment.SOURCE);
};
goog.inherits({{namespace}}.shader.Fragment, ol.webgl.shader.Fragment);
goog.addSingletonGetter({{namespace}}.shader.Fragment);
/**
* @const
* @type {string}
*/
{{namespace}}.shader.Fragment.DEBUG_SOURCE = 'precision mediump float;\n{{getOriginalFragmentSource}}';
/**
* @const
* @type {string}
*/
{{namespace}}.shader.Fragment.OPTIMIZED_SOURCE = 'precision mediump float;{{getFragmentSource}}';
/**
* @const
* @type {string}
*/
{{namespace}}.shader.Fragment.SOURCE = goog.DEBUG ?
{{namespace}}.shader.Fragment.DEBUG_SOURCE :
{{namespace}}.shader.Fragment.OPTIMIZED_SOURCE;
/**
* @constructor
* @extends {ol.webgl.shader.Vertex}
*/
{{namespace}}.shader.Vertex = function() {
goog.base(this, {{namespace}}.shader.Vertex.SOURCE);
};
goog.inherits({{namespace}}.shader.Vertex, ol.webgl.shader.Vertex);
goog.addSingletonGetter({{namespace}}.shader.Vertex);
/**
* @const
* @type {string}
*/
{{namespace}}.shader.Vertex.DEBUG_SOURCE = '{{getOriginalVertexSource}}';
/**
* @const
* @type {string}
*/
{{namespace}}.shader.Vertex.OPTIMIZED_SOURCE = '{{getVertexSource}}';
/**
* @const
* @type {string}
*/
{{namespace}}.shader.Vertex.SOURCE = goog.DEBUG ?
{{namespace}}.shader.Vertex.DEBUG_SOURCE :
{{namespace}}.shader.Vertex.OPTIMIZED_SOURCE;
/**
* @constructor
*/
{{namespace}}.shader.uniform = function() {};
{{#getUniforms}}
/**
* @const
* @type {string}
*/
{{namespace}}.shader.uniform.{{originalName}} =
goog.DEBUG ? '{{originalName}}' : '{{shortName}}';
{{/getUniforms}}
/**
* @constructor
*/
{{namespace}}.shader.attribute = function() {};
{{#getAttributes}}
/**
* @const
* @type {string}
*/
{{namespace}}.shader.attribute.{{originalName}} =
goog.DEBUG ? '{{originalName}}' : '{{shortName}}';
{{/getAttributes}}