1
0

WebGL.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. class WebGL {
  2. static isWebGL2Available() {
  3. try {
  4. const canvas = document.createElement( 'canvas' );
  5. return !! ( window.WebGL2RenderingContext && canvas.getContext( 'webgl2' ) );
  6. } catch ( e ) {
  7. return false;
  8. }
  9. }
  10. static isColorSpaceAvailable( colorSpace ) {
  11. try {
  12. const canvas = document.createElement( 'canvas' );
  13. const ctx = window.WebGL2RenderingContext && canvas.getContext( 'webgl2' );
  14. ctx.drawingBufferColorSpace = colorSpace;
  15. return ctx.drawingBufferColorSpace === colorSpace; // deepscan-disable-line SAME_OPERAND_VALUE
  16. } catch ( e ) {
  17. return false;
  18. }
  19. }
  20. static getWebGL2ErrorMessage() {
  21. return this.getErrorMessage( 2 );
  22. }
  23. static getErrorMessage( version ) {
  24. const names = {
  25. 1: 'WebGL',
  26. 2: 'WebGL 2'
  27. };
  28. const contexts = {
  29. 1: window.WebGLRenderingContext,
  30. 2: window.WebGL2RenderingContext
  31. };
  32. let message = 'Your $0 does not seem to support <a href="http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation" style="color:#000">$1</a>';
  33. const element = document.createElement( 'div' );
  34. element.id = 'webglmessage';
  35. element.style.fontFamily = 'monospace';
  36. element.style.fontSize = '13px';
  37. element.style.fontWeight = 'normal';
  38. element.style.textAlign = 'center';
  39. element.style.background = '#fff';
  40. element.style.color = '#000';
  41. element.style.padding = '1.5em';
  42. element.style.width = '400px';
  43. element.style.margin = '5em auto 0';
  44. if ( contexts[ version ] ) {
  45. message = message.replace( '$0', 'graphics card' );
  46. } else {
  47. message = message.replace( '$0', 'browser' );
  48. }
  49. message = message.replace( '$1', names[ version ] );
  50. element.innerHTML = message;
  51. return element;
  52. }
  53. // @deprecated, r168
  54. static isWebGLAvailable() {
  55. console.warn( 'isWebGLAvailable() has been deprecated and will be removed in r178. Use isWebGL2Available() instead.' );
  56. try {
  57. const canvas = document.createElement( 'canvas' );
  58. return !! ( window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ) );
  59. } catch ( e ) {
  60. return false;
  61. }
  62. }
  63. static getWebGLErrorMessage() {
  64. console.warn( 'getWebGLErrorMessage() has been deprecated and will be removed in r178. Use getWebGL2ErrorMessage() instead.' );
  65. return this.getErrorMessage( 1 );
  66. }
  67. }
  68. export default WebGL;