10 Commits
48 changed files with 119 additions and 140 deletions
+1
View File
@@ -14,6 +14,7 @@ Xml-Beef = "*"
ImGuiImplDX11 = "*" ImGuiImplDX11 = "*"
ImGuiImplWin32 = "*" ImGuiImplWin32 = "*"
ImGuizmo = "*" ImGuizmo = "*"
"Beef.Linq" = "*"
[Platform.Windows] [Platform.Windows]
IconFile = "$(ProjectDir)/Resources/Textures/GlitchyEngineIcon.ico" IconFile = "$(ProjectDir)/Resources/Textures/GlitchyEngineIcon.ico"
+1 -1
View File
@@ -310,7 +310,7 @@ class AssetCache
Try!(compressedStream.TryRead(compressedData)); Try!(compressedStream.TryRead(compressedData));
MemoryStream ms = new MemoryStream(asset.UncompressedByteCount); MemoryStream ms = new MemoryStream(asset.UncompressedByteCount);
ms.Memory.GrowUnitialized(asset.UncompressedByteCount); ms.Memory.GrowUninitialized(asset.UncompressedByteCount);
LZ4.LZ4F_dctx* context; LZ4.LZ4F_dctx* context;
LZ4.LZ4F_CreateDecompressionContext(out context); LZ4.LZ4F_CreateDecompressionContext(out context);
+1 -1
View File
@@ -497,7 +497,7 @@ class AssetHierarchy
void AddEntryToTree(String filePath, bool isDirectory, TreeNode<AssetNode> parentNode) void AddEntryToTree(String filePath, bool isDirectory, TreeNode<AssetNode> parentNode)
{ {
// Try to find the node for the specified path in the given parent // Try to find the node for the specified path in the given parent
TreeNode<AssetNode> treeNode = parentNode.Children.Where(scope (node) => node.Value.Path == filePath).FirstOrDefault(); TreeNode<AssetNode> treeNode = parentNode.Children.Where((node) => node.Value.Path == filePath).FirstOrDefault();
// If no node was found -> create one // If no node was found -> create one
if (treeNode == null) if (treeNode == null)
@@ -630,7 +630,7 @@ static class DdsImporter
surfaces.Reserve(surfaceCount); surfaces.Reserve(surfaceCount);
uint32 scanLineSize = 0; uint32 scanLineSize = 0;
uint32 slicePitch = 0; //uint32 slicePitch = 0;
uint64 numBytes = 0; uint64 numBytes = 0;
uint32 blockSize = 0; // Block size in bytes. uint32 blockSize = 0; // Block size in bytes.
@@ -97,7 +97,7 @@ class MaterialVariable
Result<int, Int.ParseError> rowsResult = int.Parse(rowsString); Result<int, Int.ParseError> rowsResult = int.Parse(rowsString);
if (rowsResult case .Err(let error)) if (rowsResult case .Err(var error))
{ {
switch (error) switch (error)
{ {
@@ -114,7 +114,7 @@ class MaterialVariable
Result<int, Int.ParseError> columnsResult = int.Parse(columnsString); Result<int, Int.ParseError> columnsResult = int.Parse(columnsString);
if (columnsResult case .Err(let error)) if (columnsResult case .Err(out error))
{ {
switch (error) switch (error)
{ {
@@ -226,7 +226,7 @@ extension ShaderCompiler
Try!(ShaderCodePreprocessor.ProcessFileContent(shaderCode, context.VsName, context.PsName, context.Variables, context.BufferNames, context.EngineBuffers)); Try!(ShaderCodePreprocessor.ProcessFileContent(shaderCode, context.VsName, context.PsName, context.Variables, context.BufferNames, context.EngineBuffers));
using (let includer = PreprocessingIncluder(directory, context)) using (var includer = PreprocessingIncluder(directory, context))
{ {
var result = D3DCompiler.D3DCompile(code.Ptr, (.)code.Length, fileName.FullIdentifier.ToScopeCStr!(), nativeMacros, &includer, entryPoint.ToScopeCStr!(), var result = D3DCompiler.D3DCompile(code.Ptr, (.)code.Length, fileName.FullIdentifier.ToScopeCStr!(), nativeMacros, &includer, entryPoint.ToScopeCStr!(),
compileTarget.ToScopeCStr!(), DefaultCompileFlags /* Pass down compile flags? */, .None, &outShader._shaderBlob, &errorBlob); compileTarget.ToScopeCStr!(), DefaultCompileFlags /* Pass down compile flags? */, .None, &outShader._shaderBlob, &errorBlob);
@@ -205,14 +205,14 @@ class ShaderProcessor : IAssetProcessor
ProcessedShader.ConstantBufferEntry constantBufferEntry = .Default; ProcessedShader.ConstantBufferEntry constantBufferEntry = .Default;
if (vsBufferResult case .Ok(let vsBuffer) && psBufferResult case .Ok(let psBuffer)) if (vsBufferResult case .Ok(var vsBuffer) && psBufferResult case .Ok(let psBuffer))
{ {
// Choose larger buffer // Choose larger buffer
constantBufferEntry.ConstantBuffer = (vsBuffer.Size >= psBuffer.Size) ? vsBuffer : psBuffer; constantBufferEntry.ConstantBuffer = (vsBuffer.Size >= psBuffer.Size) ? vsBuffer : psBuffer;
constantBufferEntry.VertexShaderBindPoint = (.)vsBuffer.BindPoint; constantBufferEntry.VertexShaderBindPoint = (.)vsBuffer.BindPoint;
constantBufferEntry.PixelShaderBindPoint = (.)psBuffer.BindPoint; constantBufferEntry.PixelShaderBindPoint = (.)psBuffer.BindPoint;
} }
else if (vsBufferResult case .Ok(let vsBuffer)) else if (vsBufferResult case .Ok(out vsBuffer))
{ {
constantBufferEntry.ConstantBuffer = vsBuffer; constantBufferEntry.ConstantBuffer = vsBuffer;
constantBufferEntry.VertexShaderBindPoint = (.)vsBuffer.BindPoint; constantBufferEntry.VertexShaderBindPoint = (.)vsBuffer.BindPoint;
@@ -243,7 +243,7 @@ namespace GlitchyEditor.EditWindows
for (StringView entryName in assetCreator.Name.Split('/')) for (StringView entryName in assetCreator.Name.Split('/'))
{ {
AssetCreatorTree nextNode = tree.Children.Where(scope (node) => node->Name == entryName).FirstOrDefault(); AssetCreatorTree nextNode = tree.Children.Where((node) => node->Name == entryName).FirstOrDefault();
// Create new node if we didn't find it // Create new node if we didn't find it
nextNode ??= tree.AddChild((entryName, null)); nextNode ??= tree.AddChild((entryName, null));
@@ -465,7 +465,7 @@ namespace GlitchyEditor.EditWindows
_selectedFiles.ClearAndDeleteItems(); _selectedFiles.ClearAndDeleteItems();
} }
if (currentDirectoryNode case .Ok(TreeNode<AssetNode> currentDirectory)) if (currentDirectoryNode case .Ok(out currentDirectory))
{ {
FileDropTarget(currentDirectory, .External); FileDropTarget(currentDirectory, .External);
} }
@@ -720,7 +720,7 @@ namespace GlitchyEditor.EditWindows
ImGui.TreeNodeFlags flags = .OpenOnArrow | .SpanAvailWidth; ImGui.TreeNodeFlags flags = .OpenOnArrow | .SpanAvailWidth;
if(tree.Children.Where(scope (node) => node->IsDirectory).Count() == 0) if(tree.Children.Where((node) => node->IsDirectory).Count() == 0)
flags |= .Leaf; flags |= .Leaf;
if (tree->Path == CurrentDirectory) if (tree->Path == CurrentDirectory)
@@ -1390,7 +1390,7 @@ namespace GlitchyEditor.EditWindows
private void CopySelectedFiles(bool cutFiles) private void CopySelectedFiles(bool cutFiles)
{ {
_filesToCopy.ClearAndDeleteItems(); _filesToCopy.ClearAndDeleteItems();
_selectedFiles.Select(scope (file) => new String(file)).ToList(_filesToCopy); _selectedFiles.Select((file) => new String(file)).ToList(_filesToCopy);
_cutFiles = cutFiles; _cutFiles = cutFiles;
} }
@@ -168,7 +168,7 @@ namespace GlitchyEditor.EditWindows
let mousePos = (float2)ImGui.GetMousePos(); let mousePos = (float2)ImGui.GetMousePos();
let globalToImGuiMouse = (float2)globalMousePosition - mousePos; //let globalToImGuiMouse = (float2)globalMousePosition - mousePos;
let winPos = (float2)ImGui.GetWindowPos(); let winPos = (float2)ImGui.GetWindowPos();
let regionMin = winPos + (float2)ImGui.GetWindowContentRegionMin(); let regionMin = winPos + (float2)ImGui.GetWindowContentRegionMin();
@@ -119,11 +119,11 @@ class InspectorWindow : EditorWindow
{ {
ShowAssetProperties(assetHandle, editor); ShowAssetProperties(assetHandle, editor);
} }
else if (object case .Entity(let entityId)) else if (object case .Entity(var entityId))
{ {
ShowEntityProperties(entityId, editor); ShowEntityProperties(entityId, editor);
} }
else if (object case .Component(let entityId, let componentType)) else if (object case .Component(out entityId, let componentType))
{ {
ShowEntityProperties(entityId, editor, componentType); ShowEntityProperties(entityId, editor, componentType);
} }
@@ -156,7 +156,7 @@ class InspectorWindow : EditorWindow
if (assetFile.LoadedAsset != null) if (assetFile.LoadedAsset != null)
{ {
// TODO: Where do we get the asset editor from? // TODO: Where do we get the asset editor from?
if (let mat = assetFile.LoadedAsset as Material) if (assetFile.LoadedAsset is Material)
{ {
MaterialEditor.ShowEditor(assetFile); MaterialEditor.ShowEditor(assetFile);
//ImGui.TextUnformatted(assetFile.LoadedAsset.Identifier); //ImGui.TextUnformatted(assetFile.LoadedAsset.Identifier);
+1 -1
View File
@@ -139,7 +139,7 @@ namespace GlitchyEditor
_componentEditWindow = new ComponentEditWindow(); _componentEditWindow = new ComponentEditWindow();
_contentBrowserWindow = new ContentBrowserWindow(this, (.)Application.Instance.ContentManager, _thumbnailManager); _contentBrowserWindow = new ContentBrowserWindow(this, (.)Application.Instance.ContentManager, _thumbnailManager);
_inspectorWindow = new InspectorWindow(this); _inspectorWindow = new InspectorWindow(this);
_assetViewer = new AssetViewer((.)Application.Get().ContentManager); _assetViewer = new AssetViewer((.)Application.Instance.ContentManager);
_logWindow = new LogWindow(); _logWindow = new LogWindow();
_settingsWindow = new SettingsWindow(); _settingsWindow = new SettingsWindow();
} }
+2 -2
View File
@@ -972,14 +972,14 @@ class EditorContentManager : IContentManager
{ {
Runtime.NotImplemented(); Runtime.NotImplemented();
if (oldIdentifier == newIdentifier) /*if (oldIdentifier == newIdentifier)
return; return;
Log.EngineLogger.Assert(_identiferToHandle.ContainsKey(newIdentifier), "An asset with the same identifier is already managed by this content manager."); Log.EngineLogger.Assert(_identiferToHandle.ContainsKey(newIdentifier), "An asset with the same identifier is already managed by this content manager.");
// Since all we do in order to track assets is add them to a dictionary we can simply unmanage and manage it again. // Since all we do in order to track assets is add them to a dictionary we can simply unmanage and manage it again.
//UnmanageAsset(asset); //UnmanageAsset(asset);
//ManageAsset(asset); //ManageAsset(asset);*/
} }
// TODO: obviously use a map or something... // TODO: obviously use a map or something...
+7 -4
View File
@@ -295,7 +295,7 @@ namespace GlitchyEditor
private void InitGraphics() private void InitGraphics()
{ {
_context = Application.Get().Window.Context..AddRef(); _context = Application.Instance.Window.Context..AddRef();
RasterizerStateDescription rsDesc = .(.Solid, .Back, true); RasterizerStateDescription rsDesc = .(.Solid, .Back, true);
_rasterizerState = new RasterizerState(rsDesc); _rasterizerState = new RasterizerState(rsDesc);
@@ -426,6 +426,9 @@ namespace GlitchyEditor
// Clear the swapchain-buffer // Clear the swapchain-buffer
RenderCommand.Clear(null, .Color | .Depth, .(0.2f, 0.2f, 0.2f), 1.0f, 0); RenderCommand.Clear(null, .Color | .Depth, .(0.2f, 0.2f, 0.2f), 1.0f, 0);
// Explicitly set the swap chain as render target, because we end a frame with it bound and the RTV might stop existing if we resized the swapchain between frames.
// TODO: maybe we need to be smarter about how we handle resizing in general: should the RenderTarget check during resize whether it is bound and update the GraphicsContext?!
RenderCommand.SetRenderTarget(null);
RenderCommand.SetBlendState(_alphaBlendState); RenderCommand.SetBlendState(_alphaBlendState);
RenderCommand.SetDepthStencilState(_depthStencilState); RenderCommand.SetDepthStencilState(_depthStencilState);
@@ -586,7 +589,7 @@ namespace GlitchyEditor
/// @remarks If the creation fails at any point the entire directory will be deleted. /// @remarks If the creation fails at any point the entire directory will be deleted.
private Result<void> CreateNewProject(StringView workspaceDirectory, StringView projectName) private Result<void> CreateNewProject(StringView workspaceDirectory, StringView projectName)
{ {
if (Directory.CreateDirectory(workspaceDirectory) case .Err(let error)) if (Directory.CreateDirectory(workspaceDirectory) case .Err(var error))
{ {
Log.ClientLogger.Error($"Failed to create directory \"{workspaceDirectory}\". ({error})"); Log.ClientLogger.Error($"Failed to create directory \"{workspaceDirectory}\". ({error})");
return .Err; return .Err;
@@ -607,9 +610,9 @@ namespace GlitchyEditor
// If the project couldn't be created or initialization failed, we delete the workspace directory. // If the project couldn't be created or initialization failed, we delete the workspace directory.
if (newProjectResult == .Err) if (newProjectResult == .Err)
{ {
if (Directory.DelTree(workspaceDirectory) case .Err(let error)) if (Directory.DelTree(workspaceDirectory) case .Err(out error))
{ {
Log.EngineLogger.Error($"Failed to delete workspace ({workspaceDirectory})."); Log.EngineLogger.Error($"Failed to delete workspace ({workspaceDirectory}). ({error})");
} }
return .Err; return .Err;
+2 -2
View File
@@ -276,10 +276,10 @@ namespace ImGui
const String[?] componentNames = .("X", "Y", "Z", "W"); const String[?] componentNames = .("X", "Y", "Z", "W");
const String[?] componentIds = .("##X", "##Y", "##Z", "##W"); const String[?] componentIds = .("##X", "##Y", "##Z", "##W");
static int mouseLockId = 0; //static int mouseLockId = 0;
bool changed = false; bool changed = false;
bool deactivated = false; //bool deactivated = false;
if (!label.IsEmpty) if (!label.IsEmpty)
{ {
+1 -1
View File
@@ -57,7 +57,7 @@ namespace GlitchyEditor.ImGui
} }
#if BF_PLATFORM_WINDOWS #if BF_PLATFORM_WINDOWS
ImGuiImplWin32.Init(Application.Get().Window.NativeWindow); ImGuiImplWin32.Init(Application.Instance.Window.NativeWindow);
#endif #endif
#if GE_GRAPHICS_DX11 #if GE_GRAPHICS_DX11
+1 -1
View File
@@ -311,7 +311,7 @@ namespace GlitchyEditor
switch (fieldType) switch (fieldType)
{ {
case typeof(bool): case typeof(bool):
let value = GetSettingValue!<bool>(); bool value = GetSettingValue!<bool>();
if (!ImGui.Checkbox(scope $"##{setting.Name}", &value)) if (!ImGui.Checkbox(scope $"##{setting.Name}", &value))
break; break;
+4 -1
View File
@@ -1,10 +1,13 @@
FileVersion = 1 FileVersion = 1
Dependencies = {corlib = "*", "Beef.Linq" = "*", GlitchyEngine = "*"}
[Project] [Project]
Name = "GlitchyEngine.Benchmark" Name = "GlitchyEngine.Benchmark"
StartupObject = "GlitchyEngine.Benchmark.BenchmarkApp" StartupObject = "GlitchyEngine.Benchmark.BenchmarkApp"
[Dependencies]
corlib = "*"
GlitchyEngine = "*"
[Configs.Debug.Win64] [Configs.Debug.Win64]
DebugWorkingDirectory = "d:\\Development\\Projects\\Beef\\GlitchyEngine\\GlitchyEditor" DebugWorkingDirectory = "d:\\Development\\Projects\\Beef\\GlitchyEngine\\GlitchyEditor"
+13 -3
View File
@@ -55,10 +55,20 @@ class StdDevResultColumn : IResultColumn
{ {
TimeSpan meanTime = runToCalculate.ResultColumnValue[MeanTimeResultColumn.ColumnName]; TimeSpan meanTime = runToCalculate.ResultColumnValue[MeanTimeResultColumn.ColumnName];
int64 variance = runToCalculate.RunDurations.Select(scope (d) => { // For some reason we need to specify the type arguments here.
/*int64 variance = runToCalculate.RunDurations.Sum<TimeSpan[], TimeSpan, delegate int64(TimeSpan), int64>(scope [=meanTime, =runToCalculate] (d) => {
TimeSpan delta = d - meanTime; TimeSpan delta = d - meanTime;
return (delta * delta).Ticks / runToCalculate.RunCount; return (delta * delta).Ticks / runToCalculate.RunCount;
}).Sum(); });*/
int64 variance = 0;
for (let duration in runToCalculate.RunDurations)
{
TimeSpan delta = duration - meanTime;
variance += (delta * delta).Ticks / runToCalculate.RunCount;
}
return TimeSpan((int64)Math.Sqrt((double)variance)); return TimeSpan((int64)Math.Sqrt((double)variance));
} }
} }
@@ -204,7 +214,7 @@ class BenchmarkResult
defer delete columnsToSort; defer delete columnsToSort;
columnsToSort.Sort(scope (a, b) => a.Depth <=> b.Depth); columnsToSort.Sort(scope (a, b) => a.Depth <=> b.Depth);
outColumnCalculationPlan.AddRange(columnsToSort.Select(scope (a) => a.Column)); outColumnCalculationPlan.AddRange(columnsToSort.Select((a) => a.Column));
} }
private void CalculateStats(Span<IResultColumn> customColumns) private void CalculateStats(Span<IResultColumn> customColumns)
@@ -129,7 +129,7 @@ class ScriptEngineTestBase
TimeSpan totalRunTime = _runDurations.Sum(); TimeSpan totalRunTime = _runDurations.Sum();
TimeSpan meanRunTime = TimeSpan(totalRunTime.Ticks / runs); TimeSpan meanRunTime = TimeSpan(totalRunTime.Ticks / runs);
double varianceMs = _runDurations.Select(scope (d) => Math.Pow((d - meanRunTime).TotalMilliseconds, 2)).Sum() / runs; double varianceMs = _runDurations.Select((d) => Math.Pow((d - meanRunTime).TotalMilliseconds, 2)).Sum() / runs;
TimeSpan stdDeviation = TimeSpan.FromMilliseconds(Math.Sqrt(varianceMs)); TimeSpan stdDeviation = TimeSpan.FromMilliseconds(Math.Sqrt(varianceMs));
Console.WriteLine($"Results:"); Console.WriteLine($"Results:");
+3 -1
View File
@@ -16,9 +16,11 @@ LodePng = "*"
GlitchyEngineHelper = "*" GlitchyEngineHelper = "*"
bon = "*" bon = "*"
box2d-beef = "*" box2d-beef = "*"
"Beef.Linq" = "*"
NetHostBeef = "*" NetHostBeef = "*"
ImGuiImplWin32 = "*" ImGuiImplWin32 = "*"
"Beef.Linq" = "*"
ImGui = "*"
ImGuiImplDX11 = "*"
[Configs.Paranoid.Win32] [Configs.Paranoid.Win32]
PreprocessorMacros = ["DEBUG", "PARANOID", "GE_WINDOWS"] PreprocessorMacros = ["DEBUG", "PARANOID", "GE_WINDOWS"]
-3
View File
@@ -38,9 +38,6 @@ namespace GlitchyEngine
public GameTime GameTime => _gameTime; public GameTime GameTime => _gameTime;
[Inline, Obsolete("Use Application.Instance instead.", false), NoShow]
public static Application Get() => s_Instance;
public static Application Instance => s_Instance; public static Application Instance => s_Instance;
public this() public this()
+1 -1
View File
@@ -115,7 +115,7 @@ struct AssetHandle<T> where T : Asset
_contentManager = _asset?.ContentManager; _contentManager = _asset?.ContentManager;
if (_contentManager == null) if (_contentManager == null)
_contentManager = contentManager; _contentManager = contentManager;
//_currentFrame = (uint8)Application.Get().GameTime.FrameCount; //_currentFrame = (uint8)Application.Instance.GameTime.FrameCount;
} }
// Creates a new invalid asset handle // Creates a new invalid asset handle
+3 -3
View File
@@ -73,7 +73,7 @@ namespace GlitchyEngine.Content
var contentManager; var contentManager;
if (contentManager == null) if (contentManager == null)
contentManager = Application.Get().ContentManager; contentManager = Application.Instance.ContentManager;
AssetHandle handle = contentManager.LoadAsset(assetHandle, blocking); AssetHandle handle = contentManager.LoadAsset(assetHandle, blocking);
@@ -86,7 +86,7 @@ namespace GlitchyEngine.Content
var contentManager; var contentManager;
if (contentManager == null) if (contentManager == null)
contentManager = Application.Get().ContentManager; contentManager = Application.Instance.ContentManager;
AssetHandle handle = contentManager.LoadAsset(assetIdentifier, blocking); AssetHandle handle = contentManager.LoadAsset(assetIdentifier, blocking);
@@ -134,7 +134,7 @@ namespace GlitchyEngine.Content
var contentManager; var contentManager;
if (contentManager == null) if (contentManager == null)
contentManager = Application.Get().ContentManager; contentManager = Application.Instance.ContentManager;
contentManager.ManageAsset(asset); contentManager.ManageAsset(asset);
}*/ }*/
+3 -3
View File
@@ -92,13 +92,13 @@ namespace GlitchyEngine.Content
// TODO: load with content manager // TODO: load with content manager
result = CGLTF.LoadBuffers(options, modelData, (char8*)null); result = CGLTF.LoadBuffers(options, modelData, (char8*)null);
//result = LoadBuffersWithContentManager(options, modelData, meshName, Application.Get().ContentManager); //result = LoadBuffersWithContentManager(options, modelData, meshName, Application.Instance.ContentManager);
GeometryBinding geoBinding = null; GeometryBinding geoBinding = null;
for (var mesh in modelData.Meshes) for (var mesh in modelData.Meshes)
{ {
var name = StringView(mesh.Name); //var name = StringView(mesh.Name);
//if (name == meshName) //if (name == meshName)
{ {
@@ -616,7 +616,7 @@ namespace GlitchyEngine.Content
CGLTF.AccessorReadFloat(accessor, (uint)index, (float*)&result, 16); CGLTF.AccessorReadFloat(accessor, (uint)index, (float*)&result, 16);
case typeof(uint16): case typeof(uint16):
CGLTF.AccessorReadUint(accessor, (uint)index, (uint32*)&result, 2); CGLTF.AccessorReadUint(accessor, (uint)index, (uint32*)&result, 2);
case default: default:
uint8* data = (uint8*)accessor.BufferView.Buffer.Data; uint8* data = (uint8*)accessor.BufferView.Buffer.Data;
data += accessor.BufferView.Offset; data += accessor.BufferView.Offset;
+5 -1
View File
@@ -15,7 +15,11 @@ class TextureLoader : IProcessedAssetLoader
Format pixelFormat = Try!(dataStream.Read<Format>()); Format pixelFormat = Try!(dataStream.Read<Format>());
uint32 width = Try!(dataStream.Read<uint32>()); uint32 width = Try!(dataStream.Read<uint32>());
uint32 height = Try!(dataStream.Read<uint32>()); uint32 height = Try!(dataStream.Read<uint32>());
uint32 depth = Try!(dataStream.Read<uint32>());
// TODO: We don't need the depth-value?
//uint32 depth =
Try!(dataStream.Read<uint32>());
uint32 arraySize = Try!(dataStream.Read<uint32>()); uint32 arraySize = Try!(dataStream.Read<uint32>());
uint32 mipMapCount = Try!(dataStream.Read<uint32>()); uint32 mipMapCount = Try!(dataStream.Read<uint32>());
bool isCubemap = Try!(dataStream.Read<bool>()); bool isCubemap = Try!(dataStream.Read<bool>());
@@ -0,0 +1,10 @@
using System;
using GlitchyEngine.Math;
namespace Box2D;
extension b2Color
{
[Inline]
#unwarn
public static explicit operator ColorRGBA(b2Color color) => ColorRGBA(color.r, color.g, color.b, color.a);
}
@@ -2,16 +2,6 @@ namespace System
{ {
public extension Array1<T> public extension Array1<T>
{ {
/// Returns the index of the given element or -1 if it is not in this array.
public int IndexOf(T element)
{
for(int i < mLength)
if(Ptr[i] == element)
return i;
return -1;
}
/** /**
* Uses Binary Search to find the index of the given Element. * Uses Binary Search to find the index of the given Element.
* @param element The element whose element will be returned. * @param element The element whose element will be returned.
@@ -10,53 +10,4 @@ extension Directory
// TODO: This is obviously windows only // TODO: This is obviously windows only
return PathIsDirectoryEmptyW(fileName.ToScopedNativeWChar!()); return PathIsDirectoryEmptyW(fileName.ToScopedNativeWChar!());
} }
public static Result<void, Platform.BfpFileResult> Copy(StringView fromPath, StringView toPath)
{
if (fromPath.Length <= 2)
return .Err(.InvalidParameter);
if ((fromPath[0] != '/') && (fromPath[0] != '\\'))
{
if (fromPath[1] == ':')
{
if (fromPath.Length < 3)
return .Err(.InvalidParameter);
}
}
if (!Directory.Exists(fromPath))
return .Err(.NotFound);
Try!(Directory.CreateDirectory(toPath));
for (var directoryEntry in Directory.EnumerateDirectories(fromPath))
{
let dirFromPath = scope String();
directoryEntry.GetFilePath(dirFromPath);
let dirName = scope String();
directoryEntry.GetFileName(dirName);
let dirToPath = scope String();
Path.Combine(dirToPath, toPath, dirName);
Try!(Copy(dirFromPath, dirToPath));
}
for (var fileEntry in Directory.EnumerateFiles(fromPath))
{
let fileFromPath = scope String();
fileEntry.GetFilePath(fileFromPath);
let fileName = scope String();
fileEntry.GetFileName(fileName);
let fileToPath = scope String();
Path.Combine(fileToPath, toPath, fileName);
Try!(File.Copy(fileFromPath, fileToPath));
}
return .Ok;
}
} }
-5
View File
@@ -929,10 +929,5 @@ static
return (int64)gcd((uint64)Math.Abs(u), (uint64)Math.Abs(v)); return (int64)gcd((uint64)Math.Abs(u), (uint64)Math.Abs(v));
} }
public static this()
{
int64 i = (int64)gcd(38, 123);
}
#endregion #endregion
} }
+1 -1
View File
@@ -476,7 +476,7 @@ public struct Matrix
float3 right = normalize(cross(up, forward)); float3 right = normalize(cross(up, forward));
float3 newUp = normalize(cross(forward, right)); //float3 newUp = normalize(cross(forward, right));
Matrix result = .Identity; Matrix result = .Identity;
@@ -39,7 +39,7 @@ namespace GlitchyEngine
{ {
Debug.Profiler.ProfileFunction!(); Debug.Profiler.ProfileFunction!();
if(Application.Get().Window.IsActive) if(Application.Instance.Window.IsActive)
{ {
float3 movement = .(); float3 movement = .();
@@ -98,7 +98,7 @@ namespace GlitchyEngine
{ {
Debug.Profiler.ProfileFunction!(); Debug.Profiler.ProfileFunction!();
if(Application.Get().Window.IsActive) if(Application.Instance.Window.IsActive)
{ {
float3 movement = .(); float3 movement = .();
@@ -45,7 +45,7 @@ namespace GlitchyEngine.Renderer
internal DxDSSDesc nativeDescription; internal DxDSSDesc nativeDescription;
internal ID3D11DepthStencilState* nativeDepthStencilState ~ _?.Release(); internal ID3D11DepthStencilState* nativeDepthStencilState ~ _?.Release();
public this(GEDSSDesc description) public override this(GEDSSDesc description)
{ {
Debug.Profiler.ProfileResourceFunction!(); Debug.Profiler.ProfileResourceFunction!();
@@ -72,6 +72,8 @@ namespace GlitchyEngine.Renderer
{ {
PlatformCreateTexture(); PlatformCreateTexture();
} }
SetDebugNames();
if(_description.DepthStencilFormat != .Unknown) if(_description.DepthStencilFormat != .Unknown)
{ {
@@ -131,6 +133,18 @@ namespace GlitchyEngine.Renderer
} }
} }
private void SetDebugNames()
{
_nativeTexture.SetDebugName(Identifier);
_nativeResourceView.SetDebugName(scope $"{Identifier}: SRV");
_nativeRenderTargetView.SetDebugName(scope $"{Identifier}: RTV");
if (_depthStenilTarget != null)
{
_depthStenilTarget.nativeView.SetDebugName(scope $"{Identifier}: DSV");
}
}
protected override TextureViewBinding PlatformGetViewBinding() protected override TextureViewBinding PlatformGetViewBinding()
{ {
return new .(_nativeResourceView, _samplerState?.nativeSamplerState); return new .(_nativeResourceView, _samplerState?.nativeSamplerState);
@@ -255,6 +269,7 @@ namespace GlitchyEngine.Renderer
ID3D11Texture2D* texture = null; ID3D11Texture2D* texture = null;
var result = NativeDevice.CreateTexture2D(ref desc, null, &texture); var result = NativeDevice.CreateTexture2D(ref desc, null, &texture);
texture.SetDebugName(target.DebugName);
Log.EngineLogger.Assert(result.Succeeded, "Failed to create RenderTarget2D"); Log.EngineLogger.Assert(result.Succeeded, "Failed to create RenderTarget2D");
// TODO: calculate the max mip level // TODO: calculate the max mip level
@@ -68,7 +68,7 @@ namespace GlitchyEngine.Renderer
uint32 backBufferCount = 2; uint32 backBufferCount = 2;
Format backBufferFormat = .R8G8B8A8_UNorm; Format backBufferFormat = .R8G8B8A8_UNorm;
Format backBufferViewFormat = .R8G8B8A8_UNorm; // _SRGB //Format backBufferViewFormat = .R8G8B8A8_UNorm; // _SRGB
if(nativeSwapChain != null) if(nativeSwapChain != null)
{ {
@@ -116,8 +116,9 @@ namespace GlitchyEngine.Renderer
desc.IsSwapchainTarget = true; desc.IsSwapchainTarget = true;
_backBuffer = new RenderTarget2D(desc); _backBuffer = new RenderTarget2D(desc);
_backBuffer.Identifier = "Backbuffer"; _backBuffer.Identifier = "Back buffer";
_backBuffer.SamplerState = SamplerStateManager.LinearClamp; _backBuffer.SamplerState = SamplerStateManager.LinearClamp;
_backBuffer.ApplyChanges();
} }
_backBufferViewport = GlitchyEngine.Renderer.Viewport(0, 0, _width, _height, 0.0f, 1.0f); _backBufferViewport = GlitchyEngine.Renderer.Viewport(0, 0, _width, _height, 0.0f, 1.0f);
@@ -135,7 +136,7 @@ namespace GlitchyEngine.Renderer
{ {
Debug.Profiler.ProfileFunction!(); Debug.Profiler.ProfileFunction!();
nativeSwapChain.Present(Application.Get().Window.IsVSync ? 1 : 0, .None); nativeSwapChain.Present(Application.Instance.Window.IsVSync ? 1 : 0, .None);
} }
} }
} }
@@ -335,7 +335,7 @@ namespace GlitchyEngine.Renderer
{ {
Debug.Profiler.ProfileResourceFunction!(); Debug.Profiler.ProfileResourceFunction!();
SubresourceData resData = .(data, linePitch, slicePitch); //SubresourceData resData = .(data, linePitch, slicePitch);
// If data is null, set subresourceData null // If data is null, set subresourceData null
SubresourceData* resDataPtr = null;//data == null ? null : &resData; SubresourceData* resDataPtr = null;//data == null ? null : &resData;
@@ -131,7 +131,7 @@ namespace GlitchyEngine
keycode = VK_XBUTTON1; keycode = VK_XBUTTON1;
case .XButton2: case .XButton2:
keycode = VK_XBUTTON2; keycode = VK_XBUTTON2;
case default: default:
return false; return false;
} }
@@ -194,7 +194,7 @@ namespace GlitchyEngine
public override static void SetMousePosition(int2 pos) public override static void SetMousePosition(int2 pos)
{ {
HWnd windowHandle = (HWnd)(int)Application.Get().Window.NativeWindow; HWnd windowHandle = (HWnd)(int)Application.Instance.Window.NativeWindow;
var pos; var pos;
@@ -213,7 +213,7 @@ namespace GlitchyEngine
public override static void Impl_NewFrame() public override static void Impl_NewFrame()
{ {
Window window = Application.Get().Window; Window window = Application.Instance.Window;
Debug.Profiler.ProfileFunction!(); Debug.Profiler.ProfileFunction!();
@@ -260,7 +260,7 @@ namespace GlitchyEngine
public override static void Impl_EndFrame() public override static void Impl_EndFrame()
{ {
Application.Get().Window.[Friend]_rawMouseMovementAccumulator = .Zero; Application.Instance.Window.[Friend]_rawMouseMovementAccumulator = .Zero;
} }
} }
} }
@@ -251,7 +251,7 @@ namespace GlitchyEngine
[CLink] [CLink]
static extern IntBool IsWindowUnicode(HWND whnd); static extern IntBool IsWindowUnicode(HWND whnd);
public Result<void> SetIcon(StringView filePath) public override Result<void> SetIcon(StringView filePath)
{ {
HICON hIcon = LoadImageW(0, filePath.ToScopedNativeWChar!(), .Icon, 0, 0, .LoadFromFile); HICON hIcon = LoadImageW(0, filePath.ToScopedNativeWChar!(), .Icon, 0, 0, .LoadFromFile);
if (hIcon == 0) if (hIcon == 0)
@@ -62,8 +62,6 @@ namespace GlitchyEngine.Renderer
Debug.Profiler.ProfileResourceFunction!(); Debug.Profiler.ProfileResourceFunction!();
_description = description; _description = description;
ApplyChanges();
} }
/// Recreates the render target using the current description /// Recreates the render target using the current description
+2 -2
View File
@@ -1205,12 +1205,12 @@ namespace GlitchyEngine.Renderer
#endif #endif
Runtime.FatalError("Circle renderer currently broken, do we need it?"); Runtime.FatalError("Circle renderer currently broken, do we need it?");
QueueCircleInstance(transform, color, texture, null, transform.Translation.Z, uvTransform, innerRadius, entityId); /*QueueCircleInstance(transform, color, texture, null, transform.Translation.Z, uvTransform, innerRadius, entityId);
if(s_drawOrder == .Immediate) if(s_drawOrder == .Immediate)
{ {
DrawDeferred(); DrawDeferred();
} }*/
} }
public struct Statistics public struct Statistics
@@ -242,7 +242,7 @@ namespace GlitchyEngine.Renderer.Text
StyleStack<bool> richTextStack = scope .(true); StyleStack<bool> richTextStack = scope .(true);
// TODO: color stack not used?! // TODO: color stack not used?!
StyleStack<ColorRGBA> fontColorStack = scope .(textRenderer.Color); //StyleStack<ColorRGBA> fontColorStack = scope .(textRenderer.Color);
StyleStack<float> fontSizeStack = scope .(textRenderer.FontSize); StyleStack<float> fontSizeStack = scope .(textRenderer.FontSize);
@@ -117,8 +117,6 @@ struct EngineFunctionsGeneratorAttribute : Attribute, IComptimeTypeApply
{ {
String parameters = new String(); String parameters = new String();
StringView str = method.Name;
for (int i < method.ParamCount) for (int i < method.ParamCount)
{ {
if (i != 0) if (i != 0)
@@ -247,6 +247,7 @@ class SerializedObject
static T GetFieldDataAs<T>(FieldData fieldData) static T GetFieldDataAs<T>(FieldData fieldData)
{ {
#unwarn
return *(T*)&fieldData.RawData; return *(T*)&fieldData.RawData;
} }
@@ -323,7 +324,7 @@ class SerializedObject
Serialize.Value(writer, ValueView(typeof(StringView), &dataView), environment); Serialize.Value(writer, ValueView(typeof(StringView), &dataView), environment);
case .EngineObjectReference: case .EngineObjectReference:
writer.Type("EngineObject"); writer.Type("EngineObject");
if (field.Data.EngineObject.FullTypeName != null) if (field.Data.EngineObject.FullTypeName.IsEmpty)
writer.Type((StringView)field.Data.ListEngineObject.FullTypeName); writer.Type((StringView)field.Data.ListEngineObject.FullTypeName);
Serialize.Value(writer, field.Data.EngineObject.ID, environment); Serialize.Value(writer, field.Data.EngineObject.ID, environment);
case .ObjectReference: case .ObjectReference:
+7 -7
View File
@@ -322,12 +322,12 @@ namespace GlitchyEngine.World
let start = vertices[i - 1]; let start = vertices[i - 1];
let end = vertices[i]; let end = vertices[i];
Renderer2D.DrawLine(float3(start.x, start.y, 0.0f), float3(end.x, end.y, 0.0f), *(ColorRGBA*)&color); Renderer2D.DrawLine(float3(start.x, start.y, 0.0f), float3(end.x, end.y, 0.0f), (ColorRGBA)color);
} }
let start = vertices[vertexCount - 1]; let start = vertices[vertexCount - 1];
let end = vertices[0]; let end = vertices[0];
Renderer2D.DrawLine(float3(start.x, start.y, 0.0f), float3(end.x, end.y, 0.0f), *(ColorRGBA*)&color); Renderer2D.DrawLine(float3(start.x, start.y, 0.0f), float3(end.x, end.y, 0.0f),(ColorRGBA)color);
}; };
draw.drawSolidPolygonCallback = (vertices, vertexCount, color, userData) => draw.drawSolidPolygonCallback = (vertices, vertexCount, color, userData) =>
{ {
@@ -336,20 +336,20 @@ namespace GlitchyEngine.World
let start = vertices[i - 1]; let start = vertices[i - 1];
let end = vertices[i]; let end = vertices[i];
Renderer2D.DrawLine(float3(start.x, start.y, 0.0f), float3(end.x, end.y, 0.0f), *(ColorRGBA*)&color); Renderer2D.DrawLine(float3(start.x, start.y, 0.0f), float3(end.x, end.y, 0.0f),(ColorRGBA)color);
} }
let start = vertices[vertexCount - 1]; let start = vertices[vertexCount - 1];
let end = vertices[0]; let end = vertices[0];
Renderer2D.DrawLine(float3(start.x, start.y, 0.0f), float3(end.x, end.y, 0.0f), *(ColorRGBA*)&color); Renderer2D.DrawLine(float3(start.x, start.y, 0.0f), float3(end.x, end.y, 0.0f),(ColorRGBA)color);
}; };
draw.drawCircleCallback = (center, radius, color, userData) => draw.drawCircleCallback = (center, radius, color, userData) =>
{ {
Renderer2D.DrawCircle(center, radius.XX, *(ColorRGBA*)&color, 0.1f); Renderer2D.DrawCircle(center, radius.XX, (ColorRGBA)color, 0.1f);
}; };
draw.drawSolidCircleCallback = (center, radius, axis, color, userData) => draw.drawSolidCircleCallback = (center, radius, axis, color, userData) =>
{ {
Renderer2D.DrawCircle(center, radius.XX, *(ColorRGBA*)&color); Renderer2D.DrawCircle(center, radius.XX, (ColorRGBA)color);
}; };
draw.drawSegmentCallback = (p1, p2, color, userData) => draw.drawSegmentCallback = (p1, p2, color, userData) =>
{ {
@@ -723,7 +723,7 @@ namespace GlitchyEngine.World
b2Body* body = rigidbody.RuntimeBody; b2Body* body = rigidbody.RuntimeBody;
b2Vec2 position = Box2D.Body.GetPosition(body); b2Vec2 position = Box2D.Body.GetPosition(body);
float angle = Box2D.Body.GetAngle(body); //float angle = Box2D.Body.GetAngle(body);
b2Transform bodyTransform = Box2D.Body.GetTransform(body); b2Transform bodyTransform = Box2D.Body.GetTransform(body);
float cos = sqrt((1 + bodyTransform.q.c) / 2); float cos = sqrt((1 + bodyTransform.q.c) / 2);