Merge pull request #425 from twpayne/glsl-unit
Use glsl-unit for WebGL shaders
This commit is contained in:
@@ -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;
|
||||
};
|
||||
31
src/ol/renderer/webgl/webglmap.glsl
Normal file
31
src/ol/renderer/webgl/webglmap.glsl
Normal 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;
|
||||
}
|
||||
@@ -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)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
105
src/ol/renderer/webgl/webglmapshader.js
Normal file
105
src/ol/renderer/webgl/webglmapshader.js
Normal 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';
|
||||
24
src/ol/renderer/webgl/webgltilelayer.glsl
Normal file
24
src/ol/renderer/webgl/webgltilelayer.glsl
Normal 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);
|
||||
}
|
||||
@@ -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)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
87
src/ol/renderer/webgl/webgltilelayershader.js
Normal file
87
src/ol/renderer/webgl/webgltilelayershader.js
Normal 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
81
src/ol/webgl/shader.js
Normal 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;
|
||||
};
|
||||
106
src/ol/webgl/shader.mustache
Normal file
106
src/ol/webgl/shader.mustache
Normal 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}}
|
||||
Reference in New Issue
Block a user