use crate::core::texture::{ CreateSpectrumTexture, FloatTexture, SpectrumTexture }; use crate::utils::{FileLoc, TextureParameterDictionary}; use crate::Arena; use anyhow::Result; use shared::core::geometry::{Vector3f, VectorLike}; use shared::core::texture::{SpectrumType, TextureEvalContext}; use shared::spectra::{SampledSpectrum, SampledWavelengths}; use shared::utils::Transform; use shared::Float; use std::sync::Arc; #[derive(Clone, Debug)] pub struct FloatMixTexture { pub tex1: Arc, pub tex2: Arc, pub amount: Arc } impl FloatMixTexture { pub fn new( tex1: Arc, tex2: Arc, amount: Arc, ) -> Self { Self { tex1, tex2, amount } } pub fn create( _render_from_texture: &Transform, params: &TextureParameterDictionary, _loc: &FileLoc, _arena: &Arena, ) -> Result { let tex1 = params.get_float_texture("tex1", 0.)?; let tex2 = params.get_float_texture("tex2", 1.)?; let amount = params.get_float_texture("amount", 0.5)?; // arena.alloc(Self::new(tex1, tex2, amount)); Ok(FloatTexture::Mix(Self::new(tex1, tex2, amount))) } } #[derive(Clone, Debug)] pub struct FloatDirectionMixTexture { pub tex1: Arc, pub tex2: Arc, pub dir: Vector3f } impl FloatDirectionMixTexture { pub fn new(tex1: Arc, tex2: Arc, dir: Vector3f) -> Self { Self { tex1, tex2, dir } } pub fn create( render_from_texture: &Transform, params: &TextureParameterDictionary, _loc: &FileLoc, _arena: &Arena, ) -> Result { let dir_raw = params.get_one_vector3f("dir", Vector3f::new(0., 1., 0.))?; let dir = render_from_texture.apply_to_vector(dir_raw).normalize(); let tex1 = params.get_float_texture("tex1", 0.)?; let tex2 = params.get_float_texture("tex2", 1.)?; // arena.alloc(Self::new(tex1, tex2, dir)) Ok(FloatTexture::DirectionMix(Self::new(tex1, tex2, dir))) } } #[derive(Clone, Debug)] pub struct SpectrumMixTexture { pub tex1: Arc, pub tex2: Arc, pub amount: Arc } impl CreateSpectrumTexture for SpectrumMixTexture { fn create( _render_from_texture: Transform, _parameters: TextureParameterDictionary, _spectrum_type: SpectrumType, _loc: FileLoc, ) -> Result { todo!() } } #[derive(Clone, Debug)] pub struct SpectrumDirectionMixTexture { pub tex1: Arc, pub tex2: Arc, pub dir: Vector3f } impl CreateSpectrumTexture for SpectrumDirectionMixTexture { fn create( _render_from_texture: Transform, _parameters: TextureParameterDictionary, _spectrum_type: SpectrumType, _loc: FileLoc, ) -> Result { todo!() } }