diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index aa9e3638f..f56370352 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -1521,6 +1521,7 @@ namespace FlaxEditor.Viewport new ViewFlagOptions(ViewFlags.PointLights, "Point Lights"), new ViewFlagOptions(ViewFlags.SpotLights, "Spot Lights"), new ViewFlagOptions(ViewFlags.SkyLights, "Sky Lights"), + new ViewFlagOptions(ViewFlags.Sky, "Sky"), new ViewFlagOptions(ViewFlags.Fog, "Fog"), new ViewFlagOptions(ViewFlags.SpecularLight, "Specular Light"), new ViewFlagOptions(ViewFlags.Decals, "Decals"), diff --git a/Source/Editor/Windows/EditGameWindow.cs b/Source/Editor/Windows/EditGameWindow.cs index 9335cd00b..698972b64 100644 --- a/Source/Editor/Windows/EditGameWindow.cs +++ b/Source/Editor/Windows/EditGameWindow.cs @@ -430,7 +430,7 @@ namespace FlaxEditor.Windows writer.WriteAttributeString("MovementSpeed", Viewport.MovementSpeed.ToString()); writer.WriteAttributeString("OrthographicScale", Viewport.OrthographicScale.ToString()); writer.WriteAttributeString("UseOrthographicProjection", Viewport.UseOrthographicProjection.ToString()); - writer.WriteAttributeString("ViewFlags", ((long)Viewport.Task.View.Flags).ToString()); + writer.WriteAttributeString("ViewFlags", ((ulong)Viewport.Task.View.Flags).ToString()); } /// @@ -463,7 +463,7 @@ namespace FlaxEditor.Windows if (bool.TryParse(node.GetAttribute("UseOrthographicProjection"), out value1)) Viewport.UseOrthographicProjection = value1; - if (long.TryParse(node.GetAttribute("ViewFlags"), out long value3)) + if (ulong.TryParse(node.GetAttribute("ViewFlags"), out ulong value3)) Viewport.Task.ViewFlags = (ViewFlags)value3; // Reset view flags if opening with different engine version (ViewFlags enum could be modified) diff --git a/Source/Engine/Graphics/Enums.h b/Source/Engine/Graphics/Enums.h index f419fbb71..55657f507 100644 --- a/Source/Engine/Graphics/Enums.h +++ b/Source/Engine/Graphics/Enums.h @@ -879,7 +879,7 @@ API_ENUM() enum class ViewMode /// /// Frame rendering flags used to switch between graphics features. /// -API_ENUM(Attributes="Flags") enum class ViewFlags : int64 +API_ENUM(Attributes="Flags") enum class ViewFlags : uint64 { /// /// Nothing. @@ -1016,20 +1016,25 @@ API_ENUM(Attributes="Flags") enum class ViewFlags : int64 /// GlobalSDF = 1 << 25, + /// + /// Shows/hides the Sky/Skybox rendering. + /// + Sky = 1 << 26, + /// /// Default flags for Game. /// - DefaultGame = Reflections | DepthOfField | Fog | Decals | MotionBlur | SSR | AO | GI | DirectionalLights | PointLights | SpotLights | SkyLights | Shadows | SpecularLight | AntiAliasing | CustomPostProcess | Bloom | ToneMapping | EyeAdaptation | CameraArtifacts | LensFlares | ContactShadows | GlobalSDF, + DefaultGame = Reflections | DepthOfField | Fog | Decals | MotionBlur | SSR | AO | GI | DirectionalLights | PointLights | SpotLights | SkyLights | Shadows | SpecularLight | AntiAliasing | CustomPostProcess | Bloom | ToneMapping | EyeAdaptation | CameraArtifacts | LensFlares | ContactShadows | GlobalSDF | Sky, /// /// Default flags for Editor. /// - DefaultEditor = Reflections | Fog | Decals | DebugDraw | SSR | AO | GI | DirectionalLights | PointLights | SpotLights | SkyLights | Shadows | SpecularLight | AntiAliasing | CustomPostProcess | Bloom | ToneMapping | EyeAdaptation | CameraArtifacts | LensFlares | EditorSprites | ContactShadows | GlobalSDF, + DefaultEditor = Reflections | Fog | Decals | DebugDraw | SSR | AO | GI | DirectionalLights | PointLights | SpotLights | SkyLights | Shadows | SpecularLight | AntiAliasing | CustomPostProcess | Bloom | ToneMapping | EyeAdaptation | CameraArtifacts | LensFlares | EditorSprites | ContactShadows | GlobalSDF | Sky, /// /// Default flags for materials/models previews generating. /// - DefaultAssetPreview = Reflections | Decals | DirectionalLights | PointLights | SpotLights | SkyLights | SpecularLight | AntiAliasing | Bloom | ToneMapping | EyeAdaptation | CameraArtifacts | LensFlares | ContactShadows, + DefaultAssetPreview = Reflections | Decals | DirectionalLights | PointLights | SpotLights | SkyLights | SpecularLight | AntiAliasing | Bloom | ToneMapping | EyeAdaptation | CameraArtifacts | LensFlares | ContactShadows | Sky, }; DECLARE_ENUM_OPERATORS(ViewFlags); diff --git a/Source/Engine/Level/Actors/Sky.cpp b/Source/Engine/Level/Actors/Sky.cpp index f0ccf84b4..dcb2bb77e 100644 --- a/Source/Engine/Level/Actors/Sky.cpp +++ b/Source/Engine/Level/Actors/Sky.cpp @@ -81,7 +81,7 @@ void Sky::InitConfig(AtmosphericFogData& config) const void Sky::Draw(RenderContext& renderContext) { - if (HasContentLoaded()) + if (HasContentLoaded() && EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::Sky)) { // Ensure to have pipeline state cache created if (_psSky == nullptr || _psFog == nullptr) diff --git a/Source/Engine/Level/Actors/Skybox.cpp b/Source/Engine/Level/Actors/Skybox.cpp index 8606b179e..7d35a2776 100644 --- a/Source/Engine/Level/Actors/Skybox.cpp +++ b/Source/Engine/Level/Actors/Skybox.cpp @@ -40,7 +40,7 @@ void Skybox::Draw(RenderContext& renderContext) setupProxy(); isReady = _proxyMaterial && _proxyMaterial->IsReady(); } - if (isReady) + if (isReady && EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::Sky)) { renderContext.List->Sky = this; } diff --git a/Source/Engine/Renderer/GBufferPass.cpp b/Source/Engine/Renderer/GBufferPass.cpp index 0e548afea..0e5e8508a 100644 --- a/Source/Engine/Renderer/GBufferPass.cpp +++ b/Source/Engine/Renderer/GBufferPass.cpp @@ -218,7 +218,7 @@ void GBufferPass::Fill(RenderContext& renderContext, GPUTexture* lightBuffer) renderContext.List->RunCustomPostFxPass(context, renderContext, PostProcessEffectLocation::AfterGBufferPass, lightBuffer, nullTexture); // Draw sky - if (renderContext.List->Sky && _skyModel && _skyModel->CanBeRendered()) + if (renderContext.List->Sky && _skyModel && _skyModel->CanBeRendered() && EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::Sky)) { PROFILE_GPU_CPU_NAMED("Sky"); context->SetRenderTarget(*renderContext.Buffers->DepthBuffer, ToSpan(targetBuffers, ARRAY_COUNT(targetBuffers))); @@ -283,7 +283,7 @@ public: GPUTextureView* GBufferPass::RenderSkybox(RenderContext& renderContext, GPUContext* context) { GPUTextureView* result = nullptr; - if (renderContext.List->Sky && _skyModel && _skyModel->CanBeRendered()) + if (renderContext.List->Sky && _skyModel && _skyModel->CanBeRendered() && EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::Sky)) { // Initialize skybox texture auto& skyboxData = *renderContext.Buffers->GetCustomBuffer(TEXT("Skybox")); @@ -430,7 +430,7 @@ void GBufferPass::DrawDecals(RenderContext& renderContext, GPUTextureView* light { // Skip if no decals to render auto& decals = renderContext.List->Decals; - if (decals.IsEmpty() || _boxModel == nullptr || !_boxModel->CanBeRendered()) + if (decals.IsEmpty() || _boxModel == nullptr || !_boxModel->CanBeRendered() || EnumHasNoneFlags(renderContext.View.Flags, ViewFlags::Decals)) return; PROFILE_GPU_CPU("Decals"); diff --git a/Source/Engine/Renderer/ProbesRenderer.cpp b/Source/Engine/Renderer/ProbesRenderer.cpp index 376c8632d..769765102 100644 --- a/Source/Engine/Renderer/ProbesRenderer.cpp +++ b/Source/Engine/Renderer/ProbesRenderer.cpp @@ -268,6 +268,7 @@ bool ProbesRenderer::Init() ViewFlags::SkyLights | ViewFlags::Decals | ViewFlags::Shadows | + ViewFlags::Sky | ViewFlags::Fog; view.Mode = ViewMode::NoPostFx; view.IsOfflinePass = true; diff --git a/Source/Engine/ShadowsOfMordor/Builder.cpp b/Source/Engine/ShadowsOfMordor/Builder.cpp index 426925c43..ccf956d47 100644 --- a/Source/Engine/ShadowsOfMordor/Builder.cpp +++ b/Source/Engine/ShadowsOfMordor/Builder.cpp @@ -448,6 +448,7 @@ bool ShadowsOfMordor::Builder::initResources() ViewFlags::DirectionalLights | ViewFlags::PointLights | ViewFlags::SpotLights | + ViewFlags::Sky | ViewFlags::Shadows | ViewFlags::Decals | ViewFlags::SkyLights |