{"version":3,"file":"MeshGeometry.mjs","sources":["../../../../src/scene/mesh/shared/MeshGeometry.ts"],"sourcesContent":["import { Buffer } from '../../../rendering/renderers/shared/buffer/Buffer';\nimport { BufferUsage } from '../../../rendering/renderers/shared/buffer/const';\nimport { Geometry } from '../../../rendering/renderers/shared/geometry/Geometry';\nimport { deprecation, v8_0_0 } from '../../../utils/logging/deprecation';\n\nimport type { Topology } from '../../../rendering/renderers/shared/geometry/const';\nimport type { BatchMode } from '../../graphics/shared/GraphicsContext';\n\n/**\n * Options for the mesh geometry.\n * @memberof scene\n */\nexport interface MeshGeometryOptions\n{\n    /** The positions of the mesh. */\n    positions?: Float32Array;\n    /** The UVs of the mesh. */\n    uvs?: Float32Array;\n    /** The indices of the mesh. */\n    indices?: Uint32Array;\n    /** The topology of the mesh. */\n    topology?: Topology;\n    /** Whether to shrink the buffers to fit the data. */\n    shrinkBuffersToFit?: boolean;\n}\n\n/**\n * A geometry used to batch multiple meshes with the same texture.\n * @memberof scene\n */\nexport class MeshGeometry extends Geometry\n{\n    public static defaultOptions: MeshGeometryOptions = {\n        topology: 'triangle-list',\n        shrinkBuffersToFit: false,\n    };\n\n    public batchMode: BatchMode = 'auto';\n\n    /**\n     * @param {scene.MeshGeometryOptions} options - The options of the mesh geometry.\n     */\n    constructor(options: MeshGeometryOptions);\n    /** @deprecated since 8.0.0 */\n    constructor(positions: Float32Array, uvs: Float32Array, indices: Uint32Array);\n    constructor(...args: [MeshGeometryOptions] | [Float32Array, Float32Array, Uint32Array])\n    {\n        let options = args[0] ?? {};\n\n        if (options instanceof Float32Array)\n        {\n            // #if _DEBUG\n            deprecation(v8_0_0, 'use new MeshGeometry({ positions, uvs, indices }) instead');\n            // #endif\n\n            options = {\n                positions: options,\n                uvs: args[1],\n                indices: args[2],\n            };\n        }\n\n        options = { ...MeshGeometry.defaultOptions, ...options };\n\n        const positions = options.positions || new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]);\n        const uvs = options.uvs || new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]);\n        const indices = options.indices || new Uint32Array([0, 1, 2, 0, 2, 3]);\n\n        const shrinkToFit = options.shrinkBuffersToFit;\n\n        const positionBuffer = new Buffer({\n            data: positions,\n            label: 'attribute-mesh-positions',\n            shrinkToFit,\n            usage: BufferUsage.VERTEX | BufferUsage.COPY_DST,\n        });\n\n        const uvBuffer = new Buffer({\n            data: uvs,\n            label: 'attribute-mesh-uvs',\n            shrinkToFit,\n            usage: BufferUsage.VERTEX | BufferUsage.COPY_DST,\n        });\n\n        const indexBuffer = new Buffer({\n            data: indices,\n            label: 'index-mesh-buffer',\n            shrinkToFit,\n            usage: BufferUsage.INDEX | BufferUsage.COPY_DST,\n        });\n\n        super({\n            attributes: {\n                aPosition: {\n                    buffer: positionBuffer,\n                    format: 'float32x2',\n                    stride: 2 * 4,\n                    offset: 0,\n                },\n                aUV: {\n                    buffer: uvBuffer,\n                    format: 'float32x2',\n                    stride: 2 * 4,\n                    offset: 0,\n                },\n            },\n            indexBuffer,\n            topology: options.topology,\n        });\n    }\n\n    /** The positions of the mesh. */\n    get positions(): Float32Array\n    {\n        return this.attributes.aPosition.buffer.data as Float32Array;\n    }\n\n    set positions(value: Float32Array)\n    {\n        this.attributes.aPosition.buffer.data = value;\n    }\n\n    /** The UVs of the mesh. */\n    get uvs(): Float32Array\n    {\n        return this.attributes.aUV.buffer.data as Float32Array;\n    }\n\n    set uvs(value: Float32Array)\n    {\n        this.attributes.aUV.buffer.data = value;\n    }\n\n    /** The indices of the mesh. */\n    get indices(): Uint32Array\n    {\n        return this.indexBuffer.data as Uint32Array;\n    }\n\n    set indices(value: Uint32Array)\n    {\n        this.indexBuffer.data = value;\n    }\n}\n"],"names":[],"mappings":"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"}