2016-06-09 2 views
0

Я использую THREE.js сцен и графических объектов на моей веб-странице. Я знаю, как минимум, . THREE.js использует WebGL.Modernizr: Тестирование для WebGL vs WebGL Exentions

Я хотел бы использовать Modernizr, чтобы проверить текущий браузер для совместимости с WebGL и, если браузер не имеет его, выдать сообщение пользователю.

При выборе browser features иметь Modernizr тест на, я вижу две особенности, которые имеют отношение к моей цели

WebGL:выявленный WebGL в браузере.

WebGL Extentions: Обнаруживает поддержка расширений OpenGL в WebGL. Это true если расширения WebGL API поддерживается, то обнажает поддерживаемые расширения как подсвойств, например:

Так для того, чтобы three.js работать, мне нужно, чтобы проверить WebGL Extentions и WebGLили просто WebGL?

ответ

2

Это зависит от того, есть ли функции, требующие расширения. Сам тр.js не нуждается в каких-либо расширениях. Некоторые вещи, такие как тени, вероятно, работают быстрее, если вы используете расширение WEBGL_depth_texture.

Если вы не знаете, какие расширения вы лично необходимо рассмотреть вопрос о включении какой-то код, чтобы скрыть их и посмотреть, если ваше приложение все еще работает

Пример:

// disable all extensions 

WebGLRenderingContext.prototype.getExtension = function() { 
    return null; 
} 
WebGLRenderingContext.prototype.getSupportedExtensions = function() { 
    return []; 
} 

// now init three.js 

Если вы хотите разрешить конкретные расширениям мог бы сделать что-то вроде этого

var allowedExtensions = [ 
    "webgl_depth_texture", 
    "oes_texture_float", 
]; 

WebGLRenderingContext.prototype.getExtension = function(origFn) { 
    return function(name) { 
    if (allowedExtensions.indexOf(name.ToLowerCase()) >= 0) { 
     return origFn.call(this, name); 
    } 
    return null; 
    }; 
}(WebGLRenderingContext.prototype.getExtension); 

WebGLRenderingContext.prototype.getSupportedExtensions = function(origFn) { 
    return function() { 
    return origFn.call(this).filter(function(name) { 
     return allowedExtensions.indexOf(n) >= 0; 
    }); 
    }; 
}(WebGLRenderingContext.prototype.getSupportedExtensions);