|
@@ -1,5 +1,5 @@
|
|
/**
|
|
/**
|
|
- * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
|
|
|
|
|
|
+ * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
|
|
*
|
|
*
|
|
* @author Alexander Rose <alexander.rose@weirdbyte.de>
|
|
* @author Alexander Rose <alexander.rose@weirdbyte.de>
|
|
*/
|
|
*/
|
|
@@ -10,11 +10,15 @@ import { RuntimeContext, Task } from 'mol-task';
|
|
import { PositionData, DensityData } from './common';
|
|
import { PositionData, DensityData } from './common';
|
|
import { GaussianDensityCPU } from './gaussian-density/cpu';
|
|
import { GaussianDensityCPU } from './gaussian-density/cpu';
|
|
import { WebGLContext } from 'mol-gl/webgl/context';
|
|
import { WebGLContext } from 'mol-gl/webgl/context';
|
|
|
|
+import { Texture } from 'mol-gl/webgl/texture';
|
|
|
|
|
|
-// import { GaussianDensityGPU } from './gaussian-density/gpu';
|
|
|
|
|
|
+// import { GaussianDensityGPU, GaussianDensityTexture } from './gaussian-density/gpu';
|
|
const GaussianDensityGPU = typeof document !== 'undefined'
|
|
const GaussianDensityGPU = typeof document !== 'undefined'
|
|
? (require('./gaussian-density/gpu') as typeof import('./gaussian-density/gpu')).GaussianDensityGPU
|
|
? (require('./gaussian-density/gpu') as typeof import('./gaussian-density/gpu')).GaussianDensityGPU
|
|
: void 0;
|
|
: void 0;
|
|
|
|
+const GaussianDensityTexture = typeof document !== 'undefined'
|
|
|
|
+ ? (require('./gaussian-density/gpu') as typeof import('./gaussian-density/gpu')).GaussianDensityTexture
|
|
|
|
+ : void 0;
|
|
|
|
|
|
export const DefaultGaussianDensityGPUProps = {
|
|
export const DefaultGaussianDensityGPUProps = {
|
|
resolution: 1,
|
|
resolution: 1,
|
|
@@ -37,9 +41,9 @@ export function getDelta(box: Box3D, resolution: number) {
|
|
return delta
|
|
return delta
|
|
}
|
|
}
|
|
|
|
|
|
-export function computeGaussianDensity(position: PositionData, box: Box3D, radius: (index: number) => number, props: GaussianDensityProps) {
|
|
|
|
|
|
+export function computeGaussianDensity(position: PositionData, box: Box3D, radius: (index: number) => number, props: GaussianDensityProps, webgl?: WebGLContext) {
|
|
return Task.create('Gaussian Density', async ctx => {
|
|
return Task.create('Gaussian Density', async ctx => {
|
|
- return await GaussianDensity(ctx, position, box, radius, props)
|
|
|
|
|
|
+ return await GaussianDensity(ctx, position, box, radius, props, webgl)
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
@@ -51,4 +55,11 @@ export async function GaussianDensity(ctx: RuntimeContext, position: PositionDat
|
|
} else {
|
|
} else {
|
|
return await GaussianDensityCPU(ctx, position, box, radius, props)
|
|
return await GaussianDensityCPU(ctx, position, box, radius, props)
|
|
}
|
|
}
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+export function computeGaussianDensityTexture(position: PositionData, box: Box3D, radius: (index: number) => number, props: GaussianDensityGPUProps, webgl: WebGLContext, texture?: Texture) {
|
|
|
|
+ if (!GaussianDensityTexture) throw 'GPU computation not supported on this platform';
|
|
|
|
+ return Task.create('Gaussian Density', async ctx => {
|
|
|
|
+ return await GaussianDensityTexture(ctx, webgl, position, box, radius, props, texture);
|
|
|
|
+ });
|
|
}
|
|
}
|