Merge branch 'FlaxEngine:master' into fix/nullable
This commit is contained in:
7
.github/workflows/build_linux.yml
vendored
7
.github/workflows/build_linux.yml
vendored
@@ -10,15 +10,12 @@ jobs:
|
||||
# Editor
|
||||
editor-linux:
|
||||
name: Editor (Linux, Development x64)
|
||||
runs-on: "ubuntu-20.04"
|
||||
runs-on: "ubuntu-24.04"
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v3
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo rm -f /etc/apt/sources.list.d/*
|
||||
sudo cp -f .github/workflows/build_linux_sources.list /etc/apt/sources.list
|
||||
sudo apt-get update
|
||||
sudo apt-get install libx11-dev libxcursor-dev libxinerama-dev build-essential gettext libtool libtool-bin libpulse-dev libasound2-dev libjack-dev portaudio19-dev
|
||||
- name: Setup Vulkan
|
||||
uses: ./.github/actions/vulkan
|
||||
@@ -41,7 +38,7 @@ jobs:
|
||||
# Game
|
||||
game-linux:
|
||||
name: Game (Linux, Release x64)
|
||||
runs-on: "ubuntu-20.04"
|
||||
runs-on: "ubuntu-24.04"
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v3
|
||||
|
||||
4
.github/workflows/build_linux_sources.list
vendored
4
.github/workflows/build_linux_sources.list
vendored
@@ -1,4 +0,0 @@
|
||||
deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse
|
||||
deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse
|
||||
deb http://archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
|
||||
deb http://archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse
|
||||
10
.github/workflows/cd.yml
vendored
10
.github/workflows/cd.yml
vendored
@@ -76,7 +76,7 @@ jobs:
|
||||
# Linux
|
||||
package-linux-editor:
|
||||
name: Editor (Linux)
|
||||
runs-on: "ubuntu-20.04"
|
||||
runs-on: "ubuntu-24.04"
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v3
|
||||
@@ -86,9 +86,6 @@ jobs:
|
||||
git lfs pull
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo rm -f /etc/apt/sources.list.d/*
|
||||
sudo cp -f .github/workflows/build_linux_sources.list /etc/apt/sources.list
|
||||
sudo apt-get update
|
||||
sudo apt-get install libx11-dev libxcursor-dev libxinerama-dev build-essential gettext libtool libtool-bin libpulse-dev libasound2-dev libjack-dev portaudio19-dev
|
||||
- name: Setup Vulkan
|
||||
uses: ./.github/actions/vulkan
|
||||
@@ -110,7 +107,7 @@ jobs:
|
||||
path: Output/FlaxEditorLinux.zip
|
||||
package-linux-game:
|
||||
name: Game (Linux)
|
||||
runs-on: "ubuntu-20.04"
|
||||
runs-on: "ubuntu-24.04"
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v3
|
||||
@@ -120,9 +117,6 @@ jobs:
|
||||
git lfs pull
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo rm -f /etc/apt/sources.list.d/*
|
||||
sudo cp -f .github/workflows/build_linux_sources.list /etc/apt/sources.list
|
||||
sudo apt-get update
|
||||
sudo apt-get install libx11-dev libxcursor-dev libxinerama-dev build-essential gettext libtool libtool-bin libpulse-dev libasound2-dev libjack-dev portaudio19-dev
|
||||
- name: Setup Vulkan
|
||||
uses: ./.github/actions/vulkan
|
||||
|
||||
5
.github/workflows/tests.yml
vendored
5
.github/workflows/tests.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
# Tests on Linux
|
||||
tests-linux:
|
||||
name: Tests (Linux)
|
||||
runs-on: "ubuntu-20.04"
|
||||
runs-on: "ubuntu-24.04"
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v3
|
||||
@@ -28,9 +28,6 @@ jobs:
|
||||
git lfs pull
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo rm -f /etc/apt/sources.list.d/*
|
||||
sudo cp -f .github/workflows/build_linux_sources.list /etc/apt/sources.list
|
||||
sudo apt-get update
|
||||
sudo apt-get install libx11-dev libxcursor-dev libxinerama-dev build-essential gettext libtool libtool-bin libpulse-dev libasound2-dev libjack-dev portaudio19-dev
|
||||
- name: Build
|
||||
run: |
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"Major": 1,
|
||||
"Minor": 9,
|
||||
"Revision": 0,
|
||||
"Build": 6604
|
||||
"Build": 6605
|
||||
},
|
||||
"Company": "Flax",
|
||||
"Copyright": "Copyright (c) 2012-2024 Wojciech Figat. All rights reserved.",
|
||||
|
||||
@@ -275,7 +275,7 @@ bool DeployDataStep::Perform(CookingData& data)
|
||||
DEPLOY_NATIVE_FILE("libmonosgen-2.0.dylib");
|
||||
DEPLOY_NATIVE_FILE("libSystem.IO.Compression.Native.dylib");
|
||||
DEPLOY_NATIVE_FILE("libSystem.Native.dylib");
|
||||
DEPLOY_NATIVE_FILE("libSystem.NET.Security.Native.dylib");
|
||||
DEPLOY_NATIVE_FILE("libSystem.Net.Security.Native.dylib");
|
||||
DEPLOY_NATIVE_FILE("libSystem.Security.Cryptography.Native.Apple.dylib");
|
||||
break;
|
||||
#undef DEPLOY_NATIVE_FILE
|
||||
|
||||
@@ -950,7 +950,7 @@ namespace FlaxEditor.Modules
|
||||
MainWindow = null;
|
||||
|
||||
// Capture project icon screenshot (not in play mode and if editor was used for some time)
|
||||
if (!Editor.StateMachine.IsPlayMode && Time.TimeSinceStartup >= 5.0f)
|
||||
if (!Editor.StateMachine.IsPlayMode && Time.TimeSinceStartup >= 5.0f && GPUDevice.Instance?.RendererType != RendererType.Null)
|
||||
{
|
||||
Editor.Log("Capture project icon screenshot");
|
||||
_projectIconScreenshotTimeout = Time.TimeSinceStartup + 0.8f; // wait 800ms for a screenshot task
|
||||
|
||||
@@ -80,12 +80,12 @@ public:
|
||||
public:
|
||||
bool operator==(const Color32& other) const
|
||||
{
|
||||
return R == other.R && G == other.G && B == other.B && A == other.A;
|
||||
return Raw == other.Raw;
|
||||
}
|
||||
|
||||
bool operator!=(const Color32& other) const
|
||||
{
|
||||
return R != other.R || G != other.G || B != other.B || A != other.A;
|
||||
return Raw != other.Raw;
|
||||
}
|
||||
|
||||
Color32 operator+(const Color32& b) const
|
||||
@@ -138,7 +138,7 @@ public:
|
||||
// Returns true if color is fully transparent (all components are equal zero).
|
||||
bool IsTransparent() const
|
||||
{
|
||||
return R + G + B + A == 0;
|
||||
return Raw == 0;
|
||||
}
|
||||
|
||||
// Returns true if color has opacity channel in use (different from 255).
|
||||
@@ -222,7 +222,7 @@ namespace Math
|
||||
{
|
||||
FORCE_INLINE static bool NearEqual(const Color32& a, const Color32& b)
|
||||
{
|
||||
return a == b;
|
||||
return a.Raw == b.Raw;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -173,8 +173,8 @@ public:
|
||||
/// <summary>
|
||||
/// Frequency of shadow updates at the maximum distance from the view at which shadows are still rendered. This value is multiplied by ShadowsUpdateRate and allows scaling the update rate in-between the shadow range. For example, if light is near view, it will get normal shadow updates but will reduce this rate when far from view. See ShadowsUpdateRate to learn more.
|
||||
/// </summary>
|
||||
API_FIELD(Attributes="EditorOrder(105), EditorDisplay(\"Shadow\", \"Update Rate At Distance\"), Limit(0.0f, 1.0f)")
|
||||
float ShadowsUpdateRateAtDistance = 0.5f;
|
||||
API_FIELD(Attributes="EditorOrder(101), EditorDisplay(\"Shadow\", \"Update Rate At Distance\"), Limit(0.0f, 1.0f)")
|
||||
float ShadowsUpdateRateAtDistance = 1.0f;
|
||||
|
||||
/// <summary>
|
||||
/// Defines the resolution of the shadow map texture used to draw objects projection from light-point-of-view. Higher values increase shadow quality at cost of performance.
|
||||
|
||||
@@ -330,6 +330,7 @@ public:
|
||||
for (auto it = Lights.Begin(); it.IsNotEnd(); ++it)
|
||||
{
|
||||
auto& atlasLight = it->Value;
|
||||
atlasLight.StaticState = ShadowAtlasLight::Unused;
|
||||
atlasLight.Cache.StaticValid = false;
|
||||
for (int32 i = 0; i < atlasLight.TilesCount; i++)
|
||||
atlasLight.Tiles[i].ClearDynamic();
|
||||
@@ -370,7 +371,8 @@ public:
|
||||
for (auto& e : Lights)
|
||||
{
|
||||
auto& atlasLight = e.Value;
|
||||
if (atlasLight.StaticState == ShadowAtlasLight::CopyStaticShadow && atlasLight.Bounds.Intersects(bounds))
|
||||
if ((atlasLight.StaticState == ShadowAtlasLight::CopyStaticShadow || atlasLight.StaticState == ShadowAtlasLight::NoStaticGeometry)
|
||||
&& atlasLight.Bounds.Intersects(bounds))
|
||||
{
|
||||
// Invalidate static shadow
|
||||
atlasLight.Cache.StaticValid = false;
|
||||
@@ -719,8 +721,14 @@ bool ShadowsPass::SetupLight(ShadowsCustomBuffer& shadows, RenderContext& render
|
||||
}
|
||||
switch (atlasLight.StaticState)
|
||||
{
|
||||
case ShadowAtlasLight::CopyStaticShadow:
|
||||
case ShadowAtlasLight::NoStaticGeometry:
|
||||
// Light was modified so attempt to find the static shadow again
|
||||
if (!atlasLight.Cache.StaticValid && atlasLight.HasStaticShadowContext)
|
||||
{
|
||||
atlasLight.StaticState = ShadowAtlasLight::WaitForGeometryCheck;
|
||||
break;
|
||||
}
|
||||
case ShadowAtlasLight::CopyStaticShadow:
|
||||
case ShadowAtlasLight::FailedToInsertTiles:
|
||||
// Skip collecting static draws
|
||||
atlasLight.HasStaticShadowContext = false;
|
||||
@@ -728,7 +736,7 @@ bool ShadowsPass::SetupLight(ShadowsCustomBuffer& shadows, RenderContext& render
|
||||
}
|
||||
if (atlasLight.HasStaticShadowContext)
|
||||
{
|
||||
// If rendering finds any static draws then it's set to true
|
||||
// If rendering finds any static draws then it will be set to true
|
||||
for (auto& tile : atlasLight.Tiles)
|
||||
tile.HasStaticGeometry = false;
|
||||
}
|
||||
@@ -1367,7 +1375,7 @@ void ShadowsPass::RenderShadowMaps(RenderContextBatch& renderContextBatch)
|
||||
const ShadowsCustomBuffer* shadowsPtr = renderContext.Buffers->FindCustomBuffer<ShadowsCustomBuffer>(TEXT("Shadows"), false);
|
||||
if (shadowsPtr == nullptr || shadowsPtr->Lights.IsEmpty() || shadowsPtr->LastFrameUsed != Engine::FrameCount)
|
||||
return;
|
||||
PROFILE_GPU_CPU("ShadowMaps");
|
||||
PROFILE_GPU_CPU("Shadow Maps");
|
||||
const ShadowsCustomBuffer& shadows = *shadowsPtr;
|
||||
GPUContext* context = GPUDevice::Instance->GetMainContext();
|
||||
context->ResetSR();
|
||||
@@ -1384,9 +1392,29 @@ void ShadowsPass::RenderShadowMaps(RenderContextBatch& renderContextBatch)
|
||||
for (auto& e : shadows.Lights)
|
||||
{
|
||||
ShadowAtlasLight& atlasLight = e.Value;
|
||||
if (atlasLight.StaticState != ShadowAtlasLight::UpdateStaticShadow || !atlasLight.HasStaticShadowContext || atlasLight.ContextCount == 0)
|
||||
if (!atlasLight.HasStaticShadowContext || atlasLight.ContextCount == 0)
|
||||
continue;
|
||||
int32 contextIndex = 0;
|
||||
|
||||
if (atlasLight.StaticState == ShadowAtlasLight::WaitForGeometryCheck)
|
||||
{
|
||||
// Check for any static geometry to use in static shadow map
|
||||
for (int32 tileIndex = 0; tileIndex < atlasLight.TilesCount; tileIndex++)
|
||||
{
|
||||
ShadowAtlasLightTile& tile = atlasLight.Tiles[tileIndex];
|
||||
contextIndex++; // Skip dynamic context
|
||||
auto& shadowContextStatic = renderContextBatch.Contexts[atlasLight.ContextIndex + contextIndex++];
|
||||
if (!shadowContextStatic.List->DrawCallsLists[(int32)DrawCallsListType::Depth].IsEmpty() || !shadowContextStatic.List->ShadowDepthDrawCallsList.IsEmpty())
|
||||
{
|
||||
tile.HasStaticGeometry = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (atlasLight.StaticState != ShadowAtlasLight::UpdateStaticShadow)
|
||||
continue;
|
||||
|
||||
contextIndex = 0;
|
||||
for (int32 tileIndex = 0; tileIndex < atlasLight.TilesCount; tileIndex++)
|
||||
{
|
||||
ShadowAtlasLightTile& tile = atlasLight.Tiles[tileIndex];
|
||||
|
||||
BIN
Source/Platforms/Linux/Binaries/ThirdParty/x64/libIrrXML.a
(Stored with Git LFS)
vendored
BIN
Source/Platforms/Linux/Binaries/ThirdParty/x64/libIrrXML.a
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
Source/Platforms/Linux/Binaries/ThirdParty/x64/libassimp.a
(Stored with Git LFS)
vendored
BIN
Source/Platforms/Linux/Binaries/ThirdParty/x64/libassimp.a
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
Source/Platforms/Mac/Binaries/ThirdParty/ARM64/libIrrXML.a
(Stored with Git LFS)
vendored
BIN
Source/Platforms/Mac/Binaries/ThirdParty/ARM64/libIrrXML.a
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
Source/Platforms/Mac/Binaries/ThirdParty/ARM64/libassimp.a
(Stored with Git LFS)
vendored
BIN
Source/Platforms/Mac/Binaries/ThirdParty/ARM64/libassimp.a
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
Source/Platforms/Mac/Binaries/ThirdParty/x64/libIrrXML.a
(Stored with Git LFS)
vendored
BIN
Source/Platforms/Mac/Binaries/ThirdParty/x64/libIrrXML.a
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
Source/Platforms/Mac/Binaries/ThirdParty/x64/libassimp.a
(Stored with Git LFS)
vendored
BIN
Source/Platforms/Mac/Binaries/ThirdParty/x64/libassimp.a
(Stored with Git LFS)
vendored
Binary file not shown.
1
Source/ThirdParty/assimp/assimp.Build.cs
vendored
1
Source/ThirdParty/assimp/assimp.Build.cs
vendored
@@ -37,7 +37,6 @@ public class assimp : DepsModule
|
||||
case TargetPlatform.Linux:
|
||||
case TargetPlatform.Mac:
|
||||
options.OutputFiles.Add(Path.Combine(depsRoot, "libassimp.a"));
|
||||
options.OutputFiles.Add(Path.Combine(depsRoot, "libIrrXML.a"));
|
||||
break;
|
||||
default: throw new InvalidPlatformException(options.Platform.Target);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using Flax.Build;
|
||||
|
||||
@@ -122,13 +122,19 @@ namespace Flax.Deps.Dependencies
|
||||
}
|
||||
case TargetPlatform.Linux:
|
||||
{
|
||||
var envVars = new Dictionary<string, string>
|
||||
{
|
||||
{ "CC", "clang-13" },
|
||||
{ "CC_FOR_BUILD", "clang-13" },
|
||||
{ "CXX", "clang++-13" },
|
||||
};
|
||||
|
||||
// Build for Linux
|
||||
RunCmake(root, platform, TargetArchitecture.x64, " -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF " + globalConfig);
|
||||
Utilities.Run("make", null, null, root, Utilities.RunOptions.ThrowExceptionOnError);
|
||||
RunCmake(root, platform, TargetArchitecture.x64, " -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF " + globalConfig, envVars);
|
||||
Utilities.Run("make", null, null, root, Utilities.RunOptions.ThrowExceptionOnError, envVars);
|
||||
configHeaderFilePath = Path.Combine(root, "include", "assimp", "config.h");
|
||||
var depsFolder = GetThirdPartyFolder(options, platform, TargetArchitecture.x64);
|
||||
Utilities.FileCopy(Path.Combine(root, "lib", "libassimp.a"), Path.Combine(depsFolder, "libassimp.a"));
|
||||
Utilities.FileCopy(Path.Combine(root, "lib", "libIrrXML.a"), Path.Combine(depsFolder, "libIrrXML.a"));
|
||||
break;
|
||||
}
|
||||
case TargetPlatform.Mac:
|
||||
@@ -141,7 +147,7 @@ namespace Flax.Deps.Dependencies
|
||||
configHeaderFilePath = Path.Combine(root, "include", "assimp", "config.h");
|
||||
var depsFolder = GetThirdPartyFolder(options, platform, architecture);
|
||||
Utilities.FileCopy(Path.Combine(root, "lib", "libassimp.a"), Path.Combine(depsFolder, "libassimp.a"));
|
||||
Utilities.FileCopy(Path.Combine(root, "lib", "libIrrXML.a"), Path.Combine(depsFolder, "libIrrXML.a"));
|
||||
Utilities.Run("make", "clean", null, root, Utilities.RunOptions.ThrowExceptionOnError);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user