123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- import browser from './utils/browser.js'
- let ftCanvas = document.createElement('canvas');
- export const Features = (function () {
- let gl = ftCanvas.getContext('webgl') || ftCanvas.getContext('experimental-webgl');
- if (gl === null){
- return null;
- }
- // -- code taken from THREE.WebGLRenderer --
- let _vertexShaderPrecisionHighpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT);
- let _vertexShaderPrecisionMediumpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT);
- // Unused: let _vertexShaderPrecisionLowpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT);
- let _fragmentShaderPrecisionHighpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);
- let _fragmentShaderPrecisionMediumpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT);
- // Unused: let _fragmentShaderPrecisionLowpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT);
- let highpAvailable = _vertexShaderPrecisionHighpFloat.precision > 0 && _fragmentShaderPrecisionHighpFloat.precision > 0;
- let mediumpAvailable = _vertexShaderPrecisionMediumpFloat.precision > 0 && _fragmentShaderPrecisionMediumpFloat.precision > 0;
- // -----------------------------------------
- let precision;
- if (highpAvailable) {
- precision = 'highp';
- } else if (mediumpAvailable) {
- precision = 'mediump';
- } else {
- precision = 'lowp';
- }
- return {
- SHADER_INTERPOLATION: {
- isSupported: function () {
- let supported = true;
- supported = supported && gl.getExtension('EXT_frag_depth');
- supported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8;
- return supported;
- }
- },
- SHADER_SPLATS: {
- isSupported: function () {
- let supported = true;
- supported = supported && gl.getExtension('EXT_frag_depth');
- supported = supported && gl.getExtension('OES_texture_float');
- supported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8;
- return supported;
- }
- },
- SHADER_EDL: {
- isSupported: function () {
- let supported = true;
- supported = supported && gl.getExtension('EXT_frag_depth');
- supported = supported && gl.getExtension('OES_texture_float');
- supported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8;
- //supported = supported || (gl instanceof WebGL2RenderingContext);
- return supported;
- }
- },
- //add:
- EXT_DEPTH:{
- isSupported: function () {
- if(browser.detectIOS()){
- let {major,minor,patch} = browser.iosVersion()
- if(major == 15 && minor == 4 && patch == 1){
- console.warn('检测到是ios15.4.1, 关闭EXT_frag_depth')//该版本ext_depth有问题,导致clear错乱。没有解决办法先关闭。
- return false
- }
- }
- return gl.getExtension('EXT_frag_depth'); //shader中的GL_EXT_frag_depth需要判断一下detectIOS吗。。
- }
- },
-
-
-
- //WEBGL2: {
- // isSupported: function(){
- // return gl instanceof WebGL2RenderingContext;
- // }
- //},
- precision: precision
- };
- }());
|