32#if JPL_HAS_ENV_PROPAGATION
33#include "JPLSpatial/Services/EnvironmentService.h"
34#include "JPLSpatial/Environment.h"
47#include <unordered_set>
48#include <memory_resource>
103 template<CVec3 Vec3Type>
107#if JPL_HAS_ENV_PROPAGATION
126 template<CVec3 Vec3Type>
136 template<CVec3 Vec3Type>
144#if JPL_HAS_ENV_PROPAGATION
164 template<CVec3 Vec3Type,
class VBAPTraits = VBAPBaseTraits<Vec3Type>>
172 template<
class Key,
class T>
176 using SetType = std::pmr::unordered_set<Key, std::hash<Key>, std::equal_to<Key>>;
254#if JPL_HAS_ENV_PROPAGATION
261#if JPL_HAS_ENV_PROPAGATION
268#if JPL_HAS_ENV_PROPAGATION
287 .Id = mDefaultListener,
289 .Location = Vec3Type(0, 0, 0),
305 template<CVec3 Vec3Type,
class VBAPTraits>
315 return !mListeners.contains(mSourceStuff[
source].Listener);
327#if JPL_HAS_ENV_PROPAGATION
389 mDirectPathService.ProcessDirectPath(
423 mLastUpdatedSources.resize(mDirtySources.size());
424 std::ranges::copy(mDirtySources, mLastUpdatedSources.begin());
426 mDirtySources.clear();
427#if JPL_HAS_ENV_PROPAGATION
432 template<CVec3 Vec3Type,
class VBAPTraits>
435 return mLastUpdatedSources;
438 template<CVec3 Vec3Type,
class VBAPTraits>
446 .Location = Vec3Type(0, 0, 0),
453 template<CVec3 Vec3Type,
class VBAPTraits>
459#if JPL_HAS_ENV_PROPAGATION
468 template<CVec3 Vec3Type,
class VBAPTraits>
479 : std::span<const ChannelMap>{};
483 .BaseCurve =
options.DistanceAttenuationCurve,
484 .AttenuationCone =
options.AttenuationCone
491 .EffectParameters =
options.PanParameters
496 .Listener =
options.ListenerId.IsValid() ?
options.ListenerId : mDefaultListener,
498 .PanEffectHandle = mPanningService.InitializePanningEffect(std::move(
panEffectParameters)),
499 .ObjectSize =
options.ObjectSize,
500 .AttenuationCurve =
options.DistanceAttenuationCurve,
501 .SpatializationType =
options.SpatializationType
504 mPositionData.emplace(
newId,
507 .DirectionDot = 1.0f,
518 template<CVec3 Vec3Type,
class VBAPTraits>
524 if (mSourceStuff.contains(
source))
527 mDirectPathService.ReleaseEffectData(
sourceData.DirectEffectHandle);
528 mPanningService.ReleasePanningEffect(
sourceData.PanEffectHandle);
531 mSourceStuff.erase(
source);
532 mPositionData.erase(
source);
533 mDirtySources.erase(
source);
534#if JPL_HAS_ENV_PROPAGATION
540 template<CVec3 Vec3Type,
class VBAPTraits>
553 template<CVec3 Vec3Type,
class VBAPTraits>
557 if (
it == mListeners.end())
571#if JPL_HAS_ENV_PROPAGATION
579 template<CVec3 Vec3Type,
class VBAPTraits>
583 if (
it != mListeners.end())
584 return it->second.Position;
588 template<CVec3 Vec3Type,
class VBAPTraits>
591 auto it = mSourceStuff.find(
source);
592 if (
it == mSourceStuff.end())
599 mDirtySources.insert(
source);
600#if JPL_HAS_ENV_PROPAGATION
608 template<CVec3 Vec3Type,
class VBAPTraits>
611 return mPanningService.SetPanningEffectParameters(
612 GetPanEffectHandle(
source),
616 template<CVec3 Vec3Type,
class VBAPTraits>
625 template<CVec3 Vec3Type,
class VBAPTraits>
628 return mDirectPathService.GetDistanceAttenuation(mSourceStuff.at(
source).DirectEffectHandle,
curve);
631 template<CVec3 Vec3Type,
class VBAPTraits>
634 return mDirectPathService.GetDirectionAttenuation(mSourceStuff.at(
source).DirectEffectHandle);
637 template<CVec3 Vec3Type,
class VBAPTraits>
#define JPL_ASSERT(inExpression,...)
Main assert macro, usage: JPL_ASSERT(condition, message) or JPL_ASSERT(condition)
Definition ErrorReporting.h:76
Definition ChannelMap.h:150
static constexpr ChannelMap FromNumChannels(uint32 numChannels)
Definition ChannelMap.h:199
Definition DirectPathService.h:84
Definition PanningService.h:136
Definition SpatialManager.h:166
JPL_INLINE bool DeleteSource(SourceId source)
Definition SpatialManager.h:519
JPL_INLINE std::span< const float > GetChannelGains(SourceId source, ChannelMap targetChannelMap) const
Definition SpatialManager.h:638
JPL_INLINE std::optional< Position< Vec3Type > > GetListenerPosition(ListenerId listener) const
Definition SpatialManager.h:580
JPL_INLINE void AdvanceSimulation()
Definition SpatialManager.h:306
JPL_INLINE PanningService< VBAPTraits > & GetPanningService()
Definition SpatialManager.h:191
static JPL_INLINE float GetSpreadFromSourceSize(float sourceSize, float distance)
Definition SpatialManager.h:617
JPL_INLINE PanEffectHandle GetPanEffectHandle(SourceId source) const
Definition SpatialManager.h:226
JPL_INLINE float GetConeAttenuation(SourceId source) const
Definition SpatialManager.h:632
JPL_INLINE const DirectPathService & GetDirectPathService() const
Definition SpatialManager.h:188
JPL_INLINE std::span< const SourceId > GetLastUpdatedSource() const
Definition SpatialManager.h:433
JPL_INLINE const PanningService< VBAPTraits > & GetPanningService() const
Definition SpatialManager.h:190
JPL_INLINE DirectPathService & GetDirectPathService()
Definition SpatialManager.h:189
JPL_INLINE SourceId CreateSource(const SourceInitParameters &options)
Definition SpatialManager.h:469
JPL_INLINE bool SetSourceFocusAndSpread(SourceId source, PanEffectParameters focusAndSpread)
Definition SpatialManager.h:609
JPL_INLINE ListenerId CreateListener()
Definition SpatialManager.h:439
JPL_INLINE bool SetListenerPosition(ListenerId listener, const Position< Vec3Type > &newPosition)
Definition SpatialManager.h:554
JPL_INLINE float GetDistanceAttenuation(SourceId source, const AttenuationCurveRef &curve) const
Definition SpatialManager.h:626
SpatialManager & operator=(const SpatialManager &)=delete
JPL_INLINE ListenerId GetDefaultListener() const
Definition SpatialManager.h:207
SpatialManager(const SpatialManager &)=delete
JPL_INLINE bool SetSourcePosition(SourceId source, const Position< Vec3Type > &newPosition)
Definition SpatialManager.h:589
JPL_INLINE DirectEffectHandle GetDirectEffectHandle(SourceId source) const
Definition SpatialManager.h:225
JPL_INLINE bool DeleteListener(ListenerId listener)
Definition SpatialManager.h:454
JPL_INLINE bool SetListener(SourceId source, ListenerId listener)
Definition SpatialManager.h:541
std::pmr::unordered_set< Key, std::hash< Key >, std::equal_to< Key > > SetType
Definition SpatialManager.h:176
~SpatialManager()=default
Definition SpatialManager.h:59
IDType< ListenerMockIDTag > ListenerId
Definition SpatialManager.h:64
Definition AcousticMaterial.h:36
std::uint64_t uint64
Definition Core.h:312
std::shared_ptr< AttenuationFunction > AttenuationCurveRef
Definition DirectPathService.h:58
std::uint32_t uint32
Definition Core.h:311
std::pmr::memory_resource * GetDefaultMemoryResource() noexcept
Definition Memory.h:42
ESpatializationType
Determines spatialized source channel oritentation.
Definition PanningService.h:107
JPL_INLINE simd min(const simd &a, const simd &b) noexcept
Element-wise min.
Definition SIMD.h:1813
JPL_INLINE float GetSpreadFromSourceSize(float sourceSize, float distance)
Definition PannerBase.h:69
Definition DirectPathService.h:53
Definition DirectPathService.h:77
Definition DirectPathService.h:44
static constexpr IDType New() noexcept
Definition IDType.h:44
static JPL_INLINE OrientationData< Vec3Type > IdentityForward() noexcept
Identity facing forward as per right-handed rotation.
Definition Position.h:46
Definition PanningService.h:122
Definition PanningService.h:116
float Focus
Definition PanningService.h:117
Location and orientation in one place.
Definition Position.h:80
Definition SpatialManager.h:63
Definition SpatialManager.h:105
ListenerId Id
Definition SpatialManager.h:106
JPL::Position< Vec3Type > Position
Definition SpatialManager.h:110
Definition SpatialManager.h:66
Definition SpatialManager.h:128
PositionId Id
Definition SpatialManager.h:129
PositionData Data
Definition SpatialManager.h:133
JPL::Position< Vec3Type > Position
Definition SpatialManager.h:130
Definition SpatialManager.h:115
float Occlusion
Definition SpatialManager.h:120
float DirectionDot
Definition SpatialManager.h:117
float Obstruction
Definition SpatialManager.h:119
float Distance
Definition SpatialManager.h:116
Definition SpatialManager.h:138
ListenerId Listener
Definition SpatialManager.h:140
std::optional< float > ObjectSize
Definition SpatialManager.h:150
ESpatializationType SpatializationType
Definition SpatialManager.h:158
JPL::Position< Vec3Type > Position
Definition SpatialManager.h:142
AttenuationCurveRef AttenuationCurve
Definition SpatialManager.h:156
SourceId Id
Definition SpatialManager.h:139
JPL::DirectEffectHandle DirectEffectHandle
Definition SpatialManager.h:147
JPL::PanEffectHandle PanEffectHandle
Definition SpatialManager.h:148
Definition SpatialManager.h:70
uint32 NumTargetChannels
Number of target channels for panning. Must be greater than 0.
Definition SpatialManager.h:77
uint64 ObjectId
Definition SpatialManager.h:88
JPL::AttenuationCone AttenuationCone
Source directivity cone.
Definition SpatialManager.h:100
AttenuationCurveRef DistanceAttenuationCurve
Base distance attenuation curve.
Definition SpatialManager.h:97
uint32 NumChannels
Number of source channels. If 0, panning is not initialized for this source.
Definition SpatialManager.h:74
PanEffectParameters PanParameters
Pan parameters used if panning effect is initialized for the source.
Definition SpatialManager.h:91
std::optional< float > ObjectSize
If set, Spread value is calculated from ObjectSize based on distance to the listener.
Definition SpatialManager.h:94
ESpatializationType SpatializationType
Determines spatialized source channel oritentation.
Definition SpatialManager.h:83
JPL::Spatial::ListenerId ListenerId
Optional listener to assign this source to. If not set, default listener is used.
Definition SpatialManager.h:80
Definition SpatialManager.h:60
static constexpr std::size_t size() noexcept
Get number of element of the vector.
Definition SIMD.h:97