diff --git a/src/ol/createmap.js b/src/ol/createmap.js
index 01d1efbf1b..42b32e40c9 100644
--- a/src/ol/createmap.js
+++ b/src/ol/createmap.js
@@ -1,3 +1,4 @@
+goog.provide('ol.RendererHint');
goog.provide('ol.createMap');
goog.require('goog.object');
@@ -29,12 +30,32 @@ ol.ENABLE_DOM = true;
ol.ENABLE_WEBGL = true;
+/**
+ * @enum {string}
+ */
+ol.RendererHint = {
+ DOM: 'dom',
+ WEBGL: 'webgl'
+};
+
+
+/**
+ * @type {Array.
}}
+ */
+ol.DEFAULT_RENDERER_HINT = [
+ ol.RendererHint.WEBGL,
+ ol.RendererHint.DOM
+];
+
+
/**
* @param {!HTMLDivElement} target Target.
* @param {Object.=} opt_values Values.
+ * @param {ol.RendererHint|Array.=} opt_rendererHints
+ * Renderer hints.
* @return {ol.Map} Map.
*/
-ol.createMap = function(target, opt_values) {
+ol.createMap = function(target, opt_values, opt_rendererHints) {
var values = {};
if (goog.isDef(opt_values)) {
@@ -50,12 +71,32 @@ ol.createMap = function(target, opt_values) {
ol.Projection.createFromCode(ol.DEFAULT_PROJECTION_CODE);
}
- if (ol.ENABLE_WEBGL && ol.webgl.isSupported()) {
- return new ol.webgl.Map(target, values);
+ /**
+ * @type {Array.}
+ */
+ var rendererHints;
+ if (goog.isDef(opt_rendererHints)) {
+ if (goog.isArray(opt_rendererHints)) {
+ rendererHints = opt_rendererHints;
+ } else {
+ rendererHints = [opt_rendererHints];
+ }
+ } else {
+ rendererHints = ol.DEFAULT_RENDERER_HINT;
}
- if (ol.ENABLE_DOM && ol.dom.isSupported()) {
- return new ol.dom.Map(target, values);
+ var i, rendererHint;
+ for (i = 0; i < rendererHints.length; ++i) {
+ rendererHint = rendererHints[i];
+ if (rendererHint == ol.RendererHint.DOM) {
+ if (ol.ENABLE_DOM && ol.dom.isSupported()) {
+ return new ol.dom.Map(target, values);
+ }
+ } else if (rendererHint == ol.RendererHint.WEBGL) {
+ if (ol.ENABLE_WEBGL && ol.webgl.isSupported()) {
+ return new ol.webgl.Map(target, values);
+ }
+ }
}
return null;