Skip to content

Commit 6a7ff49

Browse files
committed
Make PannerNode setter take &mut
1 parent f8990ef commit 6a7ff49

File tree

3 files changed

+46
-48
lines changed

3 files changed

+46
-48
lines changed

examples/panner_cone.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ fn main() {
3232
tone.start();
3333

3434
// Connect tone > panner node > destination node
35-
let panner = context.create_panner();
35+
let mut panner = context.create_panner();
3636
tone.connect(&panner);
3737
panner.connect(&context.destination());
3838

examples/spatial.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ fn main() {
4747
..PannerOptions::default()
4848
};
4949

50-
let panner = PannerNode::new(&context, opts);
50+
let mut panner = PannerNode::new(&context, opts);
5151
tone.connect(&panner);
5252
panner.connect(&context.destination());
5353

src/node/panner.rs

Lines changed: 44 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
use std::any::Any;
22
use std::f32::consts::PI;
3-
use std::sync::atomic::{AtomicU8, Ordering};
43

54
use float_eq::float_eq;
65
use hrtf::{HrirSphere, HrtfContext, HrtfProcessor, Vec3};
76

87
use crate::context::{AudioContextRegistration, AudioParamId, BaseAudioContext};
98
use crate::param::{AudioParam, AudioParamDescriptor};
109
use crate::render::{AudioParamValues, AudioProcessor, AudioRenderQuantum, RenderScope};
11-
use crate::{AtomicF64, RENDER_QUANTUM_SIZE};
10+
use crate::RENDER_QUANTUM_SIZE;
1211

1312
use super::{
1413
AudioNode, ChannelConfig, ChannelConfigOptions, ChannelCountMode, ChannelInterpretation,
@@ -115,7 +114,7 @@ impl Default for PannerOptions {
115114
}
116115

117116
enum ControlMessage {
118-
DistanceModel(u8),
117+
DistanceModel(DistanceModelType),
119118
// Box this payload - one large variant can penalize the memory layout of this enum
120119
PanningModel(Box<Option<HrtfState>>),
121120
RefDistance(f64),
@@ -282,14 +281,14 @@ pub struct PannerNode {
282281
orientation_x: AudioParam,
283282
orientation_y: AudioParam,
284283
orientation_z: AudioParam,
285-
cone_inner_angle: AtomicF64,
286-
cone_outer_angle: AtomicF64,
287-
cone_outer_gain: AtomicF64,
288-
distance_model: AtomicU8,
289-
ref_distance: AtomicF64,
290-
max_distance: AtomicF64,
291-
rolloff_factor: AtomicF64,
292-
panning_model: AtomicU8,
284+
cone_inner_angle: f64,
285+
cone_outer_angle: f64,
286+
cone_outer_gain: f64,
287+
distance_model: DistanceModelType,
288+
ref_distance: f64,
289+
max_distance: f64,
290+
rolloff_factor: f64,
291+
panning_model: PanningModelType,
293292
}
294293

295294
impl AudioNode for PannerNode {
@@ -340,7 +339,7 @@ impl PannerNode {
340339
/// Can panic when loading HRIR-sphere
341340
#[allow(clippy::missing_panics_doc)]
342341
pub fn new<C: BaseAudioContext>(context: &C, options: PannerOptions) -> Self {
343-
let node = context.register(|registration| {
342+
let mut node = context.register(|registration| {
344343
use crate::spatial::PARAM_OPTS;
345344

346345
let PannerOptions {
@@ -409,14 +408,14 @@ impl PannerNode {
409408
orientation_x: param_ox,
410409
orientation_y: param_oy,
411410
orientation_z: param_oz,
412-
distance_model: AtomicU8::new(distance_model as u8),
413-
ref_distance: AtomicF64::new(ref_distance),
414-
max_distance: AtomicF64::new(max_distance),
415-
rolloff_factor: AtomicF64::new(rolloff_factor),
416-
cone_inner_angle: AtomicF64::new(cone_inner_angle),
417-
cone_outer_angle: AtomicF64::new(cone_outer_angle),
418-
cone_outer_gain: AtomicF64::new(cone_outer_gain),
419-
panning_model: AtomicU8::new(panning_model as u8),
411+
distance_model,
412+
ref_distance,
413+
max_distance,
414+
rolloff_factor,
415+
cone_inner_angle,
416+
cone_outer_angle,
417+
cone_outer_gain,
418+
panning_model,
420419
};
421420

422421
// instruct to BaseContext to add the AudioListener if it has not already
@@ -473,82 +472,81 @@ impl PannerNode {
473472
}
474473

475474
pub fn distance_model(&self) -> DistanceModelType {
476-
self.distance_model.load(Ordering::Acquire).into()
475+
self.distance_model
477476
}
478477

479-
pub fn set_distance_model(&self, value: DistanceModelType) {
480-
let value = value as u8;
481-
self.distance_model.store(value, Ordering::Release);
478+
pub fn set_distance_model(&mut self, value: DistanceModelType) {
479+
self.distance_model = value;
482480
self.registration
483481
.post_message(ControlMessage::DistanceModel(value));
484482
}
485483

486484
pub fn ref_distance(&self) -> f64 {
487-
self.ref_distance.load(Ordering::Acquire)
485+
self.ref_distance
488486
}
489487

490-
pub fn set_ref_distance(&self, value: f64) {
491-
self.ref_distance.store(value, Ordering::Release);
488+
pub fn set_ref_distance(&mut self, value: f64) {
489+
self.ref_distance = value;
492490
self.registration
493491
.post_message(ControlMessage::RefDistance(value));
494492
}
495493

496494
pub fn max_distance(&self) -> f64 {
497-
self.max_distance.load(Ordering::Acquire)
495+
self.max_distance
498496
}
499497

500-
pub fn set_max_distance(&self, value: f64) {
501-
self.max_distance.store(value, Ordering::Release);
498+
pub fn set_max_distance(&mut self, value: f64) {
499+
self.max_distance = value;
502500
self.registration
503501
.post_message(ControlMessage::MaxDistance(value));
504502
}
505503

506504
pub fn rolloff_factor(&self) -> f64 {
507-
self.rolloff_factor.load(Ordering::Acquire)
505+
self.rolloff_factor
508506
}
509507

510-
pub fn set_rolloff_factor(&self, value: f64) {
511-
self.rolloff_factor.store(value, Ordering::Release);
508+
pub fn set_rolloff_factor(&mut self, value: f64) {
509+
self.rolloff_factor = value;
512510
self.registration
513511
.post_message(ControlMessage::RollOffFactor(value));
514512
}
515513

516514
pub fn cone_inner_angle(&self) -> f64 {
517-
self.cone_inner_angle.load(Ordering::Acquire)
515+
self.cone_inner_angle
518516
}
519517

520-
pub fn set_cone_inner_angle(&self, value: f64) {
521-
self.cone_inner_angle.store(value, Ordering::Release);
518+
pub fn set_cone_inner_angle(&mut self, value: f64) {
519+
self.cone_inner_angle = value;
522520
self.registration
523521
.post_message(ControlMessage::ConeInnerAngle(value));
524522
}
525523

526524
pub fn cone_outer_angle(&self) -> f64 {
527-
self.cone_outer_angle.load(Ordering::Acquire)
525+
self.cone_outer_angle
528526
}
529527

530-
pub fn set_cone_outer_angle(&self, value: f64) {
531-
self.cone_outer_angle.store(value, Ordering::Release);
528+
pub fn set_cone_outer_angle(&mut self, value: f64) {
529+
self.cone_outer_angle = value;
532530
self.registration
533531
.post_message(ControlMessage::ConeOuterAngle(value));
534532
}
535533

536534
pub fn cone_outer_gain(&self) -> f64 {
537-
self.cone_outer_gain.load(Ordering::Acquire)
535+
self.cone_outer_gain
538536
}
539537

540-
pub fn set_cone_outer_gain(&self, value: f64) {
541-
self.cone_outer_gain.store(value, Ordering::Release);
538+
pub fn set_cone_outer_gain(&mut self, value: f64) {
539+
self.cone_outer_gain = value;
542540
self.registration
543541
.post_message(ControlMessage::ConeOuterGain(value));
544542
}
545543

546544
pub fn panning_model(&self) -> PanningModelType {
547-
self.panning_model.load(Ordering::Acquire).into()
545+
self.panning_model
548546
}
549547

550548
#[allow(clippy::missing_panics_doc)] // loading the provided HRTF will not panic
551-
pub fn set_panning_model(&self, value: PanningModelType) {
549+
pub fn set_panning_model(&mut self, value: PanningModelType) {
552550
let hrtf_option = match value {
553551
PanningModelType::EqualPower => None,
554552
PanningModelType::HRTF => {
@@ -559,7 +557,7 @@ impl PannerNode {
559557
}
560558
};
561559

562-
self.panning_model.store(value as u8, Ordering::Release);
560+
self.panning_model = value;
563561
self.registration
564562
.post_message(ControlMessage::PanningModel(Box::new(hrtf_option)));
565563
}
@@ -797,7 +795,7 @@ impl AudioProcessor for PannerRenderer {
797795
fn onmessage(&mut self, msg: &mut dyn Any) {
798796
if let Some(control) = msg.downcast_mut::<ControlMessage>() {
799797
match control {
800-
ControlMessage::DistanceModel(value) => self.distance_model = (*value).into(),
798+
ControlMessage::DistanceModel(value) => self.distance_model = *value,
801799
ControlMessage::RefDistance(value) => self.ref_distance = *value,
802800
ControlMessage::MaxDistance(value) => self.max_distance = *value,
803801
ControlMessage::RollOffFactor(value) => self.rolloff_factor = *value,

0 commit comments

Comments
 (0)