diff --git a/Source/Editor/Gizmo/TransformGizmoBase.Draw.cs b/Source/Editor/Gizmo/TransformGizmoBase.Draw.cs index b3609783f..f149185f1 100644 --- a/Source/Editor/Gizmo/TransformGizmoBase.Draw.cs +++ b/Source/Editor/Gizmo/TransformGizmoBase.Draw.cs @@ -57,7 +57,7 @@ namespace FlaxEditor.Gizmo // As all axisMesh have the same pivot, add a little offset to the x axisMesh, this way SortDrawCalls is able to sort the draw order // https://github.com/FlaxEngine/FlaxEngine/issues/680 - Matrix m1, m2, m3 , mx1; + Matrix m1, m2, m3, mx1; bool isXAxis = _activeAxis == Axis.X || _activeAxis == Axis.XY || _activeAxis == Axis.ZX; bool isYAxis = _activeAxis == Axis.Y || _activeAxis == Axis.XY || _activeAxis == Axis.YZ; bool isZAxis = _activeAxis == Axis.Z || _activeAxis == Axis.YZ || _activeAxis == Axis.ZX; diff --git a/Source/Engine/Audio/AudioClip.cpp b/Source/Engine/Audio/AudioClip.cpp index 9efe88a2a..fd8311132 100644 --- a/Source/Engine/Audio/AudioClip.cpp +++ b/Source/Engine/Audio/AudioClip.cpp @@ -20,10 +20,11 @@ bool AudioClip::StreamingTask::Run() { AssetReference ref = _asset.Get(); if (ref == nullptr) - { return true; - } + ScopeLock lock(ref->Locker); const auto& queue = ref->StreamingQueue; + if (queue.Count() == 0) + return false; auto clip = ref.Get(); // Update the buffers @@ -108,7 +109,6 @@ bool AudioClip::StreamingTask::Run() for (int32 sourceIndex = 0; sourceIndex < Audio::Sources.Count(); sourceIndex++) { // TODO: collect refs to audio clip from sources and use faster iteration (but do it thread-safe) - const auto src = Audio::Sources[sourceIndex]; if (src->Clip == clip && src->GetState() == AudioSource::States::Playing) { diff --git a/Source/Engine/Audio/AudioSource.cpp b/Source/Engine/Audio/AudioSource.cpp index 59d14e7d9..10e2cf429 100644 --- a/Source/Engine/Audio/AudioSource.cpp +++ b/Source/Engine/Audio/AudioSource.cpp @@ -132,7 +132,7 @@ void AudioSource::Play() Clip->RequestStreamingUpdate(); // If we are looping and streaming also update streaming buffers - if(_loop) + if (_loop) RequestStreamingBuffersUpdate(); } } @@ -372,6 +372,7 @@ void AudioSource::Update() if (!UseStreaming() || SourceIDs.IsEmpty()) return; auto clip = Clip.Get(); + clip->Locker.Lock(); // Handle streaming buffers queue submit (ensure that clip has loaded the first chunk with audio data) if (_needToUpdateStreamingBuffers && clip->Buffers[_streamingFirstChunk] != AUDIO_BUFFER_ID_INVALID) @@ -441,6 +442,8 @@ void AudioSource::Update() clip->RequestStreamingUpdate(); } } + + clip->Locker.Unlock(); } void AudioSource::OnEnable() diff --git a/Source/Engine/Audio/OpenAL/AudioBackendOAL.cpp b/Source/Engine/Audio/OpenAL/AudioBackendOAL.cpp index aa607421e..ef1e84675 100644 --- a/Source/Engine/Audio/OpenAL/AudioBackendOAL.cpp +++ b/Source/Engine/Audio/OpenAL/AudioBackendOAL.cpp @@ -139,10 +139,12 @@ namespace ALC alSourcef(sourceID, AL_GAIN, source->GetVolume()); alSourcef(sourceID, AL_PITCH, source->GetPitch()); + alSourcef(sourceID, AL_SEC_OFFSET, 0.0f); alSourcef(sourceID, AL_REFERENCE_DISTANCE, source->GetMinDistance()); alSourcef(sourceID, AL_ROLLOFF_FACTOR, source->GetAttenuation()); alSourcei(sourceID, AL_LOOPING, loop); alSourcei(sourceID, AL_SOURCE_RELATIVE, !is3D); + alSourcei(sourceID, AL_BUFFER, 0); alSource3f(sourceID, AL_POSITION, FLAX_POS_TO_OAL(position)); alSource3f(sourceID, AL_VELOCITY, FLAX_POS_TO_OAL(velocity)); }