Merge branch 'master' into Improve-HighlightedPopUpColor
This commit is contained in:
@@ -247,7 +247,7 @@ VariantType::VariantType(VariantType&& other) noexcept
|
||||
VariantType& VariantType::operator=(const Types& type)
|
||||
{
|
||||
Type = type;
|
||||
if (StaticName)
|
||||
if (!StaticName)
|
||||
Allocator::Free(TypeName);
|
||||
TypeName = nullptr;
|
||||
StaticName = 0;
|
||||
@@ -266,7 +266,7 @@ VariantType& VariantType::operator=(const VariantType& other)
|
||||
{
|
||||
ASSERT(this != &other);
|
||||
Type = other.Type;
|
||||
if (StaticName)
|
||||
if (!StaticName)
|
||||
Allocator::Free(TypeName);
|
||||
StaticName = other.StaticName;
|
||||
if (StaticName)
|
||||
@@ -316,7 +316,7 @@ void VariantType::SetTypeName(const StringView& typeName)
|
||||
{
|
||||
if (StringUtils::Length(TypeName) != typeName.Length())
|
||||
{
|
||||
if (StaticName)
|
||||
if (!StaticName)
|
||||
Allocator::Free(TypeName);
|
||||
StaticName = 0;
|
||||
TypeName = static_cast<char*>(Allocator::Allocate(typeName.Length() + 1));
|
||||
@@ -329,7 +329,7 @@ void VariantType::SetTypeName(const StringAnsiView& typeName, bool staticName)
|
||||
{
|
||||
if (StringUtils::Length(TypeName) != typeName.Length() || StaticName != staticName)
|
||||
{
|
||||
if (StaticName)
|
||||
if (!StaticName)
|
||||
Allocator::Free(TypeName);
|
||||
StaticName = staticName;
|
||||
if (staticName)
|
||||
|
||||
@@ -136,6 +136,15 @@ void CmdBufferVulkan::EndEvent()
|
||||
|
||||
#endif
|
||||
|
||||
void CmdBufferVulkan::Wait(float timeoutSeconds)
|
||||
{
|
||||
PROFILE_CPU();
|
||||
ASSERT(IsSubmitted());
|
||||
const bool failed = _device->FenceManager.WaitForFence(GetFence(), timeoutSeconds);
|
||||
ASSERT(!failed);
|
||||
RefreshFenceStatus();
|
||||
}
|
||||
|
||||
void CmdBufferVulkan::RefreshFenceStatus()
|
||||
{
|
||||
if (_state == State::Submitted)
|
||||
@@ -186,9 +195,8 @@ CmdBufferVulkan::~CmdBufferVulkan()
|
||||
auto& fenceManager = _device->FenceManager;
|
||||
if (_state == State::Submitted)
|
||||
{
|
||||
// Wait 60ms
|
||||
const uint64 waitForCmdBufferInNanoSeconds = 60 * 1000 * 1000LL;
|
||||
fenceManager.WaitAndReleaseFence(_fence, waitForCmdBufferInNanoSeconds);
|
||||
// Wait
|
||||
fenceManager.WaitAndReleaseFence(_fence);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -281,15 +289,6 @@ void CmdBufferManagerVulkan::SubmitActiveCmdBuffer(SemaphoreVulkan* signalSemaph
|
||||
_activeCmdBuffer = nullptr;
|
||||
}
|
||||
|
||||
void CmdBufferManagerVulkan::WaitForCmdBuffer(CmdBufferVulkan* cmdBuffer, float timeInSecondsToWait)
|
||||
{
|
||||
PROFILE_CPU();
|
||||
ASSERT(cmdBuffer->IsSubmitted());
|
||||
const bool failed = _device->FenceManager.WaitForFence(cmdBuffer->GetFence(), (uint64)(timeInSecondsToWait * 1e9));
|
||||
ASSERT(!failed);
|
||||
cmdBuffer->RefreshFenceStatus();
|
||||
}
|
||||
|
||||
void CmdBufferManagerVulkan::PrepareForNewActiveCommandBuffer()
|
||||
{
|
||||
PROFILE_CPU();
|
||||
|
||||
@@ -136,6 +136,7 @@ public:
|
||||
void EndEvent();
|
||||
#endif
|
||||
|
||||
void Wait(float timeoutSeconds = VULKAN_WAIT_TIMEOUT);
|
||||
void RefreshFenceStatus();
|
||||
};
|
||||
|
||||
@@ -206,7 +207,6 @@ public:
|
||||
|
||||
public:
|
||||
void SubmitActiveCmdBuffer(SemaphoreVulkan* signalSemaphore = nullptr);
|
||||
void WaitForCmdBuffer(CmdBufferVulkan* cmdBuffer, float timeInSecondsToWait = 1.0f);
|
||||
void RefreshFenceStatus(CmdBufferVulkan* skipCmdBuffer = nullptr)
|
||||
{
|
||||
_pool.RefreshFenceStatus(skipCmdBuffer);
|
||||
|
||||
@@ -49,4 +49,9 @@
|
||||
#define VULKAN_USE_QUERIES 1
|
||||
#endif
|
||||
|
||||
// Fence wait operation timeout in seconds
|
||||
#ifndef VULKAN_WAIT_TIMEOUT
|
||||
#define VULKAN_WAIT_TIMEOUT 5.0f
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2184,11 +2184,12 @@ FenceVulkan* FenceManagerVulkan::AllocateFence(bool createSignaled)
|
||||
return fence;
|
||||
}
|
||||
|
||||
bool FenceManagerVulkan::WaitForFence(FenceVulkan* fence, uint64 timeInNanoseconds) const
|
||||
bool FenceManagerVulkan::WaitForFence(FenceVulkan* fence, float timeoutSeconds) const
|
||||
{
|
||||
ASSERT(_usedFences.Contains(fence));
|
||||
ASSERT(!fence->IsSignaled);
|
||||
const VkResult result = vkWaitForFences(_device->Device, 1, &fence->Handle, true, timeInNanoseconds);
|
||||
uint64 timeNanoseconds = (uint64)((double)timeoutSeconds * 1000000000.0);
|
||||
const VkResult result = vkWaitForFences(_device->Device, 1, &fence->Handle, true, timeNanoseconds);
|
||||
LOG_VULKAN_RESULT(result);
|
||||
if (result == VK_SUCCESS)
|
||||
{
|
||||
@@ -2216,11 +2217,11 @@ void FenceManagerVulkan::ReleaseFence(FenceVulkan*& fence)
|
||||
fence = nullptr;
|
||||
}
|
||||
|
||||
void FenceManagerVulkan::WaitAndReleaseFence(FenceVulkan*& fence, uint64 timeInNanoseconds)
|
||||
void FenceManagerVulkan::WaitAndReleaseFence(FenceVulkan*& fence, float timeoutSeconds)
|
||||
{
|
||||
ScopeLock lock(_device->_fenceLock);
|
||||
if (!fence->IsSignaled)
|
||||
WaitForFence(fence, timeInNanoseconds);
|
||||
WaitForFence(fence, timeoutSeconds);
|
||||
ResetFence(fence);
|
||||
_usedFences.Remove(fence);
|
||||
_freeFences.Add(fence);
|
||||
|
||||
@@ -88,7 +88,7 @@ public:
|
||||
}
|
||||
|
||||
// Returns true if waiting timed out or failed, false otherwise.
|
||||
bool WaitForFence(FenceVulkan* fence, uint64 timeInNanoseconds) const;
|
||||
bool WaitForFence(FenceVulkan* fence, float timeoutSeconds = VULKAN_WAIT_TIMEOUT) const;
|
||||
|
||||
void ResetFence(FenceVulkan* fence) const;
|
||||
|
||||
@@ -96,7 +96,7 @@ public:
|
||||
void ReleaseFence(FenceVulkan*& fence);
|
||||
|
||||
// Sets the fence handle to null
|
||||
void WaitAndReleaseFence(FenceVulkan*& fence, uint64 timeInNanoseconds);
|
||||
void WaitAndReleaseFence(FenceVulkan*& fence, float timeoutSeconds = VULKAN_WAIT_TIMEOUT);
|
||||
|
||||
private:
|
||||
// Returns true if fence was signaled, otherwise false.
|
||||
|
||||
@@ -62,11 +62,7 @@ void QueueVulkan::Submit(CmdBufferVulkan* cmdBuffer, uint32 signalSemaphoresCoun
|
||||
const bool WaitForIdleOnSubmit = false;
|
||||
if (WaitForIdleOnSubmit)
|
||||
{
|
||||
// Use 200ms timeout
|
||||
bool success = _device->FenceManager.WaitForFence(fence, 200 * 1000 * 1000);
|
||||
ASSERT(success);
|
||||
ASSERT(_device->FenceManager.IsFenceSignaled(fence));
|
||||
cmdBuffer->GetOwner()->RefreshFenceStatus();
|
||||
cmdBuffer->Wait();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -2450,7 +2450,7 @@ void PhysicsBackend::SetRigidActorPose(void* actor, const Vector3& position, con
|
||||
if (kinematic)
|
||||
{
|
||||
auto actorPhysX = (PxRigidDynamic*)actor;
|
||||
if (actorPhysX->getActorFlags() & PxActorFlag::eDISABLE_SIMULATION)
|
||||
if (actorPhysX->getActorFlags() & PxActorFlag::eDISABLE_SIMULATION || !(actorPhysX->getRigidBodyFlags() & PxRigidBodyFlag::eKINEMATIC))
|
||||
{
|
||||
// Ensures the disabled kinematic actor ends up in the correct pose after enabling simulation
|
||||
actorPhysX->setGlobalPose(trans, wakeUp);
|
||||
|
||||
@@ -437,8 +437,8 @@ namespace FlaxEngine.GUI
|
||||
// Caret
|
||||
if (IsFocused && CaretPosition > -1)
|
||||
{
|
||||
float alpha = Mathf.Saturate(Mathf.Cos(_animateTime * CaretFlashSpeed) * 0.5f + 0.7f);
|
||||
alpha = alpha * alpha * alpha * alpha * alpha * alpha;
|
||||
float alpha = Mathf.Saturate(Mathf.Cos(_animateTime * CaretFlashSpeed) * 0.5f + 0.8f);
|
||||
alpha = alpha * alpha;
|
||||
Render2D.FillRectangle(CaretBounds, CaretColor * alpha);
|
||||
}
|
||||
|
||||
|
||||
@@ -310,8 +310,8 @@ namespace FlaxEngine.GUI
|
||||
// Caret
|
||||
if (IsFocused && CaretPosition > -1)
|
||||
{
|
||||
float alpha = Mathf.Saturate(Mathf.Cos(_animateTime * CaretFlashSpeed) * 0.5f + 0.7f);
|
||||
alpha = alpha * alpha * alpha * alpha * alpha * alpha;
|
||||
float alpha = Mathf.Saturate(Mathf.Cos(_animateTime * CaretFlashSpeed) * 0.5f + 0.8f);
|
||||
alpha = alpha * alpha;
|
||||
Render2D.FillRectangle(CaretBounds, CaretColor * alpha);
|
||||
}
|
||||
|
||||
|
||||
@@ -275,7 +275,7 @@ namespace FlaxEngine.GUI
|
||||
/// Gets or sets the speed of the caret flashing animation.
|
||||
/// </summary>
|
||||
[EditorDisplay("Caret Style"), EditorOrder(2021), Tooltip("The speed of the caret flashing animation.")]
|
||||
public float CaretFlashSpeed { get; set; } = 6.0f;
|
||||
public float CaretFlashSpeed { get; set; } = 6.5f;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the speed of the selection background flashing animation.
|
||||
|
||||
@@ -1300,10 +1300,10 @@ namespace Flax.Build.Bindings
|
||||
else if (parameterInfo.Type.IsRef && !parameterInfo.Type.IsConst)
|
||||
{
|
||||
// Non-const lvalue reference parameters needs to be passed via temporary value
|
||||
if (parameterInfo.IsOut || parameterInfo.IsRef)
|
||||
contents.Append(indent).AppendFormat("{2}& {0}Temp = {1};", parameterInfo.Name, param, parameterInfo.Type.ToString(false)).AppendLine();
|
||||
else
|
||||
if (parameterInfo.Type.Type is "String" or "StringView" or "StringAnsi" or "StringAnsiView" && parameterInfo.Type.GenericArgs == null)
|
||||
contents.Append(indent).AppendFormat("{2} {0}Temp = {1};", parameterInfo.Name, param, parameterInfo.Type.ToString(false)).AppendLine();
|
||||
else
|
||||
contents.Append(indent).AppendFormat("{2}& {0}Temp = {1};", parameterInfo.Name, param, parameterInfo.Type.ToString(false)).AppendLine();
|
||||
callParams += parameterInfo.Name;
|
||||
callParams += "Temp";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user