AboutTool.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * AboutTool.js
  3. *
  4. * @author realor
  5. */
  6. import { Tool } from './Tool.js'
  7. import { Dialog } from '../ui/Dialog.js'
  8. import { I18N } from '../i18n/I18N.js'
  9. import * as THREE from '../lib/three.module.js'
  10. class AboutTool extends Tool {
  11. constructor(application, options) {
  12. super(application)
  13. this.name = 'about'
  14. this.label = 'tool.about.label'
  15. this.className = 'about'
  16. this.setOptions(options)
  17. this.immediate = true
  18. }
  19. execute() {
  20. const application = this.application
  21. const appName = application.constructor.NAME
  22. const appVersion = application.constructor.VERSION
  23. let report = []
  24. report.push([appName + ' version', appVersion])
  25. report.push(['ThreeJS revision', THREE.REVISION])
  26. if (!window.WebGLRenderingContext) {
  27. report.push(['WebGL status', 'Not supported'])
  28. } else {
  29. report.push(['WebGL status', 'OK'])
  30. let canvas = document.createElement('canvas')
  31. canvas.width = 1
  32. canvas.height = 1
  33. document.body.appendChild(canvas)
  34. let gl
  35. gl = canvas.getContext('webgl')
  36. if (!gl) {
  37. gl = canvas.getContext('experimental-webgl')
  38. }
  39. document.body.removeChild(canvas)
  40. if (gl) {
  41. report.push(['GL version', gl.getParameter(gl.VERSION)])
  42. report.push(['GL vendor', gl.getParameter(gl.VENDOR)])
  43. report.push(['GL renderer', gl.getParameter(gl.RENDERER)])
  44. var dbgRenderInfo = gl.getExtension('WEBGL_debug_renderer_info')
  45. if (dbgRenderInfo !== null) {
  46. report.push(['Unmsk. rendered', gl.getParameter(dbgRenderInfo.UNMASKED_RENDERER_WEBGL)])
  47. report.push(['Unmsk. vendor', gl.getParameter(dbgRenderInfo.UNMASKED_VENDOR_WEBGL)])
  48. }
  49. } else {
  50. report.push(['WebGL status', 'ERROR'])
  51. }
  52. }
  53. let text = '<table style="text-align:left;">'
  54. for (let i = 0; i < report.length; i++) {
  55. text += '<tr>'
  56. text += '<td style="width:40%;vertical-align:top">' + report[i][0] + ':</td><td style="width:60%">' + report[i][1] + '</td>'
  57. text += '</tr>'
  58. }
  59. text += '</table>'
  60. const dialog = new Dialog(this.label)
  61. dialog.setSize(340, 300)
  62. dialog.setI18N(application.i18n)
  63. dialog.bodyElem.innerHTML = text
  64. let button = dialog.addButton('accept', 'button.accept', () => dialog.hide())
  65. dialog.onShow = () => button.focus()
  66. dialog.show()
  67. }
  68. }
  69. export { AboutTool }