mirror of https://github.com/vladmandic/human
added humangl custom backend
parent
27159a59dc
commit
2a041305e9
|
@ -3,10 +3,11 @@ import draw from './draw.js';
|
||||||
import Menu from './menu.js';
|
import Menu from './menu.js';
|
||||||
import GLBench from './gl-bench.js';
|
import GLBench from './gl-bench.js';
|
||||||
|
|
||||||
const userConfig = {}; // add any user configuration overrides
|
const userConfig = { backend: 'humangl' }; // add any user configuration overrides
|
||||||
|
|
||||||
/*
|
/*
|
||||||
const userConfig = {
|
const userConfig = {
|
||||||
|
backend: 'humangl',
|
||||||
face: { enabled: false, iris: { enabled: false } },
|
face: { enabled: false, iris: { enabled: false } },
|
||||||
body: { enabled: false },
|
body: { enabled: false },
|
||||||
hand: { enabled: false },
|
hand: { enabled: false },
|
||||||
|
|
10
src/human.js
10
src/human.js
|
@ -182,12 +182,12 @@ class Human {
|
||||||
if (!simd) log('warning: wasm simd support is not enabled');
|
if (!simd) log('warning: wasm simd support is not enabled');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.config.backend === 'humangl') {
|
if (this.config.backend === 'humangl') backend.register();
|
||||||
log('registering humangl backend');
|
try {
|
||||||
backend.register();
|
|
||||||
}
|
|
||||||
|
|
||||||
await tf.setBackend(this.config.backend);
|
await tf.setBackend(this.config.backend);
|
||||||
|
} catch (err) {
|
||||||
|
log('error: cannot set backend:', this.config.backend, err);
|
||||||
|
}
|
||||||
tf.enableProdMode();
|
tf.enableProdMode();
|
||||||
/* debug mode is really too mcuh
|
/* debug mode is really too mcuh
|
||||||
tf.enableDebugMode();
|
tf.enableDebugMode();
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
|
import { log } from '../log.js';
|
||||||
import * as tf from '../../dist/tfjs.esm.js';
|
import * as tf from '../../dist/tfjs.esm.js';
|
||||||
|
|
||||||
export const config = {
|
export const config = {
|
||||||
name: 'humangl',
|
name: 'humangl',
|
||||||
priority: 99,
|
priority: 99,
|
||||||
canvas: null,
|
canvas: null,
|
||||||
|
gl: null,
|
||||||
width: 1024,
|
width: 1024,
|
||||||
height: 1024,
|
height: 1024,
|
||||||
webGLattr: { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2
|
webGLattr: { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2
|
||||||
|
@ -20,21 +22,51 @@ export const config = {
|
||||||
|
|
||||||
export function register() {
|
export function register() {
|
||||||
if (!tf.findBackend(config.name)) {
|
if (!tf.findBackend(config.name)) {
|
||||||
// @ts-ignore
|
log('backend registration:', config.name);
|
||||||
|
try {
|
||||||
config.canvas = (typeof OffscreenCanvas !== 'undefined') ? new OffscreenCanvas(config.width, config.height) : document.createElement('canvas');
|
config.canvas = (typeof OffscreenCanvas !== 'undefined') ? new OffscreenCanvas(config.width, config.height) : document.createElement('canvas');
|
||||||
// @ts-ignore
|
} catch (err) {
|
||||||
const gl = config.canvas.getContext('webgl2', config.webGLattr);
|
log('error: cannot create canvas:', err);
|
||||||
tf.setWebGLContext(2, gl);
|
return;
|
||||||
const ctx = new tf.GPGPUContext(gl);
|
}
|
||||||
|
try {
|
||||||
|
config.gl = config.canvas.getContext('webgl2', config.webGLattr);
|
||||||
|
} catch (err) {
|
||||||
|
log('error: cannot get WebGL2 context:', err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
tf.setWebGLContext(2, config.gl);
|
||||||
|
} catch (err) {
|
||||||
|
log('error: cannot set WebGL2 context:', err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const ctx = new tf.GPGPUContext(config.gl);
|
||||||
tf.registerBackend(config.name, () => new tf.MathBackendWebGL(ctx), config.priority);
|
tf.registerBackend(config.name, () => new tf.MathBackendWebGL(ctx), config.priority);
|
||||||
|
} catch (err) {
|
||||||
|
log('error: cannot register WebGL backend:', err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
const kernels = tf.getKernelsForBackend('webgl');
|
const kernels = tf.getKernelsForBackend('webgl');
|
||||||
kernels.forEach((kernelConfig) => {
|
kernels.forEach((kernelConfig) => {
|
||||||
const newKernelConfig = { ...kernelConfig, backendName: config.name };
|
const newKernelConfig = { ...kernelConfig, backendName: config.name };
|
||||||
tf.registerKernel(newKernelConfig);
|
tf.registerKernel(newKernelConfig);
|
||||||
});
|
});
|
||||||
|
} catch (err) {
|
||||||
|
log('error: cannot update WebGL backend registration:', err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
tf.ENV.set('WEBGL_VERSION', 2);
|
tf.ENV.set('WEBGL_VERSION', 2);
|
||||||
tf.ENV.set('WEBGL_MAX_TEXTURE_SIZE', gl.getParameter(gl.MAX_TEXTURE_SIZE));
|
tf.ENV.set('WEBGL_MAX_TEXTURE_SIZE', config.gl.getParameter(config.gl.MAX_TEXTURE_SIZE));
|
||||||
tf.ENV.set('WEBGL_FORCE_F16_TEXTURES', true);
|
tf.ENV.set('WEBGL_FORCE_F16_TEXTURES', true);
|
||||||
tf.ENV.set('WEBGL_PACK_DEPTHWISECONV', true);
|
tf.ENV.set('WEBGL_PACK_DEPTHWISECONV', true);
|
||||||
|
} catch (err) {
|
||||||
|
log('error: cannot set WebGL backend flags:', err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
log('backend registered:', config.name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
2
wiki
2
wiki
|
@ -1 +1 @@
|
||||||
Subproject commit 0ce580ced2bdf5f2f231dfae6c3d3f90053af6f6
|
Subproject commit c83eeeb158f2183d963500d9a767f04851497d2f
|
Loading…
Reference in New Issue