// use crate::utils::{Arena, FileLoc, TextureParameterDictionary}; use crate::core::texture::{FloatTextureTrait, SpectrumTextureTrait}; use crate::spectra::get_colorspace_context; use shared::core::spectrum::SpectrumTrait; // use ptex::Cache; // use ptex_filter::{PtexFilter, PtexFilterOptions, PtexFilterType}; use shared::Float; use shared::core::color::{ColorEncoding, RGB}; use shared::core::texture::{SpectrumType, TextureEvalContext}; use shared::spectra::{RGBIlluminantSpectrum, SampledSpectrum, SampledWavelengths}; #[derive(Debug, Clone)] pub struct PtexTextureBase { pub valid: bool, pub filename: String, pub encoding: ColorEncoding, pub scale: Float, } impl PtexTextureBase { pub fn new(filename: String, encoding: ColorEncoding, scale: Float) -> Self { log::warn!( "Ptex support is currently disabled. Texture '{}' will render as Magenta.", filename ); Self { filename, encoding, scale, valid: false, } } pub fn sample_texture(&self, _ctx: &TextureEvalContext) -> Option { Some(RGB::new(1.0, 0.0, 1.0) * self.scale) } } #[derive(Debug, Clone)] pub struct FloatPtexTexture { pub base: PtexTextureBase, } impl FloatTextureTrait for FloatPtexTexture { fn evaluate(&self, ctx: &TextureEvalContext) -> Float { if let Some(rgb) = self.base.sample_texture(ctx) { rgb.g } else { 0.0 } } } #[derive(Clone, Debug)] pub struct SpectrumPtexTexture { pub base: PtexTextureBase, pub spectrum_type: SpectrumType, } impl SpectrumTextureTrait for SpectrumPtexTexture { fn evaluate(&self, ctx: &TextureEvalContext, lambda: &SampledWavelengths) -> SampledSpectrum { if let Some(rgb) = self.base.sample_texture(ctx) { let stdcs = get_colorspace_context(); let srgb = stdcs.srgb.as_ref(); RGBIlluminantSpectrum::new(srgb, rgb).sample(lambda) } else { SampledSpectrum::new(0.0) } } } pub trait CreateGPUPtexTexture {}