Features.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. let ftCanvas = document.createElement('canvas');
  2. export const Features = (function () {
  3. let gl = ftCanvas.getContext('webgl') || ftCanvas.getContext('experimental-webgl');
  4. if (gl === null){
  5. return null;
  6. }
  7. // -- code taken from THREE.WebGLRenderer --
  8. let _vertexShaderPrecisionHighpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT);
  9. let _vertexShaderPrecisionMediumpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT);
  10. // Unused: let _vertexShaderPrecisionLowpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT);
  11. let _fragmentShaderPrecisionHighpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);
  12. let _fragmentShaderPrecisionMediumpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT);
  13. // Unused: let _fragmentShaderPrecisionLowpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT);
  14. let highpAvailable = _vertexShaderPrecisionHighpFloat.precision > 0 && _fragmentShaderPrecisionHighpFloat.precision > 0;
  15. let mediumpAvailable = _vertexShaderPrecisionMediumpFloat.precision > 0 && _fragmentShaderPrecisionMediumpFloat.precision > 0;
  16. // -----------------------------------------
  17. let precision;
  18. if (highpAvailable) {
  19. precision = 'highp';
  20. } else if (mediumpAvailable) {
  21. precision = 'mediump';
  22. } else {
  23. precision = 'lowp';
  24. }
  25. return {
  26. SHADER_INTERPOLATION: {
  27. isSupported: function () {
  28. let supported = true;
  29. supported = supported && gl.getExtension('EXT_frag_depth');
  30. supported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8;
  31. return supported;
  32. }
  33. },
  34. SHADER_SPLATS: {
  35. isSupported: function () {
  36. let supported = true;
  37. supported = supported && gl.getExtension('EXT_frag_depth');
  38. supported = supported && gl.getExtension('OES_texture_float');
  39. supported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8;
  40. return supported;
  41. }
  42. },
  43. SHADER_EDL: {
  44. isSupported: function () {
  45. let supported = true;
  46. supported = supported && gl.getExtension('EXT_frag_depth');
  47. supported = supported && gl.getExtension('OES_texture_float');
  48. supported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8;
  49. //supported = supported || (gl instanceof WebGL2RenderingContext);
  50. return supported;
  51. }
  52. },
  53. //WEBGL2: {
  54. // isSupported: function(){
  55. // return gl instanceof WebGL2RenderingContext;
  56. // }
  57. //},
  58. precision: precision
  59. };
  60. }());