From 85c6f18c00f3026afee81ad4c5cfe42c8ce400ba Mon Sep 17 00:00:00 2001 From: HF Date: Thu, 5 Aug 2021 01:57:40 +0200 Subject: [PATCH] add error message if webgl is not supported --- src/core/Markdown.js | 4 ++-- src/core/utils.js | 13 +++++++++++++ src/ui/renderer.js | 29 +++++++++++++++++++++++------ 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/core/Markdown.js b/src/core/Markdown.js index 390a57a..307589e 100644 --- a/src/core/Markdown.js +++ b/src/core/Markdown.js @@ -89,8 +89,8 @@ export default class MarkdownParser { // beginning of line const paraLineStart = iter; if (indent && this.getIndent(text, paraLineStart) <= indent) { - //smaller indent occured - + // smaller indent occured + } iter = this.skipSpaces(text, iter); if (stoppingCondition(text, iter)) { diff --git a/src/core/utils.js b/src/core/utils.js index 8703a26..8190319 100644 --- a/src/core/utils.js +++ b/src/core/utils.js @@ -316,3 +316,16 @@ export function createNameRegExp(name: string) { if (!name) return null; return new RegExp(`(^|\\s+)(@${escapeRegExp(name)})(\\s+|$)`, 'g'); } + +/* + * check if webGL2 is available + * @return boolean true if available + */ +export function isWebGL2Available() { + try { + const canvas = document.createElement('canvas'); + return !!(window.WebGL2RenderingContext && canvas.getContext('webgl2')); + } catch { + return false; + } +} diff --git a/src/ui/renderer.js b/src/ui/renderer.js index fcb6c5e..a56b915 100644 --- a/src/ui/renderer.js +++ b/src/ui/renderer.js @@ -6,15 +6,22 @@ * @flow */ -import Renderer2D from './Renderer2D'; +import { t } from 'ttag'; -let renderer = { +import Renderer2D from './Renderer2D'; +import { sweetAlert } from '../actions'; +import { isWebGL2Available } from '../core/utils'; + +const dummyRenderer = { + is3D: null, render: () => null, destructor: () => null, renderPixel: () => null, updateCanvasData: () => null, }; +let renderer = dummyRenderer; + function animationLoop() { renderer.render(); window.requestAnimationFrame(animationLoop); @@ -24,10 +31,20 @@ animationLoop(); export async function initRenderer(store, is3D: boolean) { renderer.destructor(); if (is3D) { - /* eslint-disable-next-line max-len */ - const module = await import(/* webpackChunkName: "voxel" */ '../ui/Renderer3D'); - const Renderer3D = module.default; - renderer = new Renderer3D(store); + if (!isWebGL2Available()) { + store.dispatch(sweetAlert( + t`Canvas Error`, + t`Can't render 3D canvas, do you have WebGL2 disabled?`, + 'error', + 'OK', + )); + renderer = dummyRenderer; + } else { + /* eslint-disable-next-line max-len */ + const module = await import(/* webpackChunkName: "voxel" */ '../ui/Renderer3D'); + const Renderer3D = module.default; + renderer = new Renderer3D(store); + } } else { renderer = new Renderer2D(store); }