@woosh/meep-engine 3.8.0 → 3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bundle-worker-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +3 -2
- package/src/avif/encode_image_source.d.ts +70 -0
- package/src/avif/encode_image_source.d.ts.map +1 -0
- package/src/avif/encode_image_source.js +117 -0
- package/src/avif/encoder_worker.js +15 -126
- package/src/avif/index.d.ts +4 -2
- package/src/avif/index.js +21 -2
- package/src/avif/native/DECISIONS.md +537 -0
- package/src/avif/native/NOTICE.md +61 -0
- package/src/avif/native/api/AvifDecoder.d.ts +67 -0
- package/src/avif/native/api/AvifDecoder.d.ts.map +1 -0
- package/src/avif/native/api/AvifDecoder.js +121 -0
- package/src/avif/native/api/apply_transformations.d.ts +30 -0
- package/src/avif/native/api/apply_transformations.d.ts.map +1 -0
- package/src/avif/native/api/apply_transformations.js +120 -0
- package/src/avif/native/api/avif_to_sampler2d.d.ts +25 -0
- package/src/avif/native/api/avif_to_sampler2d.d.ts.map +1 -0
- package/src/avif/native/api/avif_to_sampler2d.js +42 -0
- package/src/avif/native/api/convert_to_rgba.d.ts +54 -0
- package/src/avif/native/api/convert_to_rgba.d.ts.map +1 -0
- package/src/avif/native/api/convert_to_rgba.js +204 -0
- package/src/avif/native/api/decode_avif.d.ts +24 -0
- package/src/avif/native/api/decode_avif.d.ts.map +1 -0
- package/src/avif/native/api/decode_avif.js +111 -0
- package/src/avif/native/api/decode_image_item.d.ts +18 -0
- package/src/avif/native/api/decode_image_item.d.ts.map +1 -0
- package/src/avif/native/api/decode_image_item.js +234 -0
- package/src/avif/native/api/encode_avif.d.ts +73 -0
- package/src/avif/native/api/encode_avif.d.ts.map +1 -0
- package/src/avif/native/api/encode_avif.js +488 -0
- package/src/avif/native/api/sampler2d_to_avif.d.ts +22 -0
- package/src/avif/native/api/sampler2d_to_avif.d.ts.map +1 -0
- package/src/avif/native/api/sampler2d_to_avif.js +108 -0
- package/src/avif/native/av1/decode/Av1FrameContext.d.ts +286 -0
- package/src/avif/native/av1/decode/Av1FrameContext.d.ts.map +1 -0
- package/src/avif/native/av1/decode/Av1FrameContext.js +622 -0
- package/src/avif/native/av1/decode/block_decoded.d.ts +27 -0
- package/src/avif/native/av1/decode/block_decoded.d.ts.map +1 -0
- package/src/avif/native/av1/decode/block_decoded.js +59 -0
- package/src/avif/native/av1/decode/decode_av1_still.d.ts +22 -0
- package/src/avif/native/av1/decode/decode_av1_still.d.ts.map +1 -0
- package/src/avif/native/av1/decode/decode_av1_still.js +309 -0
- package/src/avif/native/av1/decode/decode_coefficients.d.ts +20 -0
- package/src/avif/native/av1/decode/decode_coefficients.d.ts.map +1 -0
- package/src/avif/native/av1/decode/decode_coefficients.js +259 -0
- package/src/avif/native/av1/decode/decode_palette.d.ts +28 -0
- package/src/avif/native/av1/decode/decode_palette.d.ts.map +1 -0
- package/src/avif/native/av1/decode/decode_palette.js +442 -0
- package/src/avif/native/av1/decode/decode_tile.d.ts +14 -0
- package/src/avif/native/av1/decode/decode_tile.d.ts.map +1 -0
- package/src/avif/native/av1/decode/decode_tile.js +1213 -0
- package/src/avif/native/av1/decode/get_scan.d.ts +16 -0
- package/src/avif/native/av1/decode/get_scan.d.ts.map +1 -0
- package/src/avif/native/av1/decode/get_scan.js +138 -0
- package/src/avif/native/av1/decode/read_lr.d.ts +35 -0
- package/src/avif/native/av1/decode/read_lr.d.ts.map +1 -0
- package/src/avif/native/av1/decode/read_lr.js +277 -0
- package/src/avif/native/av1/decode/read_transform_type.d.ts +19 -0
- package/src/avif/native/av1/decode/read_transform_type.d.ts.map +1 -0
- package/src/avif/native/av1/decode/read_transform_type.js +92 -0
- package/src/avif/native/av1/decode/reconstruct.d.ts +36 -0
- package/src/avif/native/av1/decode/reconstruct.d.ts.map +1 -0
- package/src/avif/native/av1/decode/reconstruct.js +241 -0
- package/src/avif/native/av1/decode/transform_type.d.ts +49 -0
- package/src/avif/native/av1/decode/transform_type.d.ts.map +1 -0
- package/src/avif/native/av1/decode/transform_type.js +137 -0
- package/src/avif/native/av1/encode/Av1BlockSnapshot.d.ts +81 -0
- package/src/avif/native/av1/encode/Av1BlockSnapshot.d.ts.map +1 -0
- package/src/avif/native/av1/encode/Av1BlockSnapshot.js +299 -0
- package/src/avif/native/av1/encode/Av1EncodeContext.d.ts +384 -0
- package/src/avif/native/av1/encode/Av1EncodeContext.d.ts.map +1 -0
- package/src/avif/native/av1/encode/Av1EncodeContext.js +590 -0
- package/src/avif/native/av1/encode/build_headers.d.ts +50 -0
- package/src/avif/native/av1/encode/build_headers.d.ts.map +1 -0
- package/src/avif/native/av1/encode/build_headers.js +359 -0
- package/src/avif/native/av1/encode/choose_chroma_alpha.d.ts +26 -0
- package/src/avif/native/av1/encode/choose_chroma_alpha.d.ts.map +1 -0
- package/src/avif/native/av1/encode/choose_chroma_alpha.js +90 -0
- package/src/avif/native/av1/encode/choose_filters.d.ts +21 -0
- package/src/avif/native/av1/encode/choose_filters.d.ts.map +1 -0
- package/src/avif/native/av1/encode/choose_filters.js +318 -0
- package/src/avif/native/av1/encode/choose_restoration.d.ts +35 -0
- package/src/avif/native/av1/encode/choose_restoration.d.ts.map +1 -0
- package/src/avif/native/av1/encode/choose_restoration.js +616 -0
- package/src/avif/native/av1/encode/decode_effort.d.ts +57 -0
- package/src/avif/native/av1/encode/decode_effort.d.ts.map +1 -0
- package/src/avif/native/av1/encode/decode_effort.js +59 -0
- package/src/avif/native/av1/encode/encode_av1_still.d.ts +17 -0
- package/src/avif/native/av1/encode/encode_av1_still.d.ts.map +1 -0
- package/src/avif/native/av1/encode/encode_av1_still.js +194 -0
- package/src/avif/native/av1/encode/encode_effort.d.ts +56 -0
- package/src/avif/native/av1/encode/encode_effort.d.ts.map +1 -0
- package/src/avif/native/av1/encode/encode_effort.js +97 -0
- package/src/avif/native/av1/encode/encode_tile.d.ts +26 -0
- package/src/avif/native/av1/encode/encode_tile.d.ts.map +1 -0
- package/src/avif/native/av1/encode/encode_tile.js +2331 -0
- package/src/avif/native/av1/encode/quantise.d.ts +51 -0
- package/src/avif/native/av1/encode/quantise.d.ts.map +1 -0
- package/src/avif/native/av1/encode/quantise.js +212 -0
- package/src/avif/native/av1/encode/write_coefficients.d.ts +42 -0
- package/src/avif/native/av1/encode/write_coefficients.d.ts.map +1 -0
- package/src/avif/native/av1/encode/write_coefficients.js +367 -0
- package/src/avif/native/av1/encode/write_lr.d.ts +33 -0
- package/src/avif/native/av1/encode/write_lr.d.ts.map +1 -0
- package/src/avif/native/av1/encode/write_lr.js +174 -0
- package/src/avif/native/av1/encode/write_transform_type.d.ts +21 -0
- package/src/avif/native/av1/encode/write_transform_type.d.ts.map +1 -0
- package/src/avif/native/av1/encode/write_transform_type.js +70 -0
- package/src/avif/native/av1/entropy/CdfContext.d.ts +167 -0
- package/src/avif/native/av1/entropy/CdfContext.d.ts.map +1 -0
- package/src/avif/native/av1/entropy/CdfContext.js +433 -0
- package/src/avif/native/av1/entropy/SymbolReader.d.ts +103 -0
- package/src/avif/native/av1/entropy/SymbolReader.d.ts.map +1 -0
- package/src/avif/native/av1/entropy/SymbolReader.js +317 -0
- package/src/avif/native/av1/entropy/SymbolWriter.d.ts +107 -0
- package/src/avif/native/av1/entropy/SymbolWriter.d.ts.map +1 -0
- package/src/avif/native/av1/entropy/SymbolWriter.js +352 -0
- package/src/avif/native/av1/entropy/coefficient_context.d.ts +71 -0
- package/src/avif/native/av1/entropy/coefficient_context.d.ts.map +1 -0
- package/src/avif/native/av1/entropy/coefficient_context.js +325 -0
- package/src/avif/native/av1/entropy/partition_cdf.d.ts +54 -0
- package/src/avif/native/av1/entropy/partition_cdf.d.ts.map +1 -0
- package/src/avif/native/av1/entropy/partition_cdf.js +98 -0
- package/src/avif/native/av1/entropy/symbol_cost.d.ts +37 -0
- package/src/avif/native/av1/entropy/symbol_cost.d.ts.map +1 -0
- package/src/avif/native/av1/entropy/symbol_cost.js +76 -0
- package/src/avif/native/av1/filter/cdef.d.ts +15 -0
- package/src/avif/native/av1/filter/cdef.d.ts.map +1 -0
- package/src/avif/native/av1/filter/cdef.js +313 -0
- package/src/avif/native/av1/filter/loop_filter.d.ts +14 -0
- package/src/avif/native/av1/filter/loop_filter.d.ts.map +1 -0
- package/src/avif/native/av1/filter/loop_filter.js +377 -0
- package/src/avif/native/av1/filter/loop_restoration.d.ts +42 -0
- package/src/avif/native/av1/filter/loop_restoration.d.ts.map +1 -0
- package/src/avif/native/av1/filter/loop_restoration.js +451 -0
- package/src/avif/native/av1/filter/superres.d.ts +18 -0
- package/src/avif/native/av1/filter/superres.d.ts.map +1 -0
- package/src/avif/native/av1/filter/superres.js +86 -0
- package/src/avif/native/av1/grain/FilmGrainState.d.ts +62 -0
- package/src/avif/native/av1/grain/FilmGrainState.d.ts.map +1 -0
- package/src/avif/native/av1/grain/FilmGrainState.js +87 -0
- package/src/avif/native/av1/grain/film_grain.d.ts +16 -0
- package/src/avif/native/av1/grain/film_grain.d.ts.map +1 -0
- package/src/avif/native/av1/grain/film_grain.js +623 -0
- package/src/avif/native/av1/obu/FrameHeader.d.ts +248 -0
- package/src/avif/native/av1/obu/FrameHeader.d.ts.map +1 -0
- package/src/avif/native/av1/obu/FrameHeader.js +381 -0
- package/src/avif/native/av1/obu/ObuHeader.d.ts +53 -0
- package/src/avif/native/av1/obu/ObuHeader.d.ts.map +1 -0
- package/src/avif/native/av1/obu/ObuHeader.js +62 -0
- package/src/avif/native/av1/obu/SequenceHeader.d.ts +157 -0
- package/src/avif/native/av1/obu/SequenceHeader.d.ts.map +1 -0
- package/src/avif/native/av1/obu/SequenceHeader.js +225 -0
- package/src/avif/native/av1/obu/for_each_obu.d.ts +24 -0
- package/src/avif/native/av1/obu/for_each_obu.d.ts.map +1 -0
- package/src/avif/native/av1/obu/for_each_obu.js +50 -0
- package/src/avif/native/av1/obu/parse_frame_header.d.ts +18 -0
- package/src/avif/native/av1/obu/parse_frame_header.d.ts.map +1 -0
- package/src/avif/native/av1/obu/parse_frame_header.js +841 -0
- package/src/avif/native/av1/obu/parse_obu_header.d.ts +23 -0
- package/src/avif/native/av1/obu/parse_obu_header.d.ts.map +1 -0
- package/src/avif/native/av1/obu/parse_obu_header.js +69 -0
- package/src/avif/native/av1/obu/parse_sequence_header.d.ts +17 -0
- package/src/avif/native/av1/obu/parse_sequence_header.d.ts.map +1 -0
- package/src/avif/native/av1/obu/parse_sequence_header.js +263 -0
- package/src/avif/native/av1/obu/write_frame_header.d.ts +16 -0
- package/src/avif/native/av1/obu/write_frame_header.d.ts.map +1 -0
- package/src/avif/native/av1/obu/write_frame_header.js +579 -0
- package/src/avif/native/av1/obu/write_sequence_header.d.ts +17 -0
- package/src/avif/native/av1/obu/write_sequence_header.d.ts.map +1 -0
- package/src/avif/native/av1/obu/write_sequence_header.js +189 -0
- package/src/avif/native/av1/predict/IntraPredictionState.d.ts +49 -0
- package/src/avif/native/av1/predict/IntraPredictionState.d.ts.map +1 -0
- package/src/avif/native/av1/predict/IntraPredictionState.js +58 -0
- package/src/avif/native/av1/predict/intra_filter_type.d.ts +17 -0
- package/src/avif/native/av1/predict/intra_filter_type.d.ts.map +1 -0
- package/src/avif/native/av1/predict/intra_filter_type.js +79 -0
- package/src/avif/native/av1/predict/predict_chroma_from_luma.d.ts +50 -0
- package/src/avif/native/av1/predict/predict_chroma_from_luma.d.ts.map +1 -0
- package/src/avif/native/av1/predict/predict_chroma_from_luma.js +153 -0
- package/src/avif/native/av1/predict/predict_intra.d.ts +42 -0
- package/src/avif/native/av1/predict/predict_intra.d.ts.map +1 -0
- package/src/avif/native/av1/predict/predict_intra.js +803 -0
- package/src/avif/native/av1/predict/predict_palette.d.ts +23 -0
- package/src/avif/native/av1/predict/predict_palette.d.ts.map +1 -0
- package/src/avif/native/av1/predict/predict_palette.js +36 -0
- package/src/avif/native/av1/tables/av1_symbols.d.ts +411 -0
- package/src/avif/native/av1/tables/av1_symbols.d.ts.map +1 -0
- package/src/avif/native/av1/tables/av1_symbols.js +419 -0
- package/src/avif/native/av1/tables/block_tables.d.ts +181 -0
- package/src/avif/native/av1/tables/block_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/block_tables.js +270 -0
- package/src/avif/native/av1/tables/cdf_tables.d.ts +961 -0
- package/src/avif/native/av1/tables/cdf_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/cdf_tables.js +1893 -0
- package/src/avif/native/av1/tables/coefficient_tables.d.ts +41 -0
- package/src/avif/native/av1/tables/coefficient_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/coefficient_tables.js +82 -0
- package/src/avif/native/av1/tables/derived_block_tables.d.ts +15 -0
- package/src/avif/native/av1/tables/derived_block_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/derived_block_tables.js +23 -0
- package/src/avif/native/av1/tables/filter_tables.d.ts +171 -0
- package/src/avif/native/av1/tables/filter_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/filter_tables.js +313 -0
- package/src/avif/native/av1/tables/grain_tables.d.ts +11 -0
- package/src/avif/native/av1/tables/grain_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/grain_tables.js +190 -0
- package/src/avif/native/av1/tables/prediction_tables.d.ts +141 -0
- package/src/avif/native/av1/tables/prediction_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/prediction_tables.js +223 -0
- package/src/avif/native/av1/tables/quantizer_matrix_tables.d.ts +21 -0
- package/src/avif/native/av1/tables/quantizer_matrix_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/quantizer_matrix_tables.js +38 -0
- package/src/avif/native/av1/tables/quantizer_tables.d.ts +21 -0
- package/src/avif/native/av1/tables/quantizer_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/quantizer_tables.js +160 -0
- package/src/avif/native/av1/tables/scan_tables.d.ts +321 -0
- package/src/avif/native/av1/tables/scan_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/scan_tables.js +727 -0
- package/src/avif/native/av1/tables/segmentation_tables.d.ts +31 -0
- package/src/avif/native/av1/tables/segmentation_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/segmentation_tables.js +48 -0
- package/src/avif/native/av1/tables/transform_tables.d.ts +91 -0
- package/src/avif/native/av1/tables/transform_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/transform_tables.js +140 -0
- package/src/avif/native/av1/tables/unpack_table.d.ts +33 -0
- package/src/avif/native/av1/tables/unpack_table.d.ts.map +1 -0
- package/src/avif/native/av1/tables/unpack_table.js +73 -0
- package/src/avif/native/av1/transform/forward_transform_2d.d.ts +61 -0
- package/src/avif/native/av1/transform/forward_transform_2d.d.ts.map +1 -0
- package/src/avif/native/av1/transform/forward_transform_2d.js +574 -0
- package/src/avif/native/av1/transform/inverse_transform_1d.d.ts +76 -0
- package/src/avif/native/av1/transform/inverse_transform_1d.d.ts.map +1 -0
- package/src/avif/native/av1/transform/inverse_transform_1d.js +590 -0
- package/src/avif/native/av1/transform/inverse_transform_2d.d.ts +46 -0
- package/src/avif/native/av1/transform/inverse_transform_2d.d.ts.map +1 -0
- package/src/avif/native/av1/transform/inverse_transform_2d.js +180 -0
- package/src/avif/native/av1/util/ceil_log2.d.ts +13 -0
- package/src/avif/native/av1/util/ceil_log2.d.ts.map +1 -0
- package/src/avif/native/av1/util/ceil_log2.js +18 -0
- package/src/avif/native/av1/util/floor_log2.d.ts +20 -0
- package/src/avif/native/av1/util/floor_log2.d.ts.map +1 -0
- package/src/avif/native/av1/util/floor_log2.js +20 -0
- package/src/avif/native/av1/util/round2.d.ts +22 -0
- package/src/avif/native/av1/util/round2.d.ts.map +1 -0
- package/src/avif/native/av1/util/round2.js +27 -0
- package/src/avif/native/av1/util/round2_signed.d.ts +14 -0
- package/src/avif/native/av1/util/round2_signed.d.ts.map +1 -0
- package/src/avif/native/av1/util/round2_signed.js +17 -0
- package/src/avif/native/av1/util/tile_log2.d.ts +16 -0
- package/src/avif/native/av1/util/tile_log2.d.ts.map +1 -0
- package/src/avif/native/av1/util/tile_log2.js +23 -0
- package/src/avif/native/bitstream/BitReader.d.ts +174 -0
- package/src/avif/native/bitstream/BitReader.d.ts.map +1 -0
- package/src/avif/native/bitstream/BitReader.js +391 -0
- package/src/avif/native/bitstream/BitWriter.d.ts +122 -0
- package/src/avif/native/bitstream/BitWriter.d.ts.map +1 -0
- package/src/avif/native/bitstream/BitWriter.js +351 -0
- package/src/avif/native/color/ColourTransform.d.ts +62 -0
- package/src/avif/native/color/ColourTransform.d.ts.map +1 -0
- package/src/avif/native/color/ColourTransform.js +189 -0
- package/src/avif/native/color/YuvImage.d.ts +51 -0
- package/src/avif/native/color/YuvImage.d.ts.map +1 -0
- package/src/avif/native/color/YuvImage.js +66 -0
- package/src/avif/native/color/clamp_sample.d.ts +18 -0
- package/src/avif/native/color/clamp_sample.d.ts.map +1 -0
- package/src/avif/native/color/clamp_sample.js +25 -0
- package/src/avif/native/color/linear_to_transfer.d.ts +24 -0
- package/src/avif/native/color/linear_to_transfer.d.ts.map +1 -0
- package/src/avif/native/color/linear_to_transfer.js +126 -0
- package/src/avif/native/color/primaries.d.ts +20 -0
- package/src/avif/native/color/primaries.d.ts.map +1 -0
- package/src/avif/native/color/primaries.js +94 -0
- package/src/avif/native/color/rgb_row_to_ycbcr.d.ts +20 -0
- package/src/avif/native/color/rgb_row_to_ycbcr.d.ts.map +1 -0
- package/src/avif/native/color/rgb_row_to_ycbcr.js +78 -0
- package/src/avif/native/color/transfer_to_linear.d.ts +49 -0
- package/src/avif/native/color/transfer_to_linear.d.ts.map +1 -0
- package/src/avif/native/color/transfer_to_linear.js +171 -0
- package/src/avif/native/color/upsample_chroma_row.d.ts +35 -0
- package/src/avif/native/color/upsample_chroma_row.d.ts.map +1 -0
- package/src/avif/native/color/upsample_chroma_row.js +89 -0
- package/src/avif/native/color/ycbcr_row_to_rgb.d.ts +23 -0
- package/src/avif/native/color/ycbcr_row_to_rgb.d.ts.map +1 -0
- package/src/avif/native/color/ycbcr_row_to_rgb.js +78 -0
- package/src/avif/native/heif/AvifFile.d.ts +112 -0
- package/src/avif/native/heif/AvifFile.d.ts.map +1 -0
- package/src/avif/native/heif/AvifFile.js +142 -0
- package/src/avif/native/heif/ItemProperty.d.ts +244 -0
- package/src/avif/native/heif/ItemProperty.d.ts.map +1 -0
- package/src/avif/native/heif/ItemProperty.js +321 -0
- package/src/avif/native/heif/find_item_property.d.ts +17 -0
- package/src/avif/native/heif/find_item_property.d.ts.map +1 -0
- package/src/avif/native/heif/find_item_property.js +28 -0
- package/src/avif/native/heif/find_item_references.d.ts +16 -0
- package/src/avif/native/heif/find_item_references.d.ts.map +1 -0
- package/src/avif/native/heif/find_item_references.js +29 -0
- package/src/avif/native/heif/find_items_referencing.d.ts +17 -0
- package/src/avif/native/heif/find_items_referencing.d.ts.map +1 -0
- package/src/avif/native/heif/find_items_referencing.js +36 -0
- package/src/avif/native/heif/parse_avif_file.d.ts +15 -0
- package/src/avif/native/heif/parse_avif_file.d.ts.map +1 -0
- package/src/avif/native/heif/parse_avif_file.js +383 -0
- package/src/avif/native/heif/parse_image_grid.d.ts +18 -0
- package/src/avif/native/heif/parse_image_grid.d.ts.map +1 -0
- package/src/avif/native/heif/parse_image_grid.js +48 -0
- package/src/avif/native/heif/parse_item_property.d.ts +18 -0
- package/src/avif/native/heif/parse_item_property.d.ts.map +1 -0
- package/src/avif/native/heif/parse_item_property.js +243 -0
- package/src/avif/native/heif/read_item_data.d.ts +22 -0
- package/src/avif/native/heif/read_item_data.d.ts.map +1 -0
- package/src/avif/native/heif/read_item_data.js +97 -0
- package/src/avif/native/heif/write_avif_file.d.ts +50 -0
- package/src/avif/native/heif/write_avif_file.d.ts.map +1 -0
- package/src/avif/native/heif/write_avif_file.js +348 -0
- package/src/avif/native/heif/write_item_property.d.ts +16 -0
- package/src/avif/native/heif/write_item_property.d.ts.map +1 -0
- package/src/avif/native/heif/write_item_property.js +182 -0
- package/src/avif/native/index.d.ts +14 -0
- package/src/avif/native/index.d.ts.map +1 -0
- package/src/avif/native/index.js +56 -0
- package/src/avif/native/isobmff/BoxHeader.d.ts +50 -0
- package/src/avif/native/isobmff/BoxHeader.d.ts.map +1 -0
- package/src/avif/native/isobmff/BoxHeader.js +57 -0
- package/src/avif/native/isobmff/BoxWriter.d.ts +118 -0
- package/src/avif/native/isobmff/BoxWriter.d.ts.map +1 -0
- package/src/avif/native/isobmff/BoxWriter.js +264 -0
- package/src/avif/native/isobmff/ByteCursor.d.ts +125 -0
- package/src/avif/native/isobmff/ByteCursor.d.ts.map +1 -0
- package/src/avif/native/isobmff/ByteCursor.js +298 -0
- package/src/avif/native/isobmff/for_each_box.d.ts +23 -0
- package/src/avif/native/isobmff/for_each_box.d.ts.map +1 -0
- package/src/avif/native/isobmff/for_each_box.js +39 -0
- package/src/avif/native/isobmff/read_box_header.d.ts +22 -0
- package/src/avif/native/isobmff/read_box_header.d.ts.map +1 -0
- package/src/avif/native/isobmff/read_box_header.js +59 -0
- package/src/avif/native/isobmff/read_full_box_header.d.ts +26 -0
- package/src/avif/native/isobmff/read_full_box_header.d.ts.map +1 -0
- package/src/avif/native/isobmff/read_full_box_header.js +33 -0
- package/src/avif/threaded_image_encoder.d.ts +7 -2
- package/src/avif/threaded_image_encoder.d.ts.map +1 -1
- package/src/avif/threaded_image_encoder.js +107 -21
- package/src/core/binary/BinaryBuffer.d.ts +40 -0
- package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
- package/src/core/binary/BinaryBuffer.js +100 -0
- package/src/core/binary/hash/crc32.d.ts +16 -0
- package/src/core/binary/hash/crc32.d.ts.map +1 -0
- package/src/core/binary/hash/crc32.js +96 -0
- package/src/core/binary/utf8/utf8_decode.d.ts +21 -0
- package/src/core/binary/utf8/utf8_decode.d.ts.map +1 -0
- package/src/core/binary/utf8/utf8_decode.js +43 -0
- package/src/core/binary/utf8/utf8_encode_into.d.ts +20 -0
- package/src/core/binary/utf8/utf8_encode_into.d.ts.map +1 -0
- package/src/core/binary/utf8/utf8_encode_into.js +48 -0
- package/src/core/binary/utf8/utf8_encoded_length.d.ts +14 -0
- package/src/core/binary/utf8/utf8_encoded_length.d.ts.map +1 -0
- package/src/core/binary/utf8/utf8_encoded_length.js +36 -0
- package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +417 -0
- package/src/core/color/COLOR_REVIEW_2026_08_28.md +779 -0
- package/src/core/color/Color.d.ts +128 -20
- package/src/core/color/Color.d.ts.map +1 -1
- package/src/core/color/Color.js +959 -866
- package/src/core/color/PQ/PQ_constants.d.ts +10 -0
- package/src/core/color/PQ/PQ_constants.d.ts.map +1 -1
- package/src/core/color/PQ/PQ_constants.js +10 -0
- package/src/core/color/PQ/linear_to_PQ.d.ts.map +1 -1
- package/src/core/color/PQ/linear_to_PQ.js +6 -0
- package/src/core/color/REC709_PRIMARIES.d.ts +50 -0
- package/src/core/color/REC709_PRIMARIES.d.ts.map +1 -0
- package/src/core/color/REC709_PRIMARIES.js +53 -0
- package/src/core/color/construct/color_from_hex.d.ts +21 -0
- package/src/core/color/construct/color_from_hex.d.ts.map +1 -0
- package/src/core/color/construct/color_from_hex.js +33 -0
- package/src/core/color/construct/color_from_temperature.d.ts +22 -0
- package/src/core/color/construct/color_from_temperature.d.ts.map +1 -0
- package/src/core/color/construct/color_from_temperature.js +33 -0
- package/src/core/color/construct/color_from_uint24.d.ts +19 -0
- package/src/core/color/construct/color_from_uint24.d.ts.map +1 -0
- package/src/core/color/construct/color_from_uint24.js +26 -0
- package/src/core/color/construct/color_from_uint32.d.ts +20 -0
- package/src/core/color/construct/color_from_uint32.d.ts.map +1 -0
- package/src/core/color/construct/color_from_uint32.js +39 -0
- package/src/core/color/construct/color_gray.d.ts +17 -0
- package/src/core/color/construct/color_gray.d.ts.map +1 -0
- package/src/core/color/construct/color_gray.js +22 -0
- package/src/core/color/hex/hex2rgb.d.ts +1 -11
- package/src/core/color/hex/hex2rgb.d.ts.map +1 -1
- package/src/core/color/hex/hex2rgb.js +7 -24
- package/src/core/color/hex/hex_to_rgb.d.ts +18 -0
- package/src/core/color/hex/hex_to_rgb.d.ts.map +1 -0
- package/src/core/color/hex/hex_to_rgb.js +62 -0
- package/src/core/color/hex/rgb2hex.d.ts +1 -8
- package/src/core/color/hex/rgb2hex.d.ts.map +1 -1
- package/src/core/color/hex/rgb2hex.js +7 -13
- package/src/core/color/hex/rgb_to_hex.d.ts +9 -0
- package/src/core/color/hex/rgb_to_hex.d.ts.map +1 -0
- package/src/core/color/hex/rgb_to_hex.js +13 -0
- package/src/core/color/hex/rgba_to_hex.d.ts +19 -0
- package/src/core/color/hex/rgba_to_hex.d.ts.map +1 -0
- package/src/core/color/hex/rgba_to_hex.js +23 -0
- package/src/core/color/hsv/hsv2rgb.d.ts +1 -12
- package/src/core/color/hsv/hsv2rgb.d.ts.map +1 -1
- package/src/core/color/hsv/hsv2rgb.js +8 -21
- package/src/core/color/hsv/hsv2rgb_float.d.ts +1 -12
- package/src/core/color/hsv/hsv2rgb_float.d.ts.map +1 -1
- package/src/core/color/hsv/hsv2rgb_float.js +8 -56
- package/src/core/color/hsv/hsv_to_rgb.d.ts +13 -0
- package/src/core/color/hsv/hsv_to_rgb.d.ts.map +1 -0
- package/src/core/color/hsv/hsv_to_rgb.js +39 -0
- package/src/core/color/hsv/hsv_to_rgb_uint8.d.ts +13 -0
- package/src/core/color/hsv/hsv_to_rgb_uint8.d.ts.map +1 -0
- package/src/core/color/hsv/hsv_to_rgb_uint8.js +21 -0
- package/src/core/color/hsv/hue_to_rgb_sextant.d.ts +24 -0
- package/src/core/color/hsv/hue_to_rgb_sextant.d.ts.map +1 -0
- package/src/core/color/hsv/hue_to_rgb_sextant.js +67 -0
- package/src/core/color/hsv/rgb2hsv.d.ts +1 -12
- package/src/core/color/hsv/rgb2hsv.d.ts.map +1 -1
- package/src/core/color/hsv/rgb2hsv.js +7 -42
- package/src/core/color/hsv/rgb_to_hsv.d.ts +13 -0
- package/src/core/color/hsv/rgb_to_hsv.d.ts.map +1 -0
- package/src/core/color/hsv/rgb_to_hsv.js +42 -0
- package/src/core/color/hunt/hpe_to_xyz.d.ts +2 -0
- package/src/core/color/hunt/hpe_to_xyz.d.ts.map +1 -0
- package/src/core/color/hunt/hpe_to_xyz.js +4 -0
- package/src/core/color/hunt/xyz_to_hpe.d.ts +1 -6
- package/src/core/color/hunt/xyz_to_hpe.d.ts.map +1 -1
- package/src/core/color/hunt/xyz_to_hpe.js +12 -15
- package/src/core/color/illuminant/D65_spd_tabulated.d.ts.map +1 -1
- package/src/core/color/illuminant/D65_spd_tabulated.js +107 -104
- package/src/core/color/int2rgb.d.ts +1 -10
- package/src/core/color/int2rgb.d.ts.map +1 -1
- package/src/core/color/int2rgb.js +7 -12
- package/src/core/color/int_to_rgb.d.ts +21 -0
- package/src/core/color/int_to_rgb.d.ts.map +1 -0
- package/src/core/color/int_to_rgb.js +33 -0
- package/src/core/color/kelvin/kelvin_to_rgb.d.ts.map +1 -1
- package/src/core/color/kelvin/kelvin_to_rgb.js +22 -2
- package/src/core/color/kelvin/rgb_to_kelvin.d.ts +22 -2
- package/src/core/color/kelvin/rgb_to_kelvin.d.ts.map +1 -1
- package/src/core/color/kelvin/rgb_to_kelvin.js +22 -2
- package/src/core/color/lab/lab_to_xyz.d.ts +20 -0
- package/src/core/color/lab/lab_to_xyz.d.ts.map +1 -0
- package/src/core/color/lab/lab_to_xyz.js +69 -0
- package/src/core/color/oklab/gamut_clip_adaptive_l0.d.ts +34 -0
- package/src/core/color/oklab/gamut_clip_adaptive_l0.d.ts.map +1 -0
- package/src/core/color/oklab/gamut_clip_adaptive_l0.js +46 -0
- package/src/core/color/oklab/gamut_clip_at_l0.d.ts +33 -0
- package/src/core/color/oklab/gamut_clip_at_l0.d.ts.map +1 -0
- package/src/core/color/oklab/gamut_clip_at_l0.js +84 -0
- package/src/core/color/oklab/gamut_clip_preserve_chroma.d.ts +24 -0
- package/src/core/color/oklab/gamut_clip_preserve_chroma.d.ts.map +1 -0
- package/src/core/color/oklab/gamut_clip_preserve_chroma.js +37 -0
- package/src/core/color/oklab/gamut_clip_project_to_lcusp.d.ts +23 -0
- package/src/core/color/oklab/gamut_clip_project_to_lcusp.d.ts.map +1 -0
- package/src/core/color/oklab/gamut_clip_project_to_lcusp.js +46 -0
- package/src/core/color/oklab/linear_srgb_to_okhsl.d.ts +19 -0
- package/src/core/color/oklab/linear_srgb_to_okhsl.d.ts.map +1 -0
- package/src/core/color/oklab/linear_srgb_to_okhsl.js +93 -0
- package/src/core/color/oklab/linear_srgb_to_okhsv.d.ts +12 -4
- package/src/core/color/oklab/linear_srgb_to_okhsv.d.ts.map +1 -1
- package/src/core/color/oklab/linear_srgb_to_okhsv.js +108 -84
- package/src/core/color/oklab/linear_srgb_to_oklab.d.ts +13 -4
- package/src/core/color/oklab/linear_srgb_to_oklab.d.ts.map +1 -1
- package/src/core/color/oklab/linear_srgb_to_oklab.js +28 -19
- package/src/core/color/oklab/okhsl_chroma_bounds.d.ts +51 -0
- package/src/core/color/oklab/okhsl_chroma_bounds.d.ts.map +1 -0
- package/src/core/color/oklab/okhsl_chroma_bounds.js +128 -0
- package/src/core/color/oklab/okhsl_to_linear_srgb.d.ts +19 -0
- package/src/core/color/oklab/okhsl_to_linear_srgb.d.ts.map +1 -0
- package/src/core/color/oklab/okhsl_to_linear_srgb.js +85 -0
- package/src/core/color/oklab/oklab_to_oklch.d.ts +24 -0
- package/src/core/color/oklab/oklab_to_oklch.d.ts.map +1 -0
- package/src/core/color/oklab/oklab_to_oklch.js +35 -0
- package/src/core/color/oklab/oklch_to_oklab.d.ts +18 -0
- package/src/core/color/oklab/oklch_to_oklab.d.ts.map +1 -0
- package/src/core/color/oklab/oklch_to_oklab.js +26 -0
- package/src/core/color/oklab/toe.d.ts +12 -0
- package/src/core/color/oklab/toe.d.ts.map +1 -1
- package/src/core/color/oklab/toe.js +34 -22
- package/src/core/color/operations/color_add.d.ts +21 -0
- package/src/core/color/operations/color_add.d.ts.map +1 -0
- package/src/core/color/operations/color_add.js +23 -0
- package/src/core/color/operations/color_add_scaled.d.ts +20 -0
- package/src/core/color/operations/color_add_scaled.d.ts.map +1 -0
- package/src/core/color/operations/color_add_scaled.js +30 -0
- package/src/core/color/operations/color_clamp.d.ts +22 -0
- package/src/core/color/operations/color_clamp.d.ts.map +1 -0
- package/src/core/color/operations/color_clamp.js +25 -0
- package/src/core/color/operations/color_darken.d.ts +2 -1
- package/src/core/color/operations/color_darken.d.ts.map +1 -1
- package/src/core/color/operations/color_darken.js +25 -24
- package/src/core/color/operations/color_desaturate.d.ts +2 -1
- package/src/core/color/operations/color_desaturate.d.ts.map +1 -1
- package/src/core/color/operations/color_desaturate.js +25 -24
- package/src/core/color/operations/color_get_hsl.d.ts +18 -0
- package/src/core/color/operations/color_get_hsl.d.ts.map +1 -0
- package/src/core/color/operations/color_get_hsl.js +60 -0
- package/src/core/color/operations/color_is_in_gamut.d.ts +20 -0
- package/src/core/color/operations/color_is_in_gamut.d.ts.map +1 -0
- package/src/core/color/operations/color_is_in_gamut.js +30 -0
- package/src/core/color/operations/color_lerp.d.ts +12 -3
- package/src/core/color/operations/color_lerp.d.ts.map +1 -1
- package/src/core/color/operations/color_lerp.js +55 -46
- package/src/core/color/operations/color_lighten.d.ts +9 -5
- package/src/core/color/operations/color_lighten.d.ts.map +1 -1
- package/src/core/color/operations/color_lighten.js +29 -24
- package/src/core/color/operations/color_mix_okhsv_channel.d.ts +24 -0
- package/src/core/color/operations/color_mix_okhsv_channel.d.ts.map +1 -0
- package/src/core/color/operations/color_mix_okhsv_channel.js +48 -0
- package/src/core/color/operations/color_multiply_rgb.d.ts +21 -0
- package/src/core/color/operations/color_multiply_rgb.d.ts.map +1 -0
- package/src/core/color/operations/color_multiply_rgb.js +26 -0
- package/src/core/color/operations/color_saturate.d.ts +9 -5
- package/src/core/color/operations/color_saturate.d.ts.map +1 -1
- package/src/core/color/operations/color_saturate.js +29 -24
- package/src/core/color/operations/color_scale_okhsv_channel.d.ts +1 -1
- package/src/core/color/operations/color_scale_okhsv_channel.d.ts.map +1 -1
- package/src/core/color/operations/color_scale_okhsv_channel.js +58 -45
- package/src/core/color/operations/color_srgb_apply.d.ts +28 -0
- package/src/core/color/operations/color_srgb_apply.d.ts.map +1 -0
- package/src/core/color/operations/color_srgb_apply.js +40 -0
- package/src/core/color/operations/color_sub.d.ts +16 -0
- package/src/core/color/operations/color_sub.d.ts.map +1 -0
- package/src/core/color/operations/color_sub.js +18 -0
- package/src/core/color/parse_color.d.ts +10 -1
- package/src/core/color/parse_color.d.ts.map +1 -1
- package/src/core/color/parse_color.js +100 -84
- package/src/core/color/parse_color_normalized.d.ts +24 -0
- package/src/core/color/parse_color_normalized.d.ts.map +1 -0
- package/src/core/color/parse_color_normalized.js +38 -0
- package/src/core/color/rgb2uint24.d.ts +1 -8
- package/src/core/color/rgb2uint24.d.ts.map +1 -1
- package/src/core/color/rgb2uint24.js +7 -20
- package/src/core/color/rgb2uint32.d.ts +1 -9
- package/src/core/color/rgb2uint32.d.ts.map +1 -1
- package/src/core/color/rgb2uint32.js +7 -18
- package/src/core/color/rgb_to_luminance.d.ts +14 -5
- package/src/core/color/rgb_to_luminance.d.ts.map +1 -1
- package/src/core/color/rgb_to_luminance.js +24 -13
- package/src/core/color/rgb_to_uint24.d.ts +9 -0
- package/src/core/color/rgb_to_uint24.d.ts.map +1 -0
- package/src/core/color/rgb_to_uint24.js +20 -0
- package/src/core/color/rgb_to_uint32.d.ts +10 -0
- package/src/core/color/rgb_to_uint32.d.ts.map +1 -0
- package/src/core/color/rgb_to_uint32.js +21 -0
- package/src/core/color/sRGB/linear_to_sRGB.d.ts +7 -0
- package/src/core/color/sRGB/linear_to_sRGB.d.ts.map +1 -1
- package/src/core/color/sRGB/linear_to_sRGB.js +39 -32
- package/src/core/color/xyz/hpe_to_xyz.d.ts +24 -0
- package/src/core/color/xyz/hpe_to_xyz.d.ts.map +1 -0
- package/src/core/color/xyz/hpe_to_xyz.js +39 -0
- package/src/core/color/xyz/rgb_to_xyz.d.ts +17 -2
- package/src/core/color/xyz/rgb_to_xyz.d.ts.map +1 -1
- package/src/core/color/xyz/rgb_to_xyz.js +44 -18
- package/src/core/color/xyz/xyz_cmf_tabulated.d.ts.map +1 -1
- package/src/core/color/xyz/xyz_cmf_tabulated.js +217 -211
- package/src/core/color/xyz/xyz_cmf_wyman.d.ts +4 -0
- package/src/core/color/xyz/xyz_cmf_wyman.d.ts.map +1 -1
- package/src/core/color/xyz/xyz_cmf_wyman.js +74 -65
- package/src/core/color/xyz/xyz_to_hpe.d.ts +18 -0
- package/src/core/color/xyz/xyz_to_hpe.d.ts.map +1 -0
- package/src/core/color/xyz/xyz_to_hpe.js +33 -0
- package/src/core/color/xyz/xyz_to_rgb.d.ts +17 -2
- package/src/core/color/xyz/xyz_to_rgb.d.ts.map +1 -1
- package/src/core/color/xyz/xyz_to_rgb.js +39 -16
- package/src/core/color/ycxcz/xyz_to_ycxcz.d.ts +7 -2
- package/src/core/color/ycxcz/xyz_to_ycxcz.d.ts.map +1 -1
- package/src/core/color/ycxcz/xyz_to_ycxcz.js +33 -28
- package/src/core/events/signal/Signal.js +820 -820
- package/src/core/math/clamp_index.d.ts +18 -0
- package/src/core/math/clamp_index.d.ts.map +1 -0
- package/src/core/math/clamp_index.js +23 -0
- package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +803 -0
- package/src/engine/asset/loaders/image/jpeg/JpegFrame.d.ts +5 -3
- package/src/engine/asset/loaders/image/jpeg/JpegFrame.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/jpeg/JpegFrame.js +5 -3
- package/src/engine/asset/loaders/image/jpeg/JpegFrameComponent.d.ts +2 -1
- package/src/engine/asset/loaders/image/jpeg/JpegFrameComponent.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/jpeg/JpegFrameComponent.js +2 -1
- package/src/engine/asset/loaders/image/jpeg/JpegImage.d.ts +17 -0
- package/src/engine/asset/loaders/image/jpeg/JpegImage.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/jpeg/JpegImage.js +197 -157
- package/src/engine/asset/loaders/image/jpeg/idct8x8_float.d.ts +0 -1
- package/src/engine/asset/loaders/image/jpeg/idct8x8_float.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/jpeg/idct8x8_float.js +0 -1
- package/src/engine/asset/loaders/image/jpeg/jpeg_component_row.d.ts +28 -0
- package/src/engine/asset/loaders/image/jpeg/jpeg_component_row.d.ts.map +1 -0
- package/src/engine/asset/loaders/image/jpeg/jpeg_component_row.js +31 -0
- package/src/engine/asset/loaders/image/png/PNG.d.ts +3 -18
- package/src/engine/asset/loaders/image/png/PNG.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/png/PNG.js +3 -139
- package/src/engine/asset/loaders/image/png/PNGReader.d.ts +16 -16
- package/src/engine/asset/loaders/image/png/PNGReader.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/png/PNGReader.js +143 -160
- package/src/engine/asset/loaders/image/png/chunk/png_chunk_decode_iTXt.js +3 -3
- package/src/engine/asset/loaders/image/png/chunk/png_chunk_decode_zTXt.js +3 -3
- package/src/engine/asset/loaders/image/png/crc32.d.ts +1 -15
- package/src/engine/asset/loaders/image/png/crc32.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/png/crc32.js +5 -89
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterNone.d.ts +12 -10
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterNone.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterNone.js +20 -45
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterSub.d.ts +2 -1
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterSub.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterSub.js +2 -0
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterUp.d.ts +2 -1
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterUp.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterUp.js +2 -0
- package/src/engine/asset/loaders/image/png/filter/png_unfilter.d.ts +22 -0
- package/src/engine/asset/loaders/image/png/filter/png_unfilter.d.ts.map +1 -0
- package/src/engine/asset/loaders/image/png/filter/png_unfilter.js +68 -0
- package/src/engine/asset/loaders/image/png/png_inflate.d.ts +20 -0
- package/src/engine/asset/loaders/image/png/png_inflate.d.ts.map +1 -0
- package/src/engine/asset/loaders/image/png/png_inflate.js +85 -0
- package/src/engine/asset/loaders/image/png/png_unpack_samples.d.ts +22 -0
- package/src/engine/asset/loaders/image/png/png_unpack_samples.d.ts.map +1 -0
- package/src/engine/asset/loaders/image/png/png_unpack_samples.js +38 -0
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +135 -132
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +16 -3
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1157 -1149
- package/src/engine/graphics/render/frame_graph/FrameGraph.js +900 -900
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +72 -81
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +86 -77
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +451 -0
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +625 -0
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_blend.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_blend.js +5 -4
- package/src/shade/renderer/scene/serialization/decode_image_source_hdr.d.ts +14 -3
- package/src/shade/renderer/scene/serialization/decode_image_source_hdr.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/decode_image_source_hdr.js +50 -51
- package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/deserialize_scene.js +531 -521
- package/src/shade/renderer/scene/serialization/write_image_source.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/write_image_source.js +6 -4
- package/src/shade/renderer/shader/chunk/color/chunk_rgb_to_luminance.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/chunk_rgb_to_luminance.js +34 -32
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.d.ts +31 -0
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.js +62 -31
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_inverse_eotf_st2084.d.ts +10 -0
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_inverse_eotf_st2084.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_inverse_eotf_st2084.js +32 -22
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferOETF.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferOETF.js +22 -21
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts +6 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.js +110 -104
- package/src/shade/renderer/shader/chunk/color/xyz/chunk_rgb_to_xyz.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/xyz/chunk_rgb_to_xyz.js +23 -21
- package/src/shade/renderer/shader/chunk/math/chunk_magnitude_floor.d.ts +9 -0
- package/src/shade/renderer/shader/chunk/math/chunk_magnitude_floor.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/chunk_magnitude_floor.js +16 -0
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_magnitude_floor.d.ts +10 -0
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_magnitude_floor.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_magnitude_floor.js +17 -0
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_solve_cubic_blinn.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_solve_cubic_blinn.js +7 -1
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_square_root.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_square_root.js +9 -3
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_cubic.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_cubic.js +13 -7
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_cubic_blinn_smallest.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_cubic_blinn_smallest.js +13 -4
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_quadratic.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_quadratic.js +20 -13
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_quartic_neumark.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_quartic_neumark.js +8 -4
- package/src/shade/renderer/shader/chunk/mboit/NOTES.md +35 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_2_trigonometric_moments.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_2_trigonometric_moments.js +18 -5
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_3_trigonometric_moments.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_3_trigonometric_moments.js +21 -8
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_4_trigonometric_moments.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_4_trigonometric_moments.js +25 -12
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_generate_trigonometric_moments_4.d.ts +6 -2
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_generate_trigonometric_moments_4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_generate_trigonometric_moments_4.js +42 -35
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_compute_transmittance_from_4_power_moments.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_compute_transmittance_from_4_power_moments.js +18 -5
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_compute_transmittance_from_6_power_moments.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_compute_transmittance_from_6_power_moments.js +24 -9
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_compute_transmittance_from_8_power_moments.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_compute_transmittance_from_8_power_moments.js +29 -13
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_generate_power_moments_4.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_generate_power_moments_4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_generate_power_moments_4.js +38 -48
- package/src/view/elements/ColorPickerView.js +296 -296
- package/src/avif/codec/dec/Readme.md +0 -14
- package/src/avif/codec/dec/avif_dec.cpp +0 -234
- package/src/avif/codec/dec/avif_dec.d.ts +0 -3
- package/src/avif/codec/dec/avif_dec.d.ts.map +0 -1
- package/src/avif/codec/dec/avif_dec.js +0 -16
- package/src/avif/codec/dec/avif_dec.wasm +0 -0
- package/src/avif/codec/enc/README.md +0 -37
- package/src/avif/codec/enc/avif_enc.cpp +0 -216
- package/src/avif/codec/enc/avif_enc.d.ts +0 -3
- package/src/avif/codec/enc/avif_enc.d.ts.map +0 -1
- package/src/avif/codec/enc/avif_enc.js +0 -6144
- package/src/avif/codec/enc/avif_enc.wasm +0 -0
- package/src/avif/codec/enc/avif_enc_mt.d.ts +0 -3
- package/src/avif/codec/enc/avif_enc_mt.d.ts.map +0 -1
- package/src/avif/codec/enc/avif_enc_mt.js +0 -6811
- package/src/avif/codec/enc/avif_enc_mt.wasm +0 -0
- package/src/avif/codec/enc/avif_enc_mt.worker.d.mts +0 -2
- package/src/avif/codec/enc/avif_enc_mt.worker.d.mts.map +0 -1
- package/src/avif/codec/enc/avif_enc_mt.worker.d.ts +0 -11
- package/src/avif/codec/enc/avif_enc_mt.worker.d.ts.map +0 -1
- package/src/avif/codec/enc/avif_enc_mt.worker.js +0 -171
- package/src/avif/codec/enc/avif_enc_mt.worker.mjs +0 -1
- package/src/avif/decode.d.ts +0 -3
- package/src/avif/decode.d.ts.map +0 -1
- package/src/avif/decode.js +0 -42
- package/src/avif/encode.d.ts +0 -3
- package/src/avif/encode.d.ts.map +0 -1
- package/src/avif/encode.js +0 -75
- package/src/avif/meta.d.ts +0 -24
- package/src/avif/meta.d.ts.map +0 -1
- package/src/avif/meta.js +0 -23
- package/src/avif/tsconfig.tsbuildinfo +0 -1
- package/src/avif/utils.d.ts +0 -17
- package/src/avif/utils.d.ts.map +0 -1
- package/src/avif/utils.js +0 -31
- package/src/engine/asset/loaders/image/jpeg/idct8x8_fixed.d.ts +0 -23
- package/src/engine/asset/loaders/image/jpeg/idct8x8_fixed.d.ts.map +0 -1
- package/src/engine/asset/loaders/image/jpeg/idct8x8_fixed.js +0 -214
- package/src/engine/asset/loaders/image/png/inflate.d.ts +0 -7
- package/src/engine/asset/loaders/image/png/inflate.d.ts.map +0 -1
- package/src/engine/asset/loaders/image/png/inflate.js +0 -20
|
@@ -1,20 +1,29 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* @
|
|
6
|
-
*
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Linear sRGB to OkLab.
|
|
3
|
+
*
|
|
4
|
+
* The coefficients are published to 10 significant digits, which is what bounds the round trip with
|
|
5
|
+
* {@link oklab_to_linear_srgb} at ~7e-8 rather than at machine precision, and why a neutral lands on a chroma
|
|
6
|
+
* of ~1e-7 instead of 0.
|
|
7
|
+
*
|
|
8
|
+
* @param {number[]} output L, a, b
|
|
9
|
+
* @param {number} r linear sRGB
|
|
10
|
+
* @param {number} g linear sRGB
|
|
11
|
+
* @param {number} b linear sRGB
|
|
12
|
+
*
|
|
13
|
+
* @see oklab_to_linear_srgb
|
|
14
|
+
* @author Björn Ottosson
|
|
15
|
+
* @see https://bottosson.github.io/posts/oklab/
|
|
16
|
+
*/
|
|
17
|
+
export function linear_srgb_to_oklab(output, r, g, b) {
|
|
18
|
+
const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;
|
|
19
|
+
const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;
|
|
20
|
+
const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;
|
|
21
|
+
|
|
22
|
+
const l_ = Math.cbrt(l);
|
|
23
|
+
const m_ = Math.cbrt(m);
|
|
24
|
+
const s_ = Math.cbrt(s);
|
|
25
|
+
|
|
26
|
+
output[0] = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_;
|
|
27
|
+
output[1] = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_;
|
|
28
|
+
output[2] = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_;
|
|
20
29
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polynomial fits for the chroma of the "mid" curve at a given hue.
|
|
3
|
+
*
|
|
4
|
+
* Ottosson's coefficients, kept in Horner form as he wrote them. They approximate the shape of the sRGB gamut
|
|
5
|
+
* well enough that OkHSL's saturation stays smooth across hue, which is the whole reason OkHSL exists rather
|
|
6
|
+
* than just normalising chroma by the cusp.
|
|
7
|
+
*
|
|
8
|
+
* @param {number[]|ArrayLike<number>} output S, T
|
|
9
|
+
* @param {number} a_ normalised OkLab a
|
|
10
|
+
* @param {number} b_ normalised OkLab b
|
|
11
|
+
* @returns {number[]|ArrayLike<number>} output
|
|
12
|
+
*/
|
|
13
|
+
export function okhsl_st_mid(output: number[] | ArrayLike<number>, a_: number, b_: number): number[] | ArrayLike<number>;
|
|
14
|
+
/**
|
|
15
|
+
* The three chroma anchors OkHSL's saturation curve is built from, at a given lightness and hue.
|
|
16
|
+
*
|
|
17
|
+
* OkHSL differs from OkHSV in what saturation 1 means: here it is the gamut boundary *at this lightness*, so
|
|
18
|
+
* a very light or very dark colour has little chroma available and `s = 1` gives that little, rather than
|
|
19
|
+
* OkHSV's behaviour of trading lightness for it. That is what makes OkHSL the better basis for lighten and
|
|
20
|
+
* darken — moving `l` does not silently change how saturated the colour looks.
|
|
21
|
+
*
|
|
22
|
+
* Three anchors rather than two because a straight line from 0 to the boundary is visibly wrong in the middle;
|
|
23
|
+
* `C_mid` pins saturation 0.8 to the perceptually sensible chroma so the curve bends the right way.
|
|
24
|
+
*
|
|
25
|
+
* @param {number[]|ArrayLike<number>} output C_0, C_mid, C_max; see {@link OKHSL_C_0} and friends
|
|
26
|
+
* @param {number} L OkLab lightness
|
|
27
|
+
* @param {number} a_ normalised OkLab a
|
|
28
|
+
* @param {number} b_ normalised OkLab b
|
|
29
|
+
* @returns {number[]|ArrayLike<number>} output
|
|
30
|
+
*
|
|
31
|
+
* @see https://bottosson.github.io/posts/colorpicker/
|
|
32
|
+
* @author Alex Goldring
|
|
33
|
+
* @copyright Company Named Limited (c) 2026
|
|
34
|
+
*/
|
|
35
|
+
export function okhsl_chroma_bounds(output: number[] | ArrayLike<number>, L: number, a_: number, b_: number): number[] | ArrayLike<number>;
|
|
36
|
+
/**
|
|
37
|
+
* Index of the chroma at which saturation stops behaving linearly, in {@link okhsl_chroma_bounds}' output.
|
|
38
|
+
* @type {number}
|
|
39
|
+
*/
|
|
40
|
+
export const OKHSL_C_0: number;
|
|
41
|
+
/**
|
|
42
|
+
* Index of the chroma that saturation 0.8 maps to.
|
|
43
|
+
* @type {number}
|
|
44
|
+
*/
|
|
45
|
+
export const OKHSL_C_MID: number;
|
|
46
|
+
/**
|
|
47
|
+
* Index of the chroma at the gamut boundary, which saturation 1 maps to.
|
|
48
|
+
* @type {number}
|
|
49
|
+
*/
|
|
50
|
+
export const OKHSL_C_MAX: number;
|
|
51
|
+
//# sourceMappingURL=okhsl_chroma_bounds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"okhsl_chroma_bounds.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/oklab/okhsl_chroma_bounds.js"],"names":[],"mappings":"AA0BA;;;;;;;;;;;GAWG;AACH,qCALW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,MAC1B,MAAM,MACN,MAAM,GACJ,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,CA6BtC;AAOD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,4CAVW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,KAC1B,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,CAwCtC;AAvHD;;;GAGG;AACH,wBAFU,MAAM,CAEW;AAE3B;;;GAGG;AACH,0BAFU,MAAM,CAEa;AAE7B;;;GAGG;AACH,0BAFU,MAAM,CAEa"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { find_cusp } from "./find_cusp.js";
|
|
2
|
+
import { find_gamut_intersection } from "./find_gamut_intersection.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @type {number[]}
|
|
6
|
+
*/
|
|
7
|
+
const cusp = [0, 0];
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Index of the chroma at which saturation stops behaving linearly, in {@link okhsl_chroma_bounds}' output.
|
|
11
|
+
* @type {number}
|
|
12
|
+
*/
|
|
13
|
+
export const OKHSL_C_0 = 0;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Index of the chroma that saturation 0.8 maps to.
|
|
17
|
+
* @type {number}
|
|
18
|
+
*/
|
|
19
|
+
export const OKHSL_C_MID = 1;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Index of the chroma at the gamut boundary, which saturation 1 maps to.
|
|
23
|
+
* @type {number}
|
|
24
|
+
*/
|
|
25
|
+
export const OKHSL_C_MAX = 2;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Polynomial fits for the chroma of the "mid" curve at a given hue.
|
|
29
|
+
*
|
|
30
|
+
* Ottosson's coefficients, kept in Horner form as he wrote them. They approximate the shape of the sRGB gamut
|
|
31
|
+
* well enough that OkHSL's saturation stays smooth across hue, which is the whole reason OkHSL exists rather
|
|
32
|
+
* than just normalising chroma by the cusp.
|
|
33
|
+
*
|
|
34
|
+
* @param {number[]|ArrayLike<number>} output S, T
|
|
35
|
+
* @param {number} a_ normalised OkLab a
|
|
36
|
+
* @param {number} b_ normalised OkLab b
|
|
37
|
+
* @returns {number[]|ArrayLike<number>} output
|
|
38
|
+
*/
|
|
39
|
+
export function okhsl_st_mid(output, a_, b_) {
|
|
40
|
+
|
|
41
|
+
output[0] = 0.11516993 + 1 / (
|
|
42
|
+
+7.44778970
|
|
43
|
+
+ 4.15901240 * b_
|
|
44
|
+
+ a_ * (-2.19557347
|
|
45
|
+
+ 1.75198401 * b_
|
|
46
|
+
+ a_ * (-2.13704948
|
|
47
|
+
- 10.02301043 * b_
|
|
48
|
+
+ a_ * (-4.24894561
|
|
49
|
+
+ 5.38770819 * b_ + 4.69891013 * a_
|
|
50
|
+
)))
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
output[1] = 0.11239642 + 1 / (
|
|
54
|
+
+1.61320320
|
|
55
|
+
- 0.68124379 * b_
|
|
56
|
+
+ a_ * (+0.40370612
|
|
57
|
+
+ 0.90148123 * b_
|
|
58
|
+
+ a_ * (-0.27087943
|
|
59
|
+
+ 0.61223990 * b_
|
|
60
|
+
+ a_ * (+0.00299215
|
|
61
|
+
- 0.45399568 * b_ - 0.14661872 * a_
|
|
62
|
+
)))
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
return output;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @type {number[]}
|
|
70
|
+
*/
|
|
71
|
+
const st_mid = [0, 0];
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The three chroma anchors OkHSL's saturation curve is built from, at a given lightness and hue.
|
|
75
|
+
*
|
|
76
|
+
* OkHSL differs from OkHSV in what saturation 1 means: here it is the gamut boundary *at this lightness*, so
|
|
77
|
+
* a very light or very dark colour has little chroma available and `s = 1` gives that little, rather than
|
|
78
|
+
* OkHSV's behaviour of trading lightness for it. That is what makes OkHSL the better basis for lighten and
|
|
79
|
+
* darken — moving `l` does not silently change how saturated the colour looks.
|
|
80
|
+
*
|
|
81
|
+
* Three anchors rather than two because a straight line from 0 to the boundary is visibly wrong in the middle;
|
|
82
|
+
* `C_mid` pins saturation 0.8 to the perceptually sensible chroma so the curve bends the right way.
|
|
83
|
+
*
|
|
84
|
+
* @param {number[]|ArrayLike<number>} output C_0, C_mid, C_max; see {@link OKHSL_C_0} and friends
|
|
85
|
+
* @param {number} L OkLab lightness
|
|
86
|
+
* @param {number} a_ normalised OkLab a
|
|
87
|
+
* @param {number} b_ normalised OkLab b
|
|
88
|
+
* @returns {number[]|ArrayLike<number>} output
|
|
89
|
+
*
|
|
90
|
+
* @see https://bottosson.github.io/posts/colorpicker/
|
|
91
|
+
* @author Alex Goldring
|
|
92
|
+
* @copyright Company Named Limited (c) 2026
|
|
93
|
+
*/
|
|
94
|
+
export function okhsl_chroma_bounds(output, L, a_, b_) {
|
|
95
|
+
|
|
96
|
+
find_cusp(cusp, a_, b_);
|
|
97
|
+
|
|
98
|
+
const C_max = find_gamut_intersection(a_, b_, L, 1, L);
|
|
99
|
+
|
|
100
|
+
const S_max = cusp[1] / cusp[0];
|
|
101
|
+
const T_max = cusp[1] / (1 - cusp[0]);
|
|
102
|
+
|
|
103
|
+
// compensates for the gamut's curved top, which the straight-line cusp model over-estimates
|
|
104
|
+
const k = C_max / Math.min(L * S_max, (1 - L) * T_max);
|
|
105
|
+
|
|
106
|
+
okhsl_st_mid(st_mid, a_, b_);
|
|
107
|
+
|
|
108
|
+
const mid_a = L * st_mid[0];
|
|
109
|
+
const mid_b = (1 - L) * st_mid[1];
|
|
110
|
+
|
|
111
|
+
// a soft minimum rather than min(), so that C_mid is smooth where the two bounds cross and a gradient
|
|
112
|
+
// through that lightness does not kink
|
|
113
|
+
const C_mid = 0.9 * k * Math.sqrt(Math.sqrt(1 / (
|
|
114
|
+
1 / (mid_a * mid_a * mid_a * mid_a) + 1 / (mid_b * mid_b * mid_b * mid_b)
|
|
115
|
+
)));
|
|
116
|
+
|
|
117
|
+
// C_0's shape is hue-independent, so these stand in for the average S and T
|
|
118
|
+
const zero_a = L * 0.4;
|
|
119
|
+
const zero_b = (1 - L) * 0.8;
|
|
120
|
+
|
|
121
|
+
const C_0 = Math.sqrt(1 / (1 / (zero_a * zero_a) + 1 / (zero_b * zero_b)));
|
|
122
|
+
|
|
123
|
+
output[OKHSL_C_0] = C_0;
|
|
124
|
+
output[OKHSL_C_MID] = C_mid;
|
|
125
|
+
output[OKHSL_C_MAX] = C_max;
|
|
126
|
+
|
|
127
|
+
return output;
|
|
128
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OkHSL to linear sRGB.
|
|
3
|
+
*
|
|
4
|
+
* The counterpart to {@link linear_srgb_to_okhsl}, and the sibling of {@link okhsv_to_linear_srgb} that
|
|
5
|
+
* Ottosson defines alongside it but which was never ported. Prefer it over OkHSV when adjusting lightness:
|
|
6
|
+
* OkHSL's `l` is perceptual lightness with saturation held fixed, so lightening does not wash a colour out.
|
|
7
|
+
*
|
|
8
|
+
* @param {number[]|ArrayLike<number>} output linear sRGB
|
|
9
|
+
* @param {number} h hue in turns
|
|
10
|
+
* @param {number} s saturation, `[0, 1]`
|
|
11
|
+
* @param {number} l lightness, `[0, 1]`
|
|
12
|
+
* @returns {number[]|ArrayLike<number>} output
|
|
13
|
+
*
|
|
14
|
+
* @see https://bottosson.github.io/posts/colorpicker/
|
|
15
|
+
* @author Alex Goldring
|
|
16
|
+
* @copyright Company Named Limited (c) 2026
|
|
17
|
+
*/
|
|
18
|
+
export function okhsl_to_linear_srgb(output: number[] | ArrayLike<number>, h: number, s: number, l: number): number[] | ArrayLike<number>;
|
|
19
|
+
//# sourceMappingURL=okhsl_to_linear_srgb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"okhsl_to_linear_srgb.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/oklab/okhsl_to_linear_srgb.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;GAgBG;AACH,6CAVW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,KAC1B,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,CA0DtC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { OKHSL_C_0, OKHSL_C_MAX, OKHSL_C_MID, okhsl_chroma_bounds } from "./okhsl_chroma_bounds.js";
|
|
2
|
+
import { oklab_to_linear_srgb } from "./oklab_to_linear_srgb.js";
|
|
3
|
+
import { toe_inv } from "./toe.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @type {number[]}
|
|
7
|
+
*/
|
|
8
|
+
const bounds = [0, 0, 0];
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Saturation at which the curve switches from the C_0 segment to the C_max one, pinned to C_mid.
|
|
12
|
+
* @type {number}
|
|
13
|
+
*/
|
|
14
|
+
const MID = 0.8;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* OkHSL to linear sRGB.
|
|
18
|
+
*
|
|
19
|
+
* The counterpart to {@link linear_srgb_to_okhsl}, and the sibling of {@link okhsv_to_linear_srgb} that
|
|
20
|
+
* Ottosson defines alongside it but which was never ported. Prefer it over OkHSV when adjusting lightness:
|
|
21
|
+
* OkHSL's `l` is perceptual lightness with saturation held fixed, so lightening does not wash a colour out.
|
|
22
|
+
*
|
|
23
|
+
* @param {number[]|ArrayLike<number>} output linear sRGB
|
|
24
|
+
* @param {number} h hue in turns
|
|
25
|
+
* @param {number} s saturation, `[0, 1]`
|
|
26
|
+
* @param {number} l lightness, `[0, 1]`
|
|
27
|
+
* @returns {number[]|ArrayLike<number>} output
|
|
28
|
+
*
|
|
29
|
+
* @see https://bottosson.github.io/posts/colorpicker/
|
|
30
|
+
* @author Alex Goldring
|
|
31
|
+
* @copyright Company Named Limited (c) 2026
|
|
32
|
+
*/
|
|
33
|
+
export function okhsl_to_linear_srgb(output, h, s, l) {
|
|
34
|
+
|
|
35
|
+
if (l >= 1) {
|
|
36
|
+
// the chroma bounds divide by (1 - L), so the endpoints are handled directly rather than by epsilon
|
|
37
|
+
output[0] = 1;
|
|
38
|
+
output[1] = 1;
|
|
39
|
+
output[2] = 1;
|
|
40
|
+
|
|
41
|
+
return output;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (l <= 0) {
|
|
45
|
+
output[0] = 0;
|
|
46
|
+
output[1] = 0;
|
|
47
|
+
output[2] = 0;
|
|
48
|
+
|
|
49
|
+
return output;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const a_ = Math.cos(2 * Math.PI * h);
|
|
53
|
+
const b_ = Math.sin(2 * Math.PI * h);
|
|
54
|
+
|
|
55
|
+
const L = toe_inv(l);
|
|
56
|
+
|
|
57
|
+
okhsl_chroma_bounds(bounds, L, a_, b_);
|
|
58
|
+
|
|
59
|
+
const C_0 = bounds[OKHSL_C_0];
|
|
60
|
+
const C_mid = bounds[OKHSL_C_MID];
|
|
61
|
+
const C_max = bounds[OKHSL_C_MAX];
|
|
62
|
+
|
|
63
|
+
// Two rational segments joined at s = MID. They are chosen so that chroma leaves 0 with slope C_0,
|
|
64
|
+
// passes through C_mid at MID, and reaches C_max at 1 — a straight line through those three points would
|
|
65
|
+
// be visibly wrong in the middle of the range.
|
|
66
|
+
let C;
|
|
67
|
+
|
|
68
|
+
if (s < MID) {
|
|
69
|
+
const t = s / MID;
|
|
70
|
+
const k_1 = MID * C_0;
|
|
71
|
+
const k_2 = 1 - k_1 / C_mid;
|
|
72
|
+
|
|
73
|
+
C = t * k_1 / (1 - k_2 * t);
|
|
74
|
+
} else {
|
|
75
|
+
const t = (s - MID) / (1 - MID);
|
|
76
|
+
const k_1 = (1 - MID) * C_mid * C_mid / (MID * MID * C_0);
|
|
77
|
+
const k_2 = 1 - k_1 / (C_max - C_mid);
|
|
78
|
+
|
|
79
|
+
C = C_mid + t * k_1 / (1 - k_2 * t);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
oklab_to_linear_srgb(output, L, C * a_, C * b_);
|
|
83
|
+
|
|
84
|
+
return output;
|
|
85
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OkLab to OkLCh: the same space in polar coordinates.
|
|
3
|
+
*
|
|
4
|
+
* OkLCh is what CSS Color 4 exposes, and it is the natural place to rotate a hue or scale a saturation,
|
|
5
|
+
* because those are one coordinate each here and a coupled pair in OkLab.
|
|
6
|
+
*
|
|
7
|
+
* `h` is in turns, `[0, 1)`, matching the rest of this package rather than CSS's degrees — every other hue in
|
|
8
|
+
* `core/color` is a turn, and one unit convention beats being locally familiar. Multiply by 360 for CSS.
|
|
9
|
+
*
|
|
10
|
+
* A neutral has no meaningful hue; it gets 0 rather than whatever `atan2` makes of two values that are
|
|
11
|
+
* rounding noise.
|
|
12
|
+
*
|
|
13
|
+
* @param {number[]|ArrayLike<number>} output L, C, h
|
|
14
|
+
* @param {number} L
|
|
15
|
+
* @param {number} a
|
|
16
|
+
* @param {number} b
|
|
17
|
+
* @returns {number[]|ArrayLike<number>} output
|
|
18
|
+
*
|
|
19
|
+
* @see oklch_to_oklab
|
|
20
|
+
* @author Alex Goldring
|
|
21
|
+
* @copyright Company Named Limited (c) 2026
|
|
22
|
+
*/
|
|
23
|
+
export function oklab_to_oklch(output: number[] | ArrayLike<number>, L: number, a: number, b: number): number[] | ArrayLike<number>;
|
|
24
|
+
//# sourceMappingURL=oklab_to_oklch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oklab_to_oklch.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/oklab/oklab_to_oklch.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,uCAVW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,KAC1B,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,CAkBtC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OkLab to OkLCh: the same space in polar coordinates.
|
|
3
|
+
*
|
|
4
|
+
* OkLCh is what CSS Color 4 exposes, and it is the natural place to rotate a hue or scale a saturation,
|
|
5
|
+
* because those are one coordinate each here and a coupled pair in OkLab.
|
|
6
|
+
*
|
|
7
|
+
* `h` is in turns, `[0, 1)`, matching the rest of this package rather than CSS's degrees — every other hue in
|
|
8
|
+
* `core/color` is a turn, and one unit convention beats being locally familiar. Multiply by 360 for CSS.
|
|
9
|
+
*
|
|
10
|
+
* A neutral has no meaningful hue; it gets 0 rather than whatever `atan2` makes of two values that are
|
|
11
|
+
* rounding noise.
|
|
12
|
+
*
|
|
13
|
+
* @param {number[]|ArrayLike<number>} output L, C, h
|
|
14
|
+
* @param {number} L
|
|
15
|
+
* @param {number} a
|
|
16
|
+
* @param {number} b
|
|
17
|
+
* @returns {number[]|ArrayLike<number>} output
|
|
18
|
+
*
|
|
19
|
+
* @see oklch_to_oklab
|
|
20
|
+
* @author Alex Goldring
|
|
21
|
+
* @copyright Company Named Limited (c) 2026
|
|
22
|
+
*/
|
|
23
|
+
export function oklab_to_oklch(output, L, a, b) {
|
|
24
|
+
|
|
25
|
+
const C = Math.sqrt(a * a + b * b);
|
|
26
|
+
|
|
27
|
+
// 1e-6 against a full chroma of ~0.32; sized to catch the ~1e-7 a neutral lands on
|
|
28
|
+
const h = C < 1e-6 ? 0 : (Math.atan2(b, a) / (2 * Math.PI) + 1) % 1;
|
|
29
|
+
|
|
30
|
+
output[0] = L;
|
|
31
|
+
output[1] = C;
|
|
32
|
+
output[2] = h;
|
|
33
|
+
|
|
34
|
+
return output;
|
|
35
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OkLCh back to OkLab. The inverse of {@link oklab_to_oklch}.
|
|
3
|
+
*
|
|
4
|
+
* `h` is in turns, `[0, 1)`. Values outside the range wrap, since sine and cosine are periodic anyway — there
|
|
5
|
+
* is no need to normalise first.
|
|
6
|
+
*
|
|
7
|
+
* @param {number[]|ArrayLike<number>} output L, a, b
|
|
8
|
+
* @param {number} L
|
|
9
|
+
* @param {number} C
|
|
10
|
+
* @param {number} h hue in turns
|
|
11
|
+
* @returns {number[]|ArrayLike<number>} output
|
|
12
|
+
*
|
|
13
|
+
* @see oklab_to_oklch
|
|
14
|
+
* @author Alex Goldring
|
|
15
|
+
* @copyright Company Named Limited (c) 2026
|
|
16
|
+
*/
|
|
17
|
+
export function oklch_to_oklab(output: number[] | ArrayLike<number>, L: number, C: number, h: number): number[] | ArrayLike<number>;
|
|
18
|
+
//# sourceMappingURL=oklch_to_oklab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oklch_to_oklab.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/oklab/oklch_to_oklab.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,uCAVW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,KAC1B,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,CAetC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OkLCh back to OkLab. The inverse of {@link oklab_to_oklch}.
|
|
3
|
+
*
|
|
4
|
+
* `h` is in turns, `[0, 1)`. Values outside the range wrap, since sine and cosine are periodic anyway — there
|
|
5
|
+
* is no need to normalise first.
|
|
6
|
+
*
|
|
7
|
+
* @param {number[]|ArrayLike<number>} output L, a, b
|
|
8
|
+
* @param {number} L
|
|
9
|
+
* @param {number} C
|
|
10
|
+
* @param {number} h hue in turns
|
|
11
|
+
* @returns {number[]|ArrayLike<number>} output
|
|
12
|
+
*
|
|
13
|
+
* @see oklab_to_oklch
|
|
14
|
+
* @author Alex Goldring
|
|
15
|
+
* @copyright Company Named Limited (c) 2026
|
|
16
|
+
*/
|
|
17
|
+
export function oklch_to_oklab(output, L, C, h) {
|
|
18
|
+
|
|
19
|
+
const angle = h * 2 * Math.PI;
|
|
20
|
+
|
|
21
|
+
output[0] = L;
|
|
22
|
+
output[1] = C * Math.cos(angle);
|
|
23
|
+
output[2] = C * Math.sin(angle);
|
|
24
|
+
|
|
25
|
+
return output;
|
|
26
|
+
}
|
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* toe function for L_r
|
|
3
|
+
*
|
|
4
|
+
* Maps OkLab's own lightness onto one that tracks CIE L*. OkLab runs brighter than L* in the shadows, and this
|
|
5
|
+
* pulls those values down; {@link toe_inv} is the direction that lifts them back. Both endpoints are fixed.
|
|
6
|
+
*
|
|
3
7
|
* @param {number} x
|
|
4
8
|
* @return {number}
|
|
9
|
+
*
|
|
10
|
+
* @author Björn Ottosson
|
|
11
|
+
* @see https://bottosson.github.io/posts/colorpicker/
|
|
5
12
|
*/
|
|
6
13
|
export function toe(x: number): number;
|
|
7
14
|
/**
|
|
8
15
|
* inverse toe function for L_r
|
|
16
|
+
*
|
|
9
17
|
* @param {number} x
|
|
10
18
|
* @return {number}
|
|
19
|
+
*
|
|
20
|
+
* @see toe
|
|
21
|
+
* @author Björn Ottosson
|
|
22
|
+
* @see https://bottosson.github.io/posts/colorpicker/
|
|
11
23
|
*/
|
|
12
24
|
export function toe_inv(x: number): number;
|
|
13
25
|
//# sourceMappingURL=toe.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toe.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/oklab/toe.js"],"names":[],"mappings":"AAKA
|
|
1
|
+
{"version":3,"file":"toe.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/oklab/toe.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;GAWG;AACH,uBANW,MAAM,GACL,MAAM,CAOjB;AAED;;;;;;;;;GASG;AACH,2BAPW,MAAM,GACL,MAAM,CAQjB"}
|
|
@@ -1,22 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
const k_1 = 0.206;
|
|
3
|
-
const k_2 = 0.03;
|
|
4
|
-
const k_3 = (1. + k_1) / (1. + k_2);
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* toe function for L_r
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
1
|
+
|
|
2
|
+
const k_1 = 0.206;
|
|
3
|
+
const k_2 = 0.03;
|
|
4
|
+
const k_3 = (1. + k_1) / (1. + k_2);
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* toe function for L_r
|
|
8
|
+
*
|
|
9
|
+
* Maps OkLab's own lightness onto one that tracks CIE L*. OkLab runs brighter than L* in the shadows, and this
|
|
10
|
+
* pulls those values down; {@link toe_inv} is the direction that lifts them back. Both endpoints are fixed.
|
|
11
|
+
*
|
|
12
|
+
* @param {number} x
|
|
13
|
+
* @return {number}
|
|
14
|
+
*
|
|
15
|
+
* @author Björn Ottosson
|
|
16
|
+
* @see https://bottosson.github.io/posts/colorpicker/
|
|
17
|
+
*/
|
|
18
|
+
export function toe(x){
|
|
19
|
+
return 0.5 * (k_3 * x - k_1 + Math.sqrt((k_3 * x - k_1) * (k_3 * x - k_1) + 4 * k_2 * k_3 * x));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* inverse toe function for L_r
|
|
24
|
+
*
|
|
25
|
+
* @param {number} x
|
|
26
|
+
* @return {number}
|
|
27
|
+
*
|
|
28
|
+
* @see toe
|
|
29
|
+
* @author Björn Ottosson
|
|
30
|
+
* @see https://bottosson.github.io/posts/colorpicker/
|
|
31
|
+
*/
|
|
32
|
+
export function toe_inv(x){
|
|
33
|
+
return (x * x + k_1 * x) / (k_3 * (x + k_2));
|
|
34
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Add two colours channel by channel.
|
|
3
|
+
*
|
|
4
|
+
* **All four channels**, alpha included, the same 4-vector convention {@link Color#multiply} follows. The rule
|
|
5
|
+
* across this directory: an unsuffixed name touches all four, and an `_rgb` suffix touches the three colour
|
|
6
|
+
* channels and copies alpha from the first input — see {@link color_multiply_rgb}.
|
|
7
|
+
*
|
|
8
|
+
* Nothing is clamped. Adding light legitimately goes above 1, and `Color` tolerates that; clamp with
|
|
9
|
+
* {@link color_clamp} when the result has to be displayable.
|
|
10
|
+
*
|
|
11
|
+
* @param {Color} a
|
|
12
|
+
* @param {Color} b
|
|
13
|
+
* @param {Color} [output] may be `a` or `b`
|
|
14
|
+
* @returns {Color} `output`
|
|
15
|
+
*
|
|
16
|
+
* @author Alex Goldring
|
|
17
|
+
* @copyright Company Named Limited (c) 2026
|
|
18
|
+
*/
|
|
19
|
+
export function color_add(a: Color, b: Color, output?: Color): Color;
|
|
20
|
+
import { Color } from "../Color.js";
|
|
21
|
+
//# sourceMappingURL=color_add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color_add.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/operations/color_add.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,6BARW,KAAK,KACL,KAAK,WACL,KAAK,GACH,KAAK,CAOjB;sBAtBqB,aAAa"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Color } from "../Color.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Add two colours channel by channel.
|
|
5
|
+
*
|
|
6
|
+
* **All four channels**, alpha included, the same 4-vector convention {@link Color#multiply} follows. The rule
|
|
7
|
+
* across this directory: an unsuffixed name touches all four, and an `_rgb` suffix touches the three colour
|
|
8
|
+
* channels and copies alpha from the first input — see {@link color_multiply_rgb}.
|
|
9
|
+
*
|
|
10
|
+
* Nothing is clamped. Adding light legitimately goes above 1, and `Color` tolerates that; clamp with
|
|
11
|
+
* {@link color_clamp} when the result has to be displayable.
|
|
12
|
+
*
|
|
13
|
+
* @param {Color} a
|
|
14
|
+
* @param {Color} b
|
|
15
|
+
* @param {Color} [output] may be `a` or `b`
|
|
16
|
+
* @returns {Color} `output`
|
|
17
|
+
*
|
|
18
|
+
* @author Alex Goldring
|
|
19
|
+
* @copyright Company Named Limited (c) 2026
|
|
20
|
+
*/
|
|
21
|
+
export function color_add(a, b, output = new Color()) {
|
|
22
|
+
return output.set(a.r + b.r, a.g + b.g, a.b + b.b, a.a + b.a);
|
|
23
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Add `b * scale` to `a`, channel by channel.
|
|
3
|
+
*
|
|
4
|
+
* The accumulation primitive — summing weighted contributions is what an engine does most with colour, and
|
|
5
|
+
* doing it as `color_add(a, color_multiply_scalar(b, s))` would allocate an intermediate per term.
|
|
6
|
+
*
|
|
7
|
+
* **All four channels**; see {@link color_add} for the convention.
|
|
8
|
+
*
|
|
9
|
+
* @param {Color} a
|
|
10
|
+
* @param {Color} b
|
|
11
|
+
* @param {number} scale
|
|
12
|
+
* @param {Color} [output] may be `a` or `b`
|
|
13
|
+
* @returns {Color} `output`
|
|
14
|
+
*
|
|
15
|
+
* @author Alex Goldring
|
|
16
|
+
* @copyright Company Named Limited (c) 2026
|
|
17
|
+
*/
|
|
18
|
+
export function color_add_scaled(a: Color, b: Color, scale: number, output?: Color): Color;
|
|
19
|
+
import { Color } from "../Color.js";
|
|
20
|
+
//# sourceMappingURL=color_add_scaled.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color_add_scaled.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/operations/color_add_scaled.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH,oCATW,KAAK,KACL,KAAK,SACL,MAAM,WACN,KAAK,GACH,KAAK,CAcjB;sBA5BqB,aAAa"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { assert } from "../../assert.js";
|
|
2
|
+
import { Color } from "../Color.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Add `b * scale` to `a`, channel by channel.
|
|
6
|
+
*
|
|
7
|
+
* The accumulation primitive — summing weighted contributions is what an engine does most with colour, and
|
|
8
|
+
* doing it as `color_add(a, color_multiply_scalar(b, s))` would allocate an intermediate per term.
|
|
9
|
+
*
|
|
10
|
+
* **All four channels**; see {@link color_add} for the convention.
|
|
11
|
+
*
|
|
12
|
+
* @param {Color} a
|
|
13
|
+
* @param {Color} b
|
|
14
|
+
* @param {number} scale
|
|
15
|
+
* @param {Color} [output] may be `a` or `b`
|
|
16
|
+
* @returns {Color} `output`
|
|
17
|
+
*
|
|
18
|
+
* @author Alex Goldring
|
|
19
|
+
* @copyright Company Named Limited (c) 2026
|
|
20
|
+
*/
|
|
21
|
+
export function color_add_scaled(a, b, scale, output = new Color()) {
|
|
22
|
+
assert.isNumber(scale, 'scale');
|
|
23
|
+
|
|
24
|
+
return output.set(
|
|
25
|
+
a.r + b.r * scale,
|
|
26
|
+
a.g + b.g * scale,
|
|
27
|
+
a.b + b.b * scale,
|
|
28
|
+
a.a + b.a * scale
|
|
29
|
+
);
|
|
30
|
+
}
|