Notify if WebGL is not supported

This commit is contained in:
Frederic Junod
2013-11-29 10:43:02 +01:00
parent d2fd695635
commit e2d9c77e08
2 changed files with 85 additions and 72 deletions

View File

@@ -28,6 +28,10 @@
</div> </div>
</div> </div>
<div id="no-webgl" class="alert alert-error" style="display: none">
This example requires a browser that supports <a href="http://get.webgl.org/">WebGL</a>.
</div>
<div class="row-fluid"> <div class="row-fluid">
<div class="span12"> <div class="span12">

View File

@@ -4,90 +4,99 @@ goog.require('ol.View2D');
goog.require('ol.layer.Tile'); goog.require('ol.layer.Tile');
goog.require('ol.source.OSM'); goog.require('ol.source.OSM');
var osm = new ol.layer.Tile({ if (!ol.webgl.SUPPORTED) {
source: new ol.source.OSM() var info = document.getElementById('no-webgl');
}); /**
* display error message
*/
info.style.display = '';
} else {
var map = new ol.Map({ var osm = new ol.layer.Tile({
layers: [osm], source: new ol.source.OSM()
renderer: ol.RendererHint.WEBGL, });
target: 'map',
view: new ol.View2D({
center: [0, 0],
zoom: 2
})
});
var fragmentShaderSource = [ var map = new ol.Map({
'precision mediump float;', layers: [osm],
'void main() {', renderer: ol.RendererHint.WEBGL,
'}' target: 'map',
].join(''); view: new ol.View2D({
center: [0, 0],
zoom: 2
})
});
var vertexShaderSource = [ var fragmentShaderSource = [
'attribute vec2 a_position;', 'precision mediump float;',
'void main() {', 'void main() {',
'gl_Position = vec4(a_position, 0, 1);', '}'
'}' ].join('');
].join('');
osm.on('precompose', function(event) { var vertexShaderSource = [
var context = event.getGlContext(); 'attribute vec2 a_position;',
'void main() {',
' gl_Position = vec4(a_position, 0, 1);',
'}'
].join('');
var gl = context.getGL(); osm.on('precompose', function(event) {
var program = gl.createProgram(); var context = event.getGlContext();
var vertexShader = gl.createShader(gl.VERTEX_SHADER); var gl = context.getGL();
gl.shaderSource(vertexShader, vertexShaderSource); var program = gl.createProgram();
gl.compileShader(vertexShader);
gl.attachShader(program, vertexShader);
var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); var vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(fragmentShader, fragmentShaderSource); gl.shaderSource(vertexShader, vertexShaderSource);
gl.compileShader(fragmentShader); gl.compileShader(vertexShader);
gl.attachShader(program, fragmentShader); gl.attachShader(program, vertexShader);
gl.linkProgram(program); var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
context.useProgram(program); gl.shaderSource(fragmentShader, fragmentShaderSource);
gl.compileShader(fragmentShader);
gl.attachShader(program, fragmentShader);
var positionLocation = gl.getAttribLocation(program, 'a_position'); gl.linkProgram(program);
context.useProgram(program);
gl.enable(gl.STENCIL_TEST); var positionLocation = gl.getAttribLocation(program, 'a_position');
gl.colorMask(false, false, false, false);
gl.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);
gl.stencilFunc(gl.ALWAYS, 1, 0xff);
var buffer = gl.createBuffer(); gl.enable(gl.STENCIL_TEST);
gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.colorMask(false, false, false, false);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([ gl.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);
// first band gl.stencilFunc(gl.ALWAYS, 1, 0xff);
-1.0, -1.0, -0.75, -1.0, -1.0, 1.0,
-1.0, 1.0, -0.75, -1.0, -0.75, 1.0,
// second band
-0.5, -1.0, -0.25, -1.0, -0.5, 1.0,
-0.5, 1.0, -0.25, -1.0, -0.25, 1.0,
// third band
0.0, -1.0, 0.25, -1.0, 0.0, 1.0,
0.0, 1.0, 0.25, -1.0, 0.25, 1.0,
// forth band
0.5, -1.0, 0.75, -1.0, 0.5, 1.0,
0.5, 1.0, 0.75, -1.0, 0.75, 1.0
]), gl.STATIC_DRAW);
gl.enableVertexAttribArray(positionLocation); var buffer = gl.createBuffer();
gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0); gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.drawArrays(gl.TRIANGLES, 0, 24); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
// first band
-1.0, -1.0, -0.75, -1.0, -1.0, 1.0,
-1.0, 1.0, -0.75, -1.0, -0.75, 1.0,
// second band
-0.5, -1.0, -0.25, -1.0, -0.5, 1.0,
-0.5, 1.0, -0.25, -1.0, -0.25, 1.0,
// third band
0.0, -1.0, 0.25, -1.0, 0.0, 1.0,
0.0, 1.0, 0.25, -1.0, 0.25, 1.0,
// forth band
0.5, -1.0, 0.75, -1.0, 0.5, 1.0,
0.5, 1.0, 0.75, -1.0, 0.75, 1.0
]), gl.STATIC_DRAW);
gl.bindBuffer(gl.ARRAY_BUFFER, null); gl.enableVertexAttribArray(positionLocation);
gl.deleteBuffer(buffer); gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);
gl.drawArrays(gl.TRIANGLES, 0, 24);
gl.colorMask(true, true, true, true); gl.bindBuffer(gl.ARRAY_BUFFER, null);
gl.stencilFunc(gl.NOTEQUAL, 0, 0xff); gl.deleteBuffer(buffer);
gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
});
osm.on('postcompose', function(event) { gl.colorMask(true, true, true, true);
var context = event.getGlContext(); gl.stencilFunc(gl.NOTEQUAL, 0, 0xff);
var gl = context.getGL(); gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
gl.disable(gl.STENCIL_TEST); });
});
osm.on('postcompose', function(event) {
var context = event.getGlContext();
var gl = context.getGL();
gl.disable(gl.STENCIL_TEST);
});
}