import { Extension , ReaderContext , WriterContext } from '@gltf-transform/core' ; import { KHR_MESH_QUANTIZATION } from '../constants' ; const NAME = KHR_MESH_QUANTIZATION ; /**
 * # MeshQuantization
 *
 * [`KHR_mesh_quantization`](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_mesh_quantization/)
 * expands allowed component types for vertex attributes to include 16- and 8-bit storage.
 *
 * Quantization provides a memory/precision tradeoff — depending on the application needs, 16-bit or
 * 8-bit storage can be sufficient for mesh geometry, at 1/2 or 1/4 the size. For example, a 10x10
 * mesh might be written to a uint16  Accessor , with values `0–65536`, normalized to be
 * interpreted as `0–1`. With an additional 10x scale on any node  Node instantiating the
 * quantized  Mesh , the model retains its original scale with a minimal quality loss and
 * up to 50% file size reduction.
 *
 * Defining no  ExtensionProperty types, this  Extension is simply attached to the
 *  Document , and affects the entire Document by allowing more flexible use of
 *  Accessor types for vertex attributes. Without the Extension, the same use of these data
 * types would yield an invalid glTF document, under the stricter core glTF specification.
 *
 * Properties:
 * - N/A
 *
 * ### Example
 *
 * ```typescript
 * import { MeshQuantization } from '@gltf-transform/extensions';
 * import { quantize } from '@gltf-transform/functions';
 *
 * // Create an Extension attached to the Document.
 * const quantizationExtension = document.createExtension(MeshQuantization).setRequired(true);
 *
 * // Use Uint16Array, Uint8Array, Int16Array, and Int8Array in vertex accessors manually,
 * // or apply the provided quantize() function to compute quantized accessors automatically:
 * await document.transform(quantize({
 * 	quantizePosition: 16,
 * 	quantizeNormal: 12,
 * 	quantizeTexcoord: 14
 * }));
 * ```
 *
 * For more documentation about automatic quantization, see the  quantize function.
  export class MeshQuantization extends Extension { public readonly extensionName = NAME ; public static readonly EXTENSION_NAME = NAME ; hidden read ( _ ) { return this ; } hidden write ( _ ) { return this ; } }