Fix code quality issues detected by PVS-Studio

This commit is contained in:
Wojtek Figat
2021-09-04 16:57:28 +02:00
parent 9c76d0c3cb
commit 53022ff013
30 changed files with 102 additions and 135 deletions

View File

@@ -61,8 +61,8 @@ namespace GameCookerImpl
MMethod* Internal_OnProgress = nullptr; MMethod* Internal_OnProgress = nullptr;
MMethod* Internal_OnCollectAssets = nullptr; MMethod* Internal_OnCollectAssets = nullptr;
bool IsRunning = false; volatile bool IsRunning = false;
bool IsThreadRunning = false; volatile bool IsThreadRunning = false;
int64 CancelFlag = 0; int64 CancelFlag = 0;
int64 CancelThreadFlag = 0; int64 CancelThreadFlag = 0;
ConditionVariable ThreadCond; ConditionVariable ThreadCond;

View File

@@ -102,7 +102,7 @@ void AnimationsSystem::Execute(TaskGraph* graph)
UnscaledTime = tickData.UnscaledTime.GetTotalSeconds(); UnscaledTime = tickData.UnscaledTime.GetTotalSeconds();
#if USE_EDITOR #if USE_EDITOR
// If debug flow is registered, then warm it up (eg. static cached method inside DebugFlow_ManagedWrapper) so it doesn;'t crash on highly multi-threaded code // If debug flow is registered, then warm it up (eg. static cached method inside DebugFlow_ManagedWrapper) so it doesn't crash on highly multi-threaded code
if (Animations::DebugFlow.IsBinded()) if (Animations::DebugFlow.IsBinded())
Animations::DebugFlow(nullptr, nullptr, 0, 0); Animations::DebugFlow(nullptr, nullptr, 0, 0);
#endif #endif

View File

@@ -131,11 +131,7 @@ Asset::LoadResult SceneAnimation::load()
auto& track = Tracks[i]; auto& track = Tracks[i];
track.Type = (Track::Types)stream.ReadByte(); track.Type = (Track::Types)stream.ReadByte();
// [Deprecated on 13.07.2019 expires on 13.11.2019] track.Flag = (Track::Flags)stream.ReadByte();
if (version == 6184 || version == 6183)
track.Flag = Track::Flags::None;
else
track.Flag = (Track::Flags)stream.ReadByte();
stream.ReadInt32(&track.ParentIndex); stream.ReadInt32(&track.ParentIndex);
stream.ReadInt32(&track.ChildrenCount); stream.ReadInt32(&track.ChildrenCount);
stream.ReadString(&track.Name, -13); stream.ReadString(&track.Name, -13);

View File

@@ -267,13 +267,8 @@ void SceneAnimationPlayer::Restore(SceneAnimation* anim, int32 stateIndexOffset)
switch (track.Type) switch (track.Type)
{ {
case SceneAnimation::Track::Types::Actor: case SceneAnimation::Track::Types::Actor:
case SceneAnimation::Track::Types::CameraCut:
{
auto& state = _tracks[stateIndexOffset + track.TrackStateIndex];
state.ManagedObject = state.Object ? state.Object.GetOrCreateManagedInstance() : nullptr;
break;
}
case SceneAnimation::Track::Types::Script: case SceneAnimation::Track::Types::Script:
case SceneAnimation::Track::Types::CameraCut:
{ {
auto& state = _tracks[stateIndexOffset + track.TrackStateIndex]; auto& state = _tracks[stateIndexOffset + track.TrackStateIndex];
state.ManagedObject = state.Object ? state.Object.GetOrCreateManagedInstance() : nullptr; state.ManagedObject = state.Object ? state.Object.GetOrCreateManagedInstance() : nullptr;

View File

@@ -61,7 +61,7 @@ public:
// [ThreadPoolTask] // [ThreadPoolTask]
bool HasReference(Object* resource) const override bool HasReference(Object* resource) const override
{ {
return _asset == resource || (_asset && _asset == resource); return _asset == resource;
} }
protected: protected:

View File

@@ -54,7 +54,7 @@ public:
// [ThreadPoolTask] // [ThreadPoolTask]
bool HasReference(Object* resource) const override bool HasReference(Object* resource) const override
{ {
return _asset == resource || (_asset && _asset == resource); return _asset == resource;
} }
protected: protected:

View File

@@ -61,6 +61,17 @@ public:
T* Value; T* Value;
ScopeCache() = delete;
ScopeCache(const ScopeCache& other) = delete;
ScopeCache& operator=(const ScopeCache& other) = delete;
ScopeCache& operator=(ScopeCache&& other) noexcept = delete;
ScopeCache(ScopeCache&& other) noexcept
{
Value = other.Value;
other.Value = nullptr;
}
~ScopeCache() ~ScopeCache()
{ {
_pool->Release(Value); _pool->Release(Value);

View File

@@ -123,7 +123,7 @@ public:
/// Sets the size of the box. /// Sets the size of the box.
/// </summary> /// </summary>
/// <param name="value">The box size to set.</param> /// <param name="value">The box size to set.</param>
void SetSize(const Vector3 value) void SetSize(const Vector3& value)
{ {
Vector3 center; Vector3 center;
GetCenter(center); GetCenter(center);

View File

@@ -1221,61 +1221,54 @@ ContainmentType CollisionsHelper::SphereContainsBox(const BoundingSphere& sphere
if (!BoxIntersectsSphere(box, sphere)) if (!BoxIntersectsSphere(box, sphere))
return ContainmentType::Disjoint; return ContainmentType::Disjoint;
const float radiussquared = sphere.Radius * sphere.Radius; const float radiusSquared = sphere.Radius * sphere.Radius;
vector.X = sphere.Center.X - box.Minimum.X; vector.X = sphere.Center.X - box.Minimum.X;
vector.Y = sphere.Center.Y - box.Maximum.Y; vector.Y = sphere.Center.Y - box.Maximum.Y;
vector.Z = sphere.Center.Z - box.Maximum.Z; vector.Z = sphere.Center.Z - box.Maximum.Z;
if (vector.LengthSquared() > radiusSquared)
if (vector.LengthSquared() > radiussquared)
return ContainmentType::Intersects; return ContainmentType::Intersects;
vector.X = sphere.Center.X - box.Maximum.X; vector.X = sphere.Center.X - box.Maximum.X;
vector.Y = sphere.Center.Y - box.Maximum.Y; vector.Y = sphere.Center.Y - box.Maximum.Y;
vector.Z = sphere.Center.Z - box.Maximum.Z; vector.Z = sphere.Center.Z - box.Maximum.Z;
if (vector.LengthSquared() > radiusSquared)
if (vector.LengthSquared() > radiussquared)
return ContainmentType::Intersects; return ContainmentType::Intersects;
vector.X = sphere.Center.X - box.Maximum.X; vector.X = sphere.Center.X - box.Maximum.X;
vector.Y = sphere.Center.Y - box.Minimum.Y; vector.Y = sphere.Center.Y - box.Minimum.Y;
vector.Z = sphere.Center.Z - box.Maximum.Z; vector.Z = sphere.Center.Z - box.Maximum.Z;
if (vector.LengthSquared() > radiusSquared)
if (vector.LengthSquared() > radiussquared)
return ContainmentType::Intersects; return ContainmentType::Intersects;
vector.X = sphere.Center.X - box.Minimum.X; vector.X = sphere.Center.X - box.Minimum.X;
vector.Y = sphere.Center.Y - box.Minimum.Y; vector.Y = sphere.Center.Y - box.Minimum.Y;
vector.Z = sphere.Center.Z - box.Maximum.Z; vector.Z = sphere.Center.Z - box.Maximum.Z;
if (vector.LengthSquared() > radiusSquared)
if (vector.LengthSquared() > radiussquared)
return ContainmentType::Intersects; return ContainmentType::Intersects;
vector.X = sphere.Center.X - box.Minimum.X; vector.X = sphere.Center.X - box.Minimum.X;
vector.Y = sphere.Center.Y - box.Maximum.Y; vector.Y = sphere.Center.Y - box.Maximum.Y;
vector.Z = sphere.Center.Z - box.Minimum.Z; vector.Z = sphere.Center.Z - box.Minimum.Z;
if (vector.LengthSquared() > radiusSquared)
if (vector.LengthSquared() > radiussquared)
return ContainmentType::Intersects; return ContainmentType::Intersects;
vector.X = sphere.Center.X - box.Maximum.X; vector.X = sphere.Center.X - box.Maximum.X;
vector.Y = sphere.Center.Y - box.Maximum.Y; vector.Y = sphere.Center.Y - box.Maximum.Y;
vector.Z = sphere.Center.Z - box.Minimum.Z; vector.Z = sphere.Center.Z - box.Minimum.Z;
if (vector.LengthSquared() > radiusSquared)
if (vector.LengthSquared() > radiussquared)
return ContainmentType::Intersects; return ContainmentType::Intersects;
vector.X = sphere.Center.X - box.Maximum.X; vector.X = sphere.Center.X - box.Maximum.X;
vector.Y = sphere.Center.Y - box.Minimum.Y; vector.Y = sphere.Center.Y - box.Minimum.Y;
vector.Z = sphere.Center.Z - box.Minimum.Z; vector.Z = sphere.Center.Z - box.Minimum.Z;
if (vector.LengthSquared() > radiusSquared)
if (vector.LengthSquared() > radiussquared)
return ContainmentType::Intersects; return ContainmentType::Intersects;
vector.X = sphere.Center.X - box.Minimum.X; vector.X = sphere.Center.X - box.Minimum.X;
vector.Y = sphere.Center.Y - box.Minimum.Y; vector.Y = sphere.Center.Y - box.Minimum.Y;
vector.Z = sphere.Center.Z - box.Minimum.Z; vector.Z = sphere.Center.Z - box.Minimum.Z;
if (vector.LengthSquared() > radiusSquared)
if (vector.LengthSquared() > radiussquared)
return ContainmentType::Intersects; return ContainmentType::Intersects;
return ContainmentType::Contains; return ContainmentType::Contains;

View File

@@ -1425,61 +1425,54 @@ namespace FlaxEngine
if (!BoxIntersectsSphere(ref box, ref sphere)) if (!BoxIntersectsSphere(ref box, ref sphere))
return ContainmentType.Disjoint; return ContainmentType.Disjoint;
float radiussquared = sphere.Radius * sphere.Radius; float radiusSquared = sphere.Radius * sphere.Radius;
vector.X = sphere.Center.X - box.Minimum.X; vector.X = sphere.Center.X - box.Minimum.X;
vector.Y = sphere.Center.Y - box.Maximum.Y; vector.Y = sphere.Center.Y - box.Maximum.Y;
vector.Z = sphere.Center.Z - box.Maximum.Z; vector.Z = sphere.Center.Z - box.Maximum.Z;
if (vector.LengthSquared > radiusSquared)
if (vector.LengthSquared > radiussquared)
return ContainmentType.Intersects; return ContainmentType.Intersects;
vector.X = sphere.Center.X - box.Maximum.X; vector.X = sphere.Center.X - box.Maximum.X;
vector.Y = sphere.Center.Y - box.Maximum.Y; vector.Y = sphere.Center.Y - box.Maximum.Y;
vector.Z = sphere.Center.Z - box.Maximum.Z; vector.Z = sphere.Center.Z - box.Maximum.Z;
if (vector.LengthSquared > radiusSquared)
if (vector.LengthSquared > radiussquared)
return ContainmentType.Intersects; return ContainmentType.Intersects;
vector.X = sphere.Center.X - box.Maximum.X; vector.X = sphere.Center.X - box.Maximum.X;
vector.Y = sphere.Center.Y - box.Minimum.Y; vector.Y = sphere.Center.Y - box.Minimum.Y;
vector.Z = sphere.Center.Z - box.Maximum.Z; vector.Z = sphere.Center.Z - box.Maximum.Z;
if (vector.LengthSquared > radiusSquared)
if (vector.LengthSquared > radiussquared)
return ContainmentType.Intersects; return ContainmentType.Intersects;
vector.X = sphere.Center.X - box.Minimum.X; vector.X = sphere.Center.X - box.Minimum.X;
vector.Y = sphere.Center.Y - box.Minimum.Y; vector.Y = sphere.Center.Y - box.Minimum.Y;
vector.Z = sphere.Center.Z - box.Maximum.Z; vector.Z = sphere.Center.Z - box.Maximum.Z;
if (vector.LengthSquared > radiusSquared)
if (vector.LengthSquared > radiussquared)
return ContainmentType.Intersects; return ContainmentType.Intersects;
vector.X = sphere.Center.X - box.Minimum.X; vector.X = sphere.Center.X - box.Minimum.X;
vector.Y = sphere.Center.Y - box.Maximum.Y; vector.Y = sphere.Center.Y - box.Maximum.Y;
vector.Z = sphere.Center.Z - box.Minimum.Z; vector.Z = sphere.Center.Z - box.Minimum.Z;
if (vector.LengthSquared > radiusSquared)
if (vector.LengthSquared > radiussquared)
return ContainmentType.Intersects; return ContainmentType.Intersects;
vector.X = sphere.Center.X - box.Maximum.X; vector.X = sphere.Center.X - box.Maximum.X;
vector.Y = sphere.Center.Y - box.Maximum.Y; vector.Y = sphere.Center.Y - box.Maximum.Y;
vector.Z = sphere.Center.Z - box.Minimum.Z; vector.Z = sphere.Center.Z - box.Minimum.Z;
if (vector.LengthSquared > radiusSquared)
if (vector.LengthSquared > radiussquared)
return ContainmentType.Intersects; return ContainmentType.Intersects;
vector.X = sphere.Center.X - box.Maximum.X; vector.X = sphere.Center.X - box.Maximum.X;
vector.Y = sphere.Center.Y - box.Minimum.Y; vector.Y = sphere.Center.Y - box.Minimum.Y;
vector.Z = sphere.Center.Z - box.Minimum.Z; vector.Z = sphere.Center.Z - box.Minimum.Z;
if (vector.LengthSquared > radiusSquared)
if (vector.LengthSquared > radiussquared)
return ContainmentType.Intersects; return ContainmentType.Intersects;
vector.X = sphere.Center.X - box.Minimum.X; vector.X = sphere.Center.X - box.Minimum.X;
vector.Y = sphere.Center.Y - box.Minimum.Y; vector.Y = sphere.Center.Y - box.Minimum.Y;
vector.Z = sphere.Center.Z - box.Minimum.Z; vector.Z = sphere.Center.Z - box.Minimum.Z;
if (vector.LengthSquared > radiusSquared)
if (vector.LengthSquared > radiussquared)
return ContainmentType.Intersects; return ContainmentType.Intersects;
return ContainmentType.Contains; return ContainmentType.Contains;

View File

@@ -446,7 +446,6 @@ void Mesh::Draw(const RenderContext& renderContext, const DrawInfo& info, float
drawCall.Geometry.VertexBuffersOffsets[2] = 0; drawCall.Geometry.VertexBuffersOffsets[2] = 0;
if (info.VertexColors && info.VertexColors[_lodIndex]) if (info.VertexColors && info.VertexColors[_lodIndex])
{ {
drawCall.Geometry.VertexBuffers[2] = info.VertexColors[_lodIndex];
// TODO: cache vertexOffset within the model LOD per-mesh // TODO: cache vertexOffset within the model LOD per-mesh
uint32 vertexOffset = 0; uint32 vertexOffset = 0;
for (int32 meshIndex = 0; meshIndex < _index; meshIndex++) for (int32 meshIndex = 0; meshIndex < _index; meshIndex++)

View File

@@ -154,7 +154,6 @@ bool RenderBuffers::Init(int32 width, int32 height)
_aspectRatio = static_cast<float>(width) / height; _aspectRatio = static_cast<float>(width) / height;
_viewport = Viewport(0, 0, static_cast<float>(width), static_cast<float>(height)); _viewport = Viewport(0, 0, static_cast<float>(width), static_cast<float>(height));
LastEyeAdaptationTime = 0; LastEyeAdaptationTime = 0;
LastEyeAdaptationTime = 0;
return result; return result;
} }

View File

@@ -489,8 +489,7 @@ int32 MipLevelsCount(int32 width, bool useMipLevels)
int32 result = 1; int32 result = 1;
while (width > 1) while (width > 1)
{ {
if (width > 1) width >>= 1;
width >>= 1;
result++; result++;
} }

View File

@@ -114,7 +114,7 @@ bool StreamingTexture::Create(const TextureHeader& header)
{ {
// Ensure that streaming doesn't go too low because the hardware expects the texture to be min in size of compressed texture block // Ensure that streaming doesn't go too low because the hardware expects the texture to be min in size of compressed texture block
int32 lastMip = header.MipLevels - 1; int32 lastMip = header.MipLevels - 1;
while (header.Width >> lastMip < 4 && header.Height >> lastMip < 4) while ((header.Width >> lastMip) < 4 && (header.Height >> lastMip) < 4)
lastMip--; lastMip--;
_minMipCountBlockCompressed = header.MipLevels - lastMip + 1; _minMipCountBlockCompressed = header.MipLevels - lastMip + 1;
} }

View File

@@ -180,7 +180,7 @@ void GPUContextDX11::ClearUA(GPUBuffer* buf, const Vector4& value)
void GPUContextDX11::ResetRenderTarget() void GPUContextDX11::ResetRenderTarget()
{ {
if (_rtCount > 0 || _uaOutput || _rtDepth) if (_rtCount != 0 || _uaOutput || _rtDepth)
{ {
_omDirtyFlag = true; _omDirtyFlag = true;
_rtCount = 0; _rtCount = 0;

View File

@@ -730,7 +730,7 @@ void GPUContextDX12::ClearUA(GPUBuffer* buf, const Vector4& value)
void GPUContextDX12::ResetRenderTarget() void GPUContextDX12::ResetRenderTarget()
{ {
if (_rtDepth != nullptr || _rtCount != 0 || _rtDepth) if (_rtDepth || _rtCount != 0)
{ {
_rtDirtyFlag = false; _rtDirtyFlag = false;
_psDirtyFlag = true; _psDirtyFlag = true;

View File

@@ -589,7 +589,7 @@ void GPUTextureDX12::initHandles()
} }
if (useUAV) if (useUAV)
{ {
if (isCubeMap || isArray) if (isCubeMap)
{ {
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY;
uavDesc.Texture2DArray.ArraySize = arraySize; uavDesc.Texture2DArray.ArraySize = arraySize;

View File

@@ -845,7 +845,7 @@ void GPUContextVulkan::ClearUA(GPUBuffer* buf, const Vector4& value)
void GPUContextVulkan::ResetRenderTarget() void GPUContextVulkan::ResetRenderTarget()
{ {
if (_rtDepth != nullptr || _rtCount != 0 || _rtDepth) if (_rtDepth || _rtCount != 0)
{ {
_rtDirtyFlag = true; _rtDirtyFlag = true;
_psDirtyFlag = true; _psDirtyFlag = true;
@@ -999,12 +999,9 @@ void GPUContextVulkan::BindIB(GPUBuffer* indexBuffer)
void GPUContextVulkan::BindSampler(int32 slot, GPUSampler* sampler) void GPUContextVulkan::BindSampler(int32 slot, GPUSampler* sampler)
{ {
ASSERT(slot >= 0 && slot < GPU_MAX_SR_BINDED); ASSERT(slot >= GPU_STATIC_SAMPLERS_COUNT && slot < GPU_MAX_SAMPLER_BINDED);
const auto handle = sampler ? ((GPUSamplerVulkan*)sampler)->Sampler : nullptr; const auto handle = sampler ? ((GPUSamplerVulkan*)sampler)->Sampler : nullptr;
if (_samplerHandles[slot] != handle) _samplerHandles[slot] = handle;
{
_samplerHandles[slot] = handle;
}
} }
void GPUContextVulkan::UpdateCB(GPUConstantBuffer* cb, const void* data) void GPUContextVulkan::UpdateCB(GPUConstantBuffer* cb, const void* data)

View File

@@ -1,21 +1,18 @@
// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. // Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
//
// TODO: Check defines so we can disable ENet // TODO: Check defines so we can disable ENet
#include "ENetDriver.h" #include "ENetDriver.h"
#include "Engine/Networking/NetworkConfig.h" #include "Engine/Networking/NetworkConfig.h"
#include "Engine/Networking/NetworkChannelType.h" #include "Engine/Networking/NetworkChannelType.h"
#include "Engine/Networking/NetworkEvent.h" #include "Engine/Networking/NetworkEvent.h"
#include "Engine/Networking/NetworkPeer.h" #include "Engine/Networking/NetworkPeer.h"
#include "Engine/Core/Log.h" #include "Engine/Core/Log.h"
#include "Engine/Core/Collections/Array.h" #include "Engine/Core/Collections/Array.h"
#define ENET_IMPLEMENTATION #define ENET_IMPLEMENTATION
#define _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <enet/enet.h> #include <enet/enet.h>
#undef _WINSOCK_DEPRECATED_NO_WARNINGS #undef _WINSOCK_DEPRECATED_NO_WARNINGS
#undef SendMessage #undef SendMessage
@@ -24,15 +21,15 @@ ENetPacketFlag ChannelTypeToPacketFlag(const NetworkChannelType channel)
int flag = 0; // Maybe use ENET_PACKET_FLAG_NO_ALLOCATE? int flag = 0; // Maybe use ENET_PACKET_FLAG_NO_ALLOCATE?
// Add reliable flag when it is "reliable" channel // Add reliable flag when it is "reliable" channel
if(channel > NetworkChannelType::UnreliableOrdered) if (channel > NetworkChannelType::UnreliableOrdered)
flag |= ENET_PACKET_FLAG_RELIABLE; flag |= ENET_PACKET_FLAG_RELIABLE;
// Use unsequenced flag when the flag is unreliable. We have to sequence all other packets. // Use unsequenced flag when the flag is unreliable. We have to sequence all other packets.
if(channel == NetworkChannelType::Unreliable) if (channel == NetworkChannelType::Unreliable)
flag |= ENET_PACKET_FLAG_UNSEQUENCED; flag |= ENET_PACKET_FLAG_UNSEQUENCED;
// Note that all reliable channels are exactly the same. TODO: How to handle unordered reliable packets...? // Note that all reliable channels are exactly the same. TODO: How to handle unordered reliable packets...?
return static_cast<ENetPacketFlag>(flag); return static_cast<ENetPacketFlag>(flag);
} }
@@ -48,7 +45,7 @@ void SendPacketToPeer(ENetPeer* peer, const NetworkChannelType channelType, cons
ENetPacket* packet = enet_packet_create(message.Buffer, message.Length, flag); ENetPacket* packet = enet_packet_create(message.Buffer, message.Length, flag);
// And send it! // And send it!
enet_peer_send (peer, 0, packet); enet_peer_send(peer, 0, packet);
// TODO: To reduce latency, we can use `enet_host_flush` to flush all packets. Maybe some API, like NetworkManager::FlushQueues()? // TODO: To reduce latency, we can use `enet_host_flush` to flush all packets. Maybe some API, like NetworkManager::FlushQueues()?
} }
@@ -59,7 +56,8 @@ void ENetDriver::Initialize(NetworkPeer* host, const NetworkConfig& config)
_config = config; _config = config;
_peerMap = Dictionary<uint32, void*>(); _peerMap = Dictionary<uint32, void*>();
if (enet_initialize () != 0) { if (enet_initialize() != 0)
{
LOG(Error, "Failed to initialize ENet driver!"); LOG(Error, "Failed to initialize ENet driver!");
} }
@@ -68,39 +66,39 @@ void ENetDriver::Initialize(NetworkPeer* host, const NetworkConfig& config)
void ENetDriver::Dispose() void ENetDriver::Dispose()
{ {
if(_peer) if (_peer)
enet_peer_disconnect_now((ENetPeer*)_peer, 0); enet_peer_disconnect_now((ENetPeer*)_peer, 0);
enet_host_destroy((ENetHost*)_host); enet_host_destroy((ENetHost*)_host);
enet_deinitialize(); enet_deinitialize();
_peerMap.Clear(); _peerMap.Clear();
_peerMap = {}; _peerMap = {};
_peer = nullptr; _peer = nullptr;
_host = nullptr; _host = nullptr;
LOG(Info, "ENet driver stopped!"); LOG(Info, "ENet driver stopped!");
} }
bool ENetDriver::Listen() bool ENetDriver::Listen()
{ {
ENetAddress address = {0}; ENetAddress address = { 0 };
address.port = _config.Port; address.port = _config.Port;
address.host = ENET_HOST_ANY; address.host = ENET_HOST_ANY;
// Set host address if needed // Set host address if needed
if(_config.Address != String("any")) if (_config.Address != String("any"))
enet_address_set_host(&address, _config.Address.ToStringAnsi().GetText()); enet_address_set_host(&address, _config.Address.ToStringAnsi().GetText());
// Create ENet host // Create ENet host
_host = enet_host_create(&address, _config.ConnectionsLimit, 1, 0, 0); _host = enet_host_create(&address, _config.ConnectionsLimit, 1, 0, 0);
if(_host == nullptr) if (_host == nullptr)
{ {
LOG(Error, "Failed to initialize ENet host!"); LOG(Error, "Failed to initialize ENet host!");
return false; return false;
} }
LOG(Info, "Created ENet server!"); LOG(Info, "Created ENet server!");
return true; return true;
} }
@@ -109,21 +107,21 @@ bool ENetDriver::Connect()
{ {
LOG(Info, "Connecting using ENet..."); LOG(Info, "Connecting using ENet...");
ENetAddress address = {0}; ENetAddress address = { 0 };
address.port = _config.Port; address.port = _config.Port;
enet_address_set_host(&address, _config.Address.ToStringAnsi().GetText()); enet_address_set_host(&address, _config.Address.ToStringAnsi().GetText());
// Create ENet host // Create ENet host
_host = enet_host_create(nullptr, 1, 1, 0, 0); _host = enet_host_create(nullptr, 1, 1, 0, 0);
if(_host == nullptr) if (_host == nullptr)
{ {
LOG(Error, "Failed to initialize ENet host!"); LOG(Error, "Failed to initialize ENet host!");
return false; return false;
} }
// Create ENet peer/connect to the server // Create ENet peer/connect to the server
_peer = enet_host_connect((ENetHost*)_host, &address, 1, 0); _peer = enet_host_connect((ENetHost*)_host, &address, 1, 0);
if(_peer == nullptr) if (_peer == nullptr)
{ {
LOG(Error, "Failed to create ENet host!"); LOG(Error, "Failed to create ENet host!");
enet_host_destroy((ENetHost*)_host); enet_host_destroy((ENetHost*)_host);
@@ -135,13 +133,11 @@ bool ENetDriver::Connect()
void ENetDriver::Disconnect() void ENetDriver::Disconnect()
{ {
ASSERT(_peer != nullptr); if (_peer)
if(_peer)
{ {
enet_peer_disconnect_now((ENetPeer*)_peer, 0); enet_peer_disconnect_now((ENetPeer*)_peer, 0);
_peer = nullptr; _peer = nullptr;
LOG(Info, "Disconnected"); LOG(Info, "Disconnected");
} }
} }
@@ -149,9 +145,9 @@ void ENetDriver::Disconnect()
void ENetDriver::Disconnect(const NetworkConnection& connection) void ENetDriver::Disconnect(const NetworkConnection& connection)
{ {
const int connectionId = connection.ConnectionId; const int connectionId = connection.ConnectionId;
void* peer = nullptr; void* peer = nullptr;
if(_peerMap.TryGet(connectionId, peer)) if (_peerMap.TryGet(connectionId, peer))
{ {
enet_peer_disconnect_now((ENetPeer*)peer, 0); enet_peer_disconnect_now((ENetPeer*)peer, 0);
_peerMap.Remove(connectionId); _peerMap.Remove(connectionId);
@@ -167,39 +163,39 @@ bool ENetDriver::PopEvent(NetworkEvent* eventPtr)
ENetEvent event; ENetEvent event;
const int result = enet_host_service((ENetHost*)_host, &event, 0); const int result = enet_host_service((ENetHost*)_host, &event, 0);
if(result < 0) if (result < 0)
LOG(Error, "Failed to check ENet events!"); LOG(Error, "Failed to check ENet events!");
if(result > 0) if (result > 0)
{ {
// Copy sender data // Copy sender data
const uint32 connectionId = enet_peer_get_id(event.peer); const uint32 connectionId = enet_peer_get_id(event.peer);
eventPtr->Sender = NetworkConnection(); eventPtr->Sender = NetworkConnection();
eventPtr->Sender.ConnectionId = connectionId; eventPtr->Sender.ConnectionId = connectionId;
switch(event.type) switch (event.type)
{ {
case ENET_EVENT_TYPE_CONNECT: case ENET_EVENT_TYPE_CONNECT:
eventPtr->EventType = NetworkEventType::Connected; eventPtr->EventType = NetworkEventType::Connected;
if(IsServer()) if (IsServer())
_peerMap.Add(connectionId, event.peer); _peerMap.Add(connectionId, event.peer);
break; break;
case ENET_EVENT_TYPE_DISCONNECT: case ENET_EVENT_TYPE_DISCONNECT:
eventPtr->EventType = NetworkEventType::Disconnected; eventPtr->EventType = NetworkEventType::Disconnected;
if(IsServer()) if (IsServer())
_peerMap.Remove(connectionId); _peerMap.Remove(connectionId);
break; break;
case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT: case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT:
eventPtr->EventType = NetworkEventType::Timeout; eventPtr->EventType = NetworkEventType::Timeout;
if(IsServer()) if (IsServer())
_peerMap.Remove(connectionId); _peerMap.Remove(connectionId);
break; break;
case ENET_EVENT_TYPE_RECEIVE: case ENET_EVENT_TYPE_RECEIVE:
eventPtr->EventType = NetworkEventType::Message; eventPtr->EventType = NetworkEventType::Message;
@@ -208,8 +204,9 @@ bool ENetDriver::PopEvent(NetworkEvent* eventPtr)
eventPtr->Message.Length = event.packet->dataLength; eventPtr->Message.Length = event.packet->dataLength;
Memory::CopyItems(eventPtr->Message.Buffer, event.packet->data, event.packet->dataLength); Memory::CopyItems(eventPtr->Message.Buffer, event.packet->data, event.packet->dataLength);
break; break;
default: break; default:
break;
} }
return true; // Event return true; // Event
} }
@@ -220,7 +217,7 @@ bool ENetDriver::PopEvent(NetworkEvent* eventPtr)
void ENetDriver::SendMessage(const NetworkChannelType channelType, const NetworkMessage& message) void ENetDriver::SendMessage(const NetworkChannelType channelType, const NetworkMessage& message)
{ {
ASSERT(IsServer() == false); ASSERT(IsServer() == false);
SendPacketToPeer((ENetPeer*)_peer, channelType, message); SendPacketToPeer((ENetPeer*)_peer, channelType, message);
} }
@@ -231,20 +228,20 @@ void ENetDriver::SendMessage(NetworkChannelType channelType, const NetworkMessag
ENetPeer* peer = *(ENetPeer**)_peerMap.TryGet(target.ConnectionId); ENetPeer* peer = *(ENetPeer**)_peerMap.TryGet(target.ConnectionId);
ASSERT(peer != nullptr); ASSERT(peer != nullptr);
ASSERT(peer->state == ENET_PEER_STATE_CONNECTED); ASSERT(peer->state == ENET_PEER_STATE_CONNECTED);
SendPacketToPeer(peer, channelType, message); SendPacketToPeer(peer, channelType, message);
} }
void ENetDriver::SendMessage(const NetworkChannelType channelType, const NetworkMessage& message, const Array<NetworkConnection, HeapAllocation>& targets) void ENetDriver::SendMessage(const NetworkChannelType channelType, const NetworkMessage& message, const Array<NetworkConnection, HeapAllocation>& targets)
{ {
ASSERT(IsServer()); ASSERT(IsServer());
for(NetworkConnection target : targets) for (NetworkConnection target : targets)
{ {
ENetPeer* peer = *(ENetPeer**)_peerMap.TryGet(target.ConnectionId); ENetPeer* peer = *(ENetPeer**)_peerMap.TryGet(target.ConnectionId);
ASSERT(peer != nullptr); ASSERT(peer != nullptr);
ASSERT(peer->state == ENET_PEER_STATE_CONNECTED); ASSERT(peer->state == ENET_PEER_STATE_CONNECTED);
SendPacketToPeer(peer, channelType, message); SendPacketToPeer(peer, channelType, message);
} }
} }

View File

@@ -31,9 +31,9 @@ void ParticleEffectParameter::Init(ParticleEffect* effect, int32 emitterIndex, i
bool ParticleEffectParameter::IsValid() const bool ParticleEffectParameter::IsValid() const
{ {
return _effect->ParticleSystem && return _effect->ParticleSystem &&
_effect->Instance.Emitters.Count() > _emitterIndex &&
_effect->ParticleSystem->Emitters[_emitterIndex] && _effect->ParticleSystem->Emitters[_emitterIndex] &&
_effect->ParticleSystem->Emitters[_emitterIndex]->Graph.Parameters.Count() > _paramIndex && _effect->ParticleSystem->Emitters[_emitterIndex]->Graph.Parameters.Count() > _paramIndex;
_effect->Instance.Emitters.Count() > _emitterIndex;
} }
ParticleEmitter* ParticleEffectParameter::GetEmitter() const ParticleEmitter* ParticleEffectParameter::GetEmitter() const

View File

@@ -103,7 +103,6 @@ bool FileSystemBase::IsRelative(const StringView& path)
const bool isRooted = const bool isRooted =
(path.Length() >= 2 && StringUtils::IsAlpha(path[0]) && path[1] == ':') || (path.Length() >= 2 && StringUtils::IsAlpha(path[0]) && path[1] == ':') ||
path.StartsWith(StringView(TEXT("\\\\"), 2), StringSearchCase::CaseSensitive) || path.StartsWith(StringView(TEXT("\\\\"), 2), StringSearchCase::CaseSensitive) ||
path.StartsWith('/') ||
path.StartsWith('\\') || path.StartsWith('\\') ||
path.StartsWith('/'); path.StartsWith('/');
return !isRooted; return !isRooted;

View File

@@ -1941,7 +1941,8 @@ void Render2D::DrawTexturedTriangles(GPUTexture* t, const Span<Vector2>& vertice
void Render2D::DrawTexturedTriangles(GPUTexture* t, const Span<Vector2>& vertices, const Span<Vector2>& uvs, const Span<Color>& colors) void Render2D::DrawTexturedTriangles(GPUTexture* t, const Span<Vector2>& vertices, const Span<Vector2>& uvs, const Span<Color>& colors)
{ {
RENDER2D_CHECK_RENDERING_STATE; RENDER2D_CHECK_RENDERING_STATE;
CHECK(vertices.Length() == uvs.Length() == colors.Length()) CHECK(vertices.Length() == uvs.Length());
CHECK(vertices.Length() == colors.Length());
Render2DDrawCall& drawCall = DrawCalls.AddOne(); Render2DDrawCall& drawCall = DrawCalls.AddOne();
drawCall.Type = DrawCallType::FillTexture; drawCall.Type = DrawCallType::FillTexture;

View File

@@ -636,7 +636,7 @@ DRAW:
auto& drawCall = DrawCalls[list.Indices[batch.StartIndex]]; auto& drawCall = DrawCalls[list.Indices[batch.StartIndex]];
int32 vbCount = 0; int32 vbCount = 0;
while (drawCall.Geometry.VertexBuffers[vbCount] && vbCount < ARRAY_COUNT(drawCall.Geometry.VertexBuffers)) while (vbCount < ARRAY_COUNT(drawCall.Geometry.VertexBuffers) && drawCall.Geometry.VertexBuffers[vbCount])
{ {
vb[vbCount] = drawCall.Geometry.VertexBuffers[vbCount]; vb[vbCount] = drawCall.Geometry.VertexBuffers[vbCount];
vbOffsets[vbCount] = drawCall.Geometry.VertexBuffersOffsets[vbCount]; vbOffsets[vbCount] = drawCall.Geometry.VertexBuffersOffsets[vbCount];
@@ -687,7 +687,7 @@ DRAW:
auto& drawCall = batch.DrawCall; auto& drawCall = batch.DrawCall;
int32 vbCount = 0; int32 vbCount = 0;
while (drawCall.Geometry.VertexBuffers[vbCount] && vbCount < ARRAY_COUNT(drawCall.Geometry.VertexBuffers)) while (vbCount < ARRAY_COUNT(drawCall.Geometry.VertexBuffers) && drawCall.Geometry.VertexBuffers[vbCount])
{ {
vb[vbCount] = drawCall.Geometry.VertexBuffers[vbCount]; vb[vbCount] = drawCall.Geometry.VertexBuffers[vbCount];
vbOffsets[vbCount] = drawCall.Geometry.VertexBuffersOffsets[vbCount]; vbOffsets[vbCount] = drawCall.Geometry.VertexBuffersOffsets[vbCount];

View File

@@ -113,7 +113,8 @@ bool VolumetricFogPass::Init(RenderContext& renderContext, GPUContext* context,
// Check if already prepared for this frame // Check if already prepared for this frame
if (renderContext.Buffers->LastFrameVolumetricFog == Engine::FrameCount) if (renderContext.Buffers->LastFrameVolumetricFog == Engine::FrameCount)
{ {
fog->GetVolumetricFogOptions(options); if (fog)
fog->GetVolumetricFogOptions(options);
return false; return false;
} }

View File

@@ -175,8 +175,6 @@ VariantType MUtils::UnboxVariantType(MonoType* monoType)
return VariantType(VariantType::Float); return VariantType(VariantType::Float);
if (klass == mono_get_double_class() || monoType->type == MONO_TYPE_R8) if (klass == mono_get_double_class() || monoType->type == MONO_TYPE_R8)
return VariantType(VariantType::Double); return VariantType(VariantType::Double);
if (klass == mono_get_double_class() || monoType->type == MONO_TYPE_BOOLEAN)
return VariantType(VariantType::Double);
if (klass == mono_get_string_class() || monoType->type == MONO_TYPE_STRING) if (klass == mono_get_string_class() || monoType->type == MONO_TYPE_STRING)
return VariantType(VariantType::String); return VariantType(VariantType::String);
if (klass == mono_get_intptr_class() || klass == mono_get_uintptr_class() || monoType->type == MONO_TYPE_PTR) if (klass == mono_get_intptr_class() || klass == mono_get_uintptr_class() || monoType->type == MONO_TYPE_PTR)

View File

@@ -417,10 +417,7 @@ void JsonWriter::SceneObject(::SceneObject* obj)
} }
else else
{ {
if (prefab) LOG(Warning, "Missing prefab with id={0}.", obj->GetPrefabID());
LOG(Warning, "Failed to load prefab {0}.", prefab->ToString());
else
LOG(Warning, "Missing prefab with id={0}.", obj->GetPrefabID());
} }
} }

View File

@@ -78,7 +78,6 @@ public:
/// <returns>The pointer to the data in memory.</returns> /// <returns>The pointer to the data in memory.</returns>
void* Read(uint32 bytes) void* Read(uint32 bytes)
{ {
ASSERT(bytes >= 0);
ASSERT(GetLength() - GetPosition() >= bytes); ASSERT(GetLength() - GetPosition() >= bytes);
const auto result = (void*)_position; const auto result = (void*)_position;
_position += bytes; _position += bytes;

View File

@@ -131,8 +131,6 @@ void MemoryWriteStream::SetPosition(uint32 seek)
void MemoryWriteStream::WriteBytes(const void* data, uint32 bytes) void MemoryWriteStream::WriteBytes(const void* data, uint32 bytes)
{ {
ASSERT(bytes >= 0);
// Calculate current position // Calculate current position
const uint32 position = GetPosition(); const uint32 position = GetPosition();

View File

@@ -72,8 +72,6 @@ void ReadStream::ReadString(String* data)
} }
data->ReserveSpace(length); data->ReserveSpace(length);
if (length == 0)
return;
Char* ptr = data->Get(); Char* ptr = data->Get();
ASSERT(ptr != nullptr); ASSERT(ptr != nullptr);
Read(ptr, length); Read(ptr, length);
@@ -92,8 +90,6 @@ void ReadStream::ReadString(String* data, int16 lock)
} }
data->ReserveSpace(length); data->ReserveSpace(length);
if (length == 0)
return;
Char* ptr = data->Get(); Char* ptr = data->Get();
ASSERT(ptr != nullptr); ASSERT(ptr != nullptr);
Read(ptr, length); Read(ptr, length);

View File

@@ -147,7 +147,6 @@ namespace FlaxEngine
{ {
bool isRooted = (path.Length >= 2 && char.IsLetterOrDigit(path[0]) && path[1] == ':') || bool isRooted = (path.Length >= 2 && char.IsLetterOrDigit(path[0]) && path[1] == ':') ||
path.StartsWith("\\\\") || path.StartsWith("\\\\") ||
path.StartsWith("/") ||
path.StartsWith("\\") || path.StartsWith("\\") ||
path.StartsWith("/"); path.StartsWith("/");
return !isRooted; return !isRooted;