Reference Source

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