add error message if webgl is not supported

This commit is contained in:
HF 2021-08-05 01:57:40 +02:00
parent 8cf2b9b523
commit 85c6f18c00
3 changed files with 38 additions and 8 deletions

View File

@ -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)) {

View File

@ -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;
}
}

View File

@ -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);
}