use crate::spectra::{DenselySampledSpectrumBuffer, piecewise::PiecewiseLinearSpectrumBuffer}; use shared::Float; use shared::core::spectrum::Spectrum; use shared::spectra::PiecewiseLinearSpectrum; use shared::spectra::cie::*; use std::collections::HashMap; use std::sync::LazyLock; pub fn create_cie_buffer(data: &[Float]) -> DenselySampledSpectrumBuffer { let buffer = PiecewiseLinearSpectrumBuffer::from_interleaved(data, false); let spec = Spectrum::Piecewise(buffer.device); DenselySampledSpectrumBuffer::from_spectrum(&spec) } pub static NAMED_SPECTRA: LazyLock> = LazyLock::new(|| { let mut m = HashMap::new(); macro_rules! add { ($name:expr, $data:expr, $norm:expr) => { let buffer = PiecewiseLinearSpectrumBuffer::from_interleaved($data, $norm); let spectrum = Spectrum::Piecewise(*buffer); m.insert($name.to_string(), spectrum); }; } add!("stdillum-A", &CIE_ILLUM_A, true); add!("stdillum-D50", &CIE_ILLUM_D5000, true); add!("stdillum-D65", &CIE_ILLUM_D6500, true); add!("stdillum-F1", &CIE_ILLUM_F1, true); add!("stdillum-F2", &CIE_ILLUM_F2, true); add!("stdillum-F3", &CIE_ILLUM_F3, true); add!("stdillum-F4", &CIE_ILLUM_F4, true); add!("stdillum-F5", &CIE_ILLUM_F5, true); add!("stdillum-F6", &CIE_ILLUM_F6, true); add!("stdillum-F7", &CIE_ILLUM_F7, true); add!("stdillum-F8", &CIE_ILLUM_F8, true); add!("stdillum-F9", &CIE_ILLUM_F9, true); add!("stdillum-F10", &CIE_ILLUM_F10, true); add!("stdillum-F11", &CIE_ILLUM_F11, true); add!("stdillum-F12", &CIE_ILLUM_F12, true); add!("illum-acesD60", &ACES_ILLUM_D60, true); // --- Glasses --- add!("glass-BK7", &GLASS_BK7_ETA, false); add!("glass-BAF10", &GLASS_BAF10_ETA, false); add!("glass-FK51A", &GLASS_FK51A_ETA, false); add!("glass-LASF9", &GLASS_LASF9_ETA, false); add!("glass-F5", &GLASS_SF5_ETA, false); add!("glass-F10", &GLASS_SF10_ETA, false); add!("glass-F11", &GLASS_SF11_ETA, false); // --- Metals --- add!("metal-Ag-eta", &AG_ETA, false); add!("metal-Ag-k", &AG_K, false); add!("metal-Al-eta", &AL_ETA, false); add!("metal-Al-k", &AL_K, false); add!("metal-Au-eta", &AU_ETA, false); add!("metal-Au-k", &AU_K, false); add!("metal-Cu-eta", &CU_ETA, false); add!("metal-Cu-k", &CU_K, false); add!("metal-CuZn-eta", &CUZN_ETA, false); add!("metal-CuZn-k", &CUZN_K, false); add!("metal-MgO-eta", &MGO_ETA, false); add!("metal-MgO-k", &MGO_K, false); add!("metal-TiO2-eta", &TIO2_ETA, false); add!("metal-TiO2-k", &TIO2_K, false); // --- Canon EOS 100D --- add!("canon_eos_100d_r", &CANON_EOS_100D_R, false); add!("canon_eos_100d_g", &CANON_EOS_100D_G, false); add!("canon_eos_100d_b", &CANON_EOS_100D_B, false); // --- Canon EOS 1DX MkII --- add!("canon_eos_1dx_mkii_r", &CANON_EOS_1DX_MKII_R, false); add!("canon_eos_1dx_mkii_g", &CANON_EOS_1DX_MKII_G, false); add!("canon_eos_1dx_mkii_b", &CANON_EOS_1DX_MKII_B, false); // --- Canon EOS 200D --- add!("canon_eos_200d_r", &CANON_EOS_200D_R, false); add!("canon_eos_200d_g", &CANON_EOS_200D_G, false); add!("canon_eos_200d_b", &CANON_EOS_200D_B, false); // --- Canon EOS 200D MkII --- add!("canon_eos_200d_mkii_r", &CANON_EOS_200D_MKII_R, false); add!("canon_eos_200d_mkii_g", &CANON_EOS_200D_MKII_G, false); add!("canon_eos_200d_mkii_b", &CANON_EOS_200D_MKII_B, false); // --- Canon EOS 5D --- add!("canon_eos_5d_r", &CANON_EOS_5D_R, false); add!("canon_eos_5d_g", &CANON_EOS_5D_G, false); add!("canon_eos_5d_b", &CANON_EOS_5D_B, false); // --- Canon EOS 5D MkII --- add!("canon_eos_5d_mkii_r", &CANON_EOS_5D_MKII_R, false); add!("canon_eos_5d_mkii_g", &CANON_EOS_5D_MKII_G, false); add!("canon_eos_5d_mkii_b", &CANON_EOS_5D_MKII_B, false); // --- Canon EOS 5D MkIII --- add!("canon_eos_5d_mkiii_r", &CANON_EOS_5D_MKIII_R, false); add!("canon_eos_5d_mkiii_g", &CANON_EOS_5D_MKIII_G, false); add!("canon_eos_5d_mkiii_b", &CANON_EOS_5D_MKIII_B, false); // --- Canon EOS 5D MkIV --- add!("canon_eos_5d_mkiv_r", &CANON_EOS_5D_MKIV_R, false); add!("canon_eos_5d_mkiv_g", &CANON_EOS_5D_MKIV_G, false); add!("canon_eos_5d_mkiv_b", &CANON_EOS_5D_MKIV_B, false); // --- Canon EOS 5DS --- add!("canon_eos_5ds_r", &CANON_EOS_5DS_R, false); add!("canon_eos_5ds_g", &CANON_EOS_5DS_G, false); add!("canon_eos_5ds_b", &CANON_EOS_5DS_B, false); // --- Canon EOS M --- add!("canon_eos_m_r", &CANON_EOS_M_R, false); add!("canon_eos_m_g", &CANON_EOS_M_G, false); add!("canon_eos_m_b", &CANON_EOS_M_B, false); // --- Hasselblad L1D 20C --- add!("hasselblad_l1d_20c_r", &HASSELBLAD_L1D_20C_R, false); add!("hasselblad_l1d_20c_g", &HASSELBLAD_L1D_20C_G, false); add!("hasselblad_l1d_20c_b", &HASSELBLAD_L1D_20C_B, false); // --- Nikon D810 --- add!("nikon_d810_r", &NIKON_D810_R, false); add!("nikon_d810_g", &NIKON_D810_G, false); add!("nikon_d810_b", &NIKON_D810_B, false); // --- Nikon D850 --- add!("nikon_d850_r", &NIKON_D850_R, false); add!("nikon_d850_g", &NIKON_D850_G, false); add!("nikon_d850_b", &NIKON_D850_B, false); // --- Sony ILCE 6400 --- add!("sony_ilce_6400_r", &SONY_ILCE_6400_R, false); add!("sony_ilce_6400_g", &SONY_ILCE_6400_G, false); add!("sony_ilce_6400_b", &SONY_ILCE_6400_B, false); // --- Sony ILCE 7M3 --- add!("sony_ilce_7m3_r", &SONY_ILCE_7M3_R, false); add!("sony_ilce_7m3_g", &SONY_ILCE_7M3_G, false); add!("sony_ilce_7m3_b", &SONY_ILCE_7M3_B, false); // --- Sony ILCE 7RM3 --- add!("sony_ilce_7rm3_r", &SONY_ILCE_7RM3_R, false); add!("sony_ilce_7rm3_g", &SONY_ILCE_7RM3_G, false); add!("sony_ilce_7rm3_b", &SONY_ILCE_7RM3_B, false); // --- Sony ILCE 9 --- add!("sony_ilce_9_r", &SONY_ILCE_9_R, false); add!("sony_ilce_9_g", &SONY_ILCE_9_G, false); add!("sony_ilce_9_b", &SONY_ILCE_9_B, false); m }); pub fn get_named_spectrum(name: &str) -> Option { NAMED_SPECTRA.get(name).copied() }