From ee84d53cdca42b811822f0f39ef660313cedb68c Mon Sep 17 00:00:00 2001 From: Preben Eriksen Date: Tue, 29 Nov 2022 11:09:34 +0100 Subject: [PATCH 1/4] PE: Support normal generation when using assimp importer. --- .../Tools/ModelTool/ModelTool.Assimp.cpp | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/Source/Engine/Tools/ModelTool/ModelTool.Assimp.cpp b/Source/Engine/Tools/ModelTool/ModelTool.Assimp.cpp index 6d06961dd..7f3cfbba0 100644 --- a/Source/Engine/Tools/ModelTool/ModelTool.Assimp.cpp +++ b/Source/Engine/Tools/ModelTool/ModelTool.Assimp.cpp @@ -248,18 +248,6 @@ bool ProcessMesh(ImportedModelData& result, AssimpImporterData& data, const aiMe } } - // Normals - if (aMesh->mNormals) - { - mesh.Normals.Set((const Float3*)aMesh->mNormals, aMesh->mNumVertices); - } - - // Tangents - if (aMesh->mTangents) - { - mesh.Tangents.Set((const Float3*)aMesh->mTangents, aMesh->mNumVertices); - } - // Indices const int32 indicesCount = aMesh->mNumFaces * 3; mesh.Indices.Resize(indicesCount, false); @@ -277,6 +265,27 @@ bool ProcessMesh(ImportedModelData& result, AssimpImporterData& data, const aiMe mesh.Indices[i++] = face->mIndices[2]; } + // Normals + if (data.Options.CalculateNormals || !aMesh->mNormals) + { + // Support generation of normals when using assimp. + if (mesh.GenerateNormals(data.Options.SmoothingNormalsAngle)) + { + errorMsg = TEXT("Failed to generate normals."); + return true; + } + } + else if (aMesh->mNormals) + { + mesh.Normals.Set((const Float3*)aMesh->mNormals, aMesh->mNumVertices); + } + + // Tangents + if (aMesh->mTangents) + { + mesh.Tangents.Set((const Float3*)aMesh->mTangents, aMesh->mNumVertices); + } + // Lightmap UVs if (data.Options.LightmapUVsSource == ModelLightmapUVsSource::Disable) { From a3a001633b67fec052897df6203e2ae4f5c23d2a Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Wed, 30 Nov 2022 17:18:58 +0100 Subject: [PATCH 2/4] Fix Custom Editors groups regression --- .../CustomEditors/Editors/GenericEditor.cs | 40 ++++++++++++++----- Source/Editor/Surface/SurfaceUtils.cs | 4 +- Source/Editor/Surface/VisjectSurfaceWindow.cs | 4 +- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/Source/Editor/CustomEditors/Editors/GenericEditor.cs b/Source/Editor/CustomEditors/Editors/GenericEditor.cs index 39b1ca531..8a3f98560 100644 --- a/Source/Editor/CustomEditors/Editors/GenericEditor.cs +++ b/Source/Editor/CustomEditors/Editors/GenericEditor.cs @@ -225,7 +225,8 @@ namespace FlaxEditor.CustomEditors.Editors } private static HashSet _visibleIfPropertiesListsCache; - private static Dictionary _groups; + private static Stack> _groups; + private static List> _groupsPool; private VisibleIfCache[] _visibleIfCaches; private bool _isNull; @@ -514,17 +515,38 @@ namespace FlaxEditor.CustomEditors.Editors menu.Show(groupPanel, location); } - internal static void OnGroupUsage() + internal static void OnGroupsBegin() { - if (_groups != null) - _groups.Clear(); + if (_groups == null) + _groups = new Stack>(); + if (_groupsPool == null) + _groupsPool = new List>(); + Dictionary group; + if (_groupsPool.Count != 0) + { + group = _groupsPool[0]; + _groupsPool.RemoveAt(0); + } + else + { + group = new Dictionary(); + } + _groups.Push(group); + } + + internal static void OnGroupsEnd() + { + var groups = _groups.Pop(); + groups.Clear(); + _groupsPool.Add(groups); } internal static LayoutElementsContainer OnGroup(LayoutElementsContainer layout, EditorDisplayAttribute display) { if (display?.Group != null) { - if (_groups != null && _groups.TryGetValue(display.Group, out var group)) + var groups = _groups.Peek(); + if (groups.TryGetValue(display.Group, out var group)) { // Reuse group layout = group; @@ -532,12 +554,10 @@ namespace FlaxEditor.CustomEditors.Editors else { // Add new group - if (_groups == null) - _groups = new Dictionary(); group = layout.Group(display.Group); group.Panel.Tag = group; group.Panel.MouseButtonRightClicked += OnGroupPanelMouseButtonRightClicked; - _groups.Add(display.Group, group); + groups.Add(display.Group, group); layout = group; } } @@ -713,7 +733,7 @@ namespace FlaxEditor.CustomEditors.Editors items.Sort(); // Add items - OnGroupUsage(); + OnGroupsBegin(); for (int i = 0; i < items.Count; i++) { var item = items[i]; @@ -759,7 +779,7 @@ namespace FlaxEditor.CustomEditors.Editors } while (c != null); } } - OnGroupUsage(); + OnGroupsEnd(); } /// diff --git a/Source/Editor/Surface/SurfaceUtils.cs b/Source/Editor/Surface/SurfaceUtils.cs index 59d90c916..c69dfdf52 100644 --- a/Source/Editor/Surface/SurfaceUtils.cs +++ b/Source/Editor/Surface/SurfaceUtils.cs @@ -285,7 +285,7 @@ namespace FlaxEditor.Surface internal static void DisplayGraphParameters(LayoutElementsContainer layout, GraphParameterData[] data, GetGraphParameterDelegate getter, SetGraphParameterDelegate setter, ValueContainer values, GetGraphParameterDelegate defaultValueGetter = null, CustomPropertySpawnDelegate propertySpawn = null) { - CustomEditors.Editors.GenericEditor.OnGroupUsage(); + CustomEditors.Editors.GenericEditor.OnGroupsBegin(); for (int i = 0; i < data.Length; i++) { ref var e = ref data[i]; @@ -332,7 +332,7 @@ namespace FlaxEditor.Surface else propertySpawn(itemLayout, valueContainer, ref e); } - CustomEditors.Editors.GenericEditor.OnGroupUsage(); + CustomEditors.Editors.GenericEditor.OnGroupsEnd(); } internal static string GetMethodDisplayName(string methodName) diff --git a/Source/Editor/Surface/VisjectSurfaceWindow.cs b/Source/Editor/Surface/VisjectSurfaceWindow.cs index 788eb7a96..43a664866 100644 --- a/Source/Editor/Surface/VisjectSurfaceWindow.cs +++ b/Source/Editor/Surface/VisjectSurfaceWindow.cs @@ -372,7 +372,7 @@ namespace FlaxEditor.Surface return; } var parameters = window.VisjectSurface.Parameters; - CustomEditors.Editors.GenericEditor.OnGroupUsage(); + CustomEditors.Editors.GenericEditor.OnGroupsBegin(); for (int i = 0; i < parameters.Count; i++) { var p = parameters[i]; @@ -429,7 +429,7 @@ namespace FlaxEditor.Surface var property = itemLayout.AddPropertyItem(propertyLabel, tooltipText); property.Property("Value", propertyValue); } - CustomEditors.Editors.GenericEditor.OnGroupUsage(); + CustomEditors.Editors.GenericEditor.OnGroupsEnd(); // Parameters creating var newParameterTypes = window.NewParameterTypes; From 8694d9f9b427c633df99fb9c67caa3b264b6725c Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Wed, 30 Nov 2022 18:06:39 +0100 Subject: [PATCH 3/4] Fix helper mouse button up event on drag drop end on Windows Regression from 4efd411045439dbc92ee39c6be43de0a5d039a70 --- Source/Engine/Platform/Windows/WindowsWindow.DragDrop.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Source/Engine/Platform/Windows/WindowsWindow.DragDrop.cpp b/Source/Engine/Platform/Windows/WindowsWindow.DragDrop.cpp index e836f3e21..3bb697208 100644 --- a/Source/Engine/Platform/Windows/WindowsWindow.DragDrop.cpp +++ b/Source/Engine/Platform/Windows/WindowsWindow.DragDrop.cpp @@ -8,6 +8,7 @@ #include "Engine/Core/Collections/Array.h" #include "Engine/Engine/Engine.h" +#include "Engine/Engine/Screen.h" #include "Engine/Platform/IGuiData.h" #include "Engine/Input/Input.h" #include "Engine/Input/Mouse.h" @@ -621,7 +622,11 @@ DragDropEffect WindowsWindow::DoDragDrop(const StringView& data) // Fix hanging mouse state (Windows doesn't send WM_LBUTTONUP when we end the drag and drop) if (Input::GetMouseButton(MouseButton::Left)) - Input::Mouse->OnMouseUp(Input::Mouse->GetPosition(), MouseButton::Left, this); + { + ::POINT point; + ::GetCursorPos(&point); + Input::Mouse->OnMouseUp(Float2((float)point.x, (float)point.y), MouseButton::Left, this); + } return SUCCEEDED(result) ? dropEffectFromOleEnum(dwEffect) : DragDropEffect::None; } From 12f8a15b8b7efaf3df7989218bd8b93411298d27 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Wed, 30 Nov 2022 18:07:27 +0100 Subject: [PATCH 4/4] Remove unused include --- Source/Engine/Platform/Windows/WindowsWindow.DragDrop.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Source/Engine/Platform/Windows/WindowsWindow.DragDrop.cpp b/Source/Engine/Platform/Windows/WindowsWindow.DragDrop.cpp index 3bb697208..86662a993 100644 --- a/Source/Engine/Platform/Windows/WindowsWindow.DragDrop.cpp +++ b/Source/Engine/Platform/Windows/WindowsWindow.DragDrop.cpp @@ -8,7 +8,6 @@ #include "Engine/Core/Collections/Array.h" #include "Engine/Engine/Engine.h" -#include "Engine/Engine/Screen.h" #include "Engine/Platform/IGuiData.h" #include "Engine/Input/Input.h" #include "Engine/Input/Mouse.h"