//----------------------------------------------------------------------- // ----------------------------------------------------------------------- // file="Program" // Project: StgSharp // AuthorGroup: Nitload // Copyright (c) Nitload. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. // // ----------------------------------------------------------------------- // ----------------------------------------------------------------------- using StgSharp.Common.Timing; using StgSharp.HighPerformance; using StgSharp.HighPerformance.Memory; using StgSharp.Internal; using StgSharp.Mathematics.Numeric; using StgSharp.Timing; namespace StgSharp { internal static partial class Program { private static string testExpPath = @"D:\Programmer\stepcode\data\ap203\ap203.exp"; internal static unsafe void Main(string[] args) { try { World.Initialize() .UseModule() .UseModule() .InitializeModule(); // TestRender(); // TestHlsf(); // HlsfStressTest.Run(); /* HybridLayerSegregatedFitAllocator hlsf; unchecked { hlsf = new((nuint)(64 * (ulong)10000 * 10000)); } Matrix m = Matrix.FromHlsf(1000, 1000, hlsf); MatrixCompute.Fill(m, 1.0f); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Matrix n = Matrix.FromHlsf(1000, 1000, hlsf); MatrixCompute.Fill(n, 0.0f); for (int i = 0; i < 5; i++) { for (int j = 0; j < 2; j++) { MatrixCompute.Add(n, m, n); // Console.WriteLine($"{i} {j}"); } GC.Collect(); } MatrixCompute.Mul(n, 12, n); for (int i = 0; i < 20; i++) { for (int j = 0; j < 20; j++) { Console.Write($"{n[i, j]:0.0E+00} \t"); } Console.WriteLine(); } /**/ // --- Logarithmic time sequence test: print seconds at each emitted span --- // Configure a simple sequence: // initial slice = 0.5s, total = 5s, growth multiplier = 2, min slice = 0.75s TimeSequence seq = /* TimeSequence.CreateLogarithmic(initialSliceSeconds:0.5, totalSeconds:5.0, growthMultiplier:2.0, minSliceSeconds:0.75); /**/ TimeSequence.CreateLinear(5, 1); /**/ // Bind to default time source provider. TimeSpanProvider provider = new TimeSpanProvider(seq, TimeSpanProvider.DefaultProvider); // Print the second mark when a span is emitted. provider.TimeSpanRefreshed += (s, e) => { // CurrentSecond is PreviousFrameTick / Frequency Console.WriteLine($"span @ {provider.CurrentSecond:0.000}s"); }; // Start the time source and wait until sequence ends. TimeSpanProvider.DefaultProvider.StartProvidingTime(); while (!provider.IsEnded) { provider.WaitNextSpan(); } TimeSpanProvider.DefaultProvider.StopProvidingTime(); // end of log-time sequence test } catch (Exception ex) { Console.WriteLine(ex); Console.ReadLine(); /* World.WriteLog($"{ex}", LogType.Error); Dialogue.PostError(ex); /**/ World.Terminate(-1); /**/ } finally { World.Terminate(0); } /**/ } } }