src/viewer/Configs.js
import {math} from "./scene/math/math.js";
let maxDataTextureHeight = 1 << 16;
let maxGeometryBatchSize = 5000000
/**
* Manages global configurations for all {@link Viewer}s.
*
* ## Example
*
* In the example below, we'll disable xeokit's double-precision support, which gives a performance and memory boost
* on low-power devices, but also means that we can no longer render double-precision models without jittering.
*
* That's OK if we know that we're not going to view models that are geographically vast, or offset far from the World coordinate origin.
*
* [[Run this example](/examples/index.html#Configs_disableDoublePrecisionAndRAF)]
*
* ````javascript
* import {Configs, Viewer, XKTLoaderPlugin} from "https://cdn.jsdelivr.net/npm/@xeokit/xeokit-sdk/dist/xeokit-sdk.es.min.js";
*
* // Access xeoit-sdk global configs.
* // We typically set configs only before we create any Viewers.
* const configs = new Configs();
*
* // Disable 64-bit precision for extra speed.
* // Only set this config once, before you create any Viewers.
* configs.doublePrecisionEnabled = false;
*
* // Create a Viewer, to which our configs apply
* const viewer = new Viewer({
* canvasId: "myCanvas"
* });
*
* viewer.camera.eye = [-3.933, 2.855, 27.018];
* viewer.camera.look = [4.400, 3.724, 8.899];
* viewer.camera.up = [-0.018, 0.999, 0.039];
*
* const xktLoader = new XKTLoaderPlugin(viewer);
*
* const model = xktLoader.load({
* src: "../assets/models/xkt/v8/ifc/Duplex.ifc.xkt"
* });
* ````
*/
export class Configs {
/**
* Creates a Configs.
*/
constructor() {
}
/**
* Sets whether double precision mode is enabled for Viewers.
*
* When double precision mode is enabled (default), Viewers will accurately render models that contain
* double-precision coordinates, without jittering.
*
* Internally, double precision incurs extra performance and memory overhead, so if we're certain that
* we're not going to render models that rely on double-precision coordinates, then it's a good idea to disable
* it, especially on low-power devices.
*
* This should only be set once, before creating any Viewers.
*
* @returns {Boolean}
*/
set doublePrecisionEnabled(doublePrecision) {
math.setDoublePrecisionEnabled(doublePrecision);
}
/**
* Gets whether double precision mode is enabled for all Viewers.
*
* @returns {Boolean}
*/
get doublePrecisionEnabled() {
return math.getDoublePrecisionEnabled();
}
/**
* Sets the maximum data texture height.
*
* Should be a multiple of 1024. Default is 4096, which is the maximum allowed value.
*/
set maxDataTextureHeight(value) {
value = Math.ceil(value / 1024) * 1024;
if (value > 4096) {
value = 4096;
} else if (value < 1024) {
value = 1024;
}
maxDataTextureHeight = value;
}
/**
* Sets maximum data texture height.
* @returns {*|number}
*/
get maxDataTextureHeight() {
return maxDataTextureHeight;
}
/**
* Sets the maximum batched geometry VBO size.
*
* Default value is 5000000, which is the maximum size.
*
* Minimum size is 100000.
*/
set maxGeometryBatchSize(value) {
if (value < 100000) {
value = 100000;
} else if (value > 5000000) {
value = 5000000;
}
maxGeometryBatchSize = value;
}
/**
* Gets the maximum batched geometry VBO size.
*/
get maxGeometryBatchSize() {
return maxGeometryBatchSize;
}
}