daily update on 20230730 by nitload youmu, 5th day of params displacement

This commit is contained in:
Nitload
2023-07-30 07:08:36 +08:00
parent e11c88b051
commit 194d65edf6
147 changed files with 36506 additions and 1927 deletions
+15
View File
@@ -0,0 +1,15 @@
using StgSharp.Math;
using System;
using System.Collections.Generic;
using System.Text;
namespace StgSharp.Control
{
public static partial class Instruction
{
public static unsafe void RecycleMappedVec(Vec4d vec)
{
}
}
}
+9 -8
View File
@@ -5,7 +5,7 @@ using System.Diagnostics.CodeAnalysis;
namespace StgSharp.Control
{
public static class TimeLine
public static partial class TimeLine
{
public const long version = 10;
@@ -23,6 +23,14 @@ namespace StgSharp.Control
internal static TimelineBlock currentOperation;
private static bool isPaused = false;
static unsafe TimeLine()
{
allForm = new LinkedList<Form>();
allPool = new LinkedList<Pool>();
internalIO.InternalInitGL();
}
public static TimelineBlock CurrentOperation
{
get { return currentOperation; }
@@ -36,13 +44,6 @@ namespace StgSharp.Control
}
}
static TimeLine()
{
allForm = new LinkedList<Form>();
allPool = new LinkedList<Pool>();
internalIO.InternalInitGL();
}
public static void OnRender()
{
tickCounter.QuickAdd();
+19 -8
View File
@@ -6,20 +6,31 @@ using System.Text;
namespace StgSharp
{
internal static unsafe partial class internalIO
{
[DllImport("StgSharpGraphic.dll",EntryPoint = "VecAddVec",
[DllImport("StgSharpGraphic.dll", EntryPoint = "VecAddVec",
CallingConvention =CallingConvention.Cdecl)]
internal static extern M128 VecAddVec(M128 vec1, M128 vec2);
internal static extern M128 VecAddVec(in IntPtr ptr1, in IntPtr ptr2 /**/, in IntPtr ret/**/);
[DllImport("StgSharpGraphic.dll",EntryPoint = "VecSubVec")]
internal static extern M128 VecSubVec(M128 vec1, M128 vec2);
[DllImport("StgSharpGraphic.dll", EntryPoint = "VecSubVec",
CallingConvention = CallingConvention.Cdecl)]
internal static extern void VecSubVec(IntPtr ptr1, IntPtr ptr2,IntPtr ret);
[DllImport("StgSharpGraphic.dll",EntryPoint = "VecMulVec")]
internal static extern float VecMulVec(M128 vec1, M128 vec2);
[DllImport("StgSharpGraphic.dll", EntryPoint = "VecMulVec",
CallingConvention = CallingConvention.Cdecl)]
internal static extern void VecMulVec(IntPtr ptr1, IntPtr ptr2, IntPtr ret);
[DllImport("StgSharpGraphic.dll", EntryPoint = "InitBigM128Map")]
internal static unsafe extern long internalInitBigM128Map(int floatCount);
[DllImport("StgSharpGraphic.dll", EntryPoint = "initSSE")]
internal static extern ulong InternalInitSSE();
[DllImport("StgSharpGraphic.dll", EntryPoint = "InitM128")]
internal static unsafe extern IntPtr InternalInitM128(float x,float y,float z,float w);
[DllImport("StgSharpGraphic.dll", EntryPoint = "DeinitM128")]
internal static unsafe extern void InternalDeinitM128(IntPtr m128Ptr);
}
}
+11 -7
View File
@@ -1,14 +1,17 @@
using StgSharp;
using StgSharp.Control;
using StgSharp.Logic;
using System.Data;
using System.Runtime.InteropServices;
namespace StgSharp.Math
{
public class M128Map
public unsafe class M128Map
{
public readonly long mapID;
internal long mapPtr;
internal readonly StgSharp.LinkedListNode<long> _unusedM128Header;
private const int mapSize = 30 * 30;
internal StgSharp.LinkedList<long> m128Map =
new StgSharp.LinkedList<long>();
@@ -23,15 +26,16 @@ namespace StgSharp.Math
public M128Map()
{
long M128Ptr = internalIO.internalInitBigM128Map(4*30*30);
m128Map.Add(0);
mapPtr = (long)(Marshal.AllocHGlobal(sizeof(M128)*mapSize)+15);
long firstM128ptr = (mapPtr / 16 + 1) * 16;
m128Map.Add(0);
_unusedM128Header = m128Map._hook._next;
for (int i = 1; i < 80*80/4; i++)
for (int i = 0; i < 4*30*30*4; i+=16)
{
m128Map.Add(M128Ptr);
M128Ptr += 4;
m128Map.Add(firstM128ptr+i);
}
mapID = Calc.RandomSeed();
+24
View File
@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace StgSharp.Math
{
public static unsafe partial class SSE
{
public enum Registor : byte
{
XMM0=0,
XMM1=1,
XMM2=2,
XMM3=3,
XMM4=4,
XMM5=5,
XMM6=6,
XMM7=7
}
}
}
+37 -6
View File
@@ -5,6 +5,34 @@ using System.Text;
namespace StgSharp.Math
{
[StructLayout(LayoutKind.Sequential)]
internal struct M128ptrCache
{
internal ulong ptr0;
internal ulong ptr1;
internal ulong ptr2;
internal ulong ptr3;
internal ulong ptr4;
internal ulong ptr5;
internal ulong ptr6;
internal ulong ptr7;
public override string ToString()
{
return
$"{ptr0}\t" +
$"{ptr1}\t" +
$"{ptr2}\t" +
$"{ptr3}\t" +
$"{ptr4}\t" +
$"{ptr5}\t" +
$"{ptr6}\t" +
$"{ptr7}\t" +
$"";
}
}
[StructLayout(LayoutKind.Explicit, Size = 16, Pack = 16)]
internal struct M128
{
@@ -24,15 +52,18 @@ namespace StgSharp.Math
[FieldOffset(0)] internal long double_0;
[FieldOffset(8)] internal long double_1;
internal M128(float s0, float s1, float s2, float s3)
internal M128(float x,float y,float z,float w)
{
single_0 = s0;
single_1 = s1;
single_2 = s2;
single_3 = s3;
single_0 = x;
single_1 = y;
single_2 = z;
single_3 = w;
}
public override string ToString()
{
return $"{single_0}\t{single_1}\t{single_2}\t{single_3}";
}
}
}
+11
View File
@@ -0,0 +1,11 @@
using StgSharp.Math;
using System;
using System.Collections.Generic;
using System.Text;
namespace StgSharp.Control
{
public static unsafe partial class TimeLine
{
}
}
+111 -72
View File
@@ -1,5 +1,4 @@
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
@@ -12,43 +11,60 @@ namespace StgSharp.Math
Copy
}
public class Matrix4x4
public unsafe class Matrix4x4
{
internal long _row0Ptr;
internal long _row1Ptr;
internal long _row2Ptr;
internal long _row3Ptr;
internal M128Map map;
internal IntPtr _row0Ptr;
internal IntPtr _row1Ptr;
internal IntPtr _row2Ptr;
internal IntPtr _row3Ptr;
internal M128 _row0;
internal M128 _row1;
internal M128 _row2;
internal M128 _row3;
private bool isTransposed=false;
private Matrix4x4 _transpose;
internal Matrix4x4()
{
_transpose = new Matrix4x4();
_transpose._transpose = this;
_transpose.isTransposed = true;
_row0Ptr = internalIO.InternalInitM128(0, 0, 0, 0);
_row1Ptr = internalIO.InternalInitM128(0, 0, 0, 0);
_row2Ptr = internalIO.InternalInitM128(0, 0, 0, 0);
_row3Ptr = internalIO.InternalInitM128(0, 0, 0, 0);
_transpose = new Matrix4x4(this);
}
internal Matrix4x4(M128 row0, M128 row1, M128 row2, M128 row3)
//Ctor used for the matixes of transposed matrix
internal Matrix4x4(Matrix4x4 transpose)
{
this._row0 = row0;
this._row1 = row1;
this._row2 = row2;
this._row3 = row3;
_row0Ptr = internalIO.InternalInitM128(0, 0, 0, 0);
_row1Ptr = internalIO.InternalInitM128(0, 0, 0, 0);
_row2Ptr = internalIO.InternalInitM128(0, 0, 0, 0);
_row3Ptr = internalIO.InternalInitM128(0, 0, 0, 0);
_transpose = transpose;
this.isTransposed=true;
}
internal unsafe Matrix4x4(M128 row0, M128 row1, M128 row2, M128 row3)
{
_row0Ptr = internalIO.InternalInitM128(
row0.single_0, row0.single_1, row0.single_2, row0.single_3);
_row1Ptr = internalIO.InternalInitM128(
row1.single_0, row1.single_1, row1.single_2, row1.single_3);
_row2Ptr = internalIO.InternalInitM128(
row2.single_0, row2.single_1, row2.single_2, row2.single_3);
_row3Ptr = internalIO.InternalInitM128(
row3.single_0, row3.single_1, row3.single_2, row3.single_3);
_transpose = new Matrix4x4(this);
}
public Matrix4x4(
public unsafe Matrix4x4(
float a00, float a01, float a02, float a03,
float a10, float a11, float a12, float a13,
float a20, float a21, float a22, float a23,
@@ -56,37 +72,37 @@ namespace StgSharp.Math
)
{
_transpose = new Matrix4x4();
_transpose._transpose = this;
this._row0 = new M128(a00, a01, a02, a03);
this._row1 = new M128(a10, a11, a12, a13);
this._row2 = new M128(a20, a21, a22, a23);
this._row3 = new M128(a30, a31, a32, a33);
_row0Ptr = internalIO.InternalInitM128(a00,a01,a02,a03);
_row1Ptr = internalIO.InternalInitM128(a10,a11,a12,a13);
_row2Ptr = internalIO.InternalInitM128(a20,a21,a22,a23);
_row3Ptr = internalIO.InternalInitM128(a30,a31,a32,a33);
_transpose = new Matrix4x4(this);
}
internal void internalTranspose()
{
if (!isTransposed)
{
_transpose._row0.single_0 = _row0.single_0;
_transpose._row0.single_1 = _row1.single_0;
_transpose._row0.single_2 = _row2.single_0;
_transpose._row0.single_3 = _row3.single_0;
(*(M128*)_transpose._row0Ptr).single_0 = (*(M128*)_row0Ptr).single_0;
(*(M128*)_transpose._row0Ptr).single_1 = (*(M128*)_row1Ptr).single_0;
(*(M128*)_transpose._row0Ptr).single_2 = (*(M128*)_row2Ptr).single_0;
(*(M128*)_transpose._row0Ptr).single_3 = (*(M128*)_row3Ptr).single_0;
_transpose._row1.single_0 = _row0.single_1;
_transpose._row1.single_1 = _row1.single_1;
_transpose._row1.single_2 = _row2.single_1;
_transpose._row1.single_3 = _row3.single_1;
_transpose._row2.single_0 = _row0.single_2;
_transpose._row2.single_1 = _row1.single_2;
_transpose._row2.single_2 = _row2.single_2;
_transpose._row2.single_3 = _row3.single_2;
_transpose._row3.single_0 = _row0.single_3;
_transpose._row3.single_1 = _row1.single_3;
_transpose._row3.single_2 = _row2.single_3;
_transpose._row3.single_3 = _row3.single_3;
(*(M128*)_transpose._row1Ptr).single_0 = (*(M128*)_row0Ptr).single_1;
(*(M128*)_transpose._row1Ptr).single_1 = (*(M128*)_row1Ptr).single_1;
(*(M128*)_transpose._row1Ptr).single_2 = (*(M128*)_row2Ptr).single_1;
(*(M128*)_transpose._row1Ptr).single_3 = (*(M128*)_row3Ptr).single_1;
(*(M128*)_transpose._row2Ptr).single_0 = (*(M128*)_row0Ptr).single_2;
(*(M128*)_transpose._row2Ptr).single_1 = (*(M128*)_row1Ptr).single_2;
(*(M128*)_transpose._row2Ptr).single_2 = (*(M128*)_row2Ptr).single_2;
(*(M128*)_transpose._row2Ptr).single_3 = (*(M128*)_row3Ptr).single_2;
(*(M128*)_transpose._row3Ptr).single_0 = (*(M128*)_row0Ptr).single_3;
(*(M128*)_transpose._row3Ptr).single_1 = (*(M128*)_row1Ptr).single_3;
(*(M128*)_transpose._row3Ptr).single_2 = (*(M128*)_row2Ptr).single_3;
(*(M128*)_transpose._row3Ptr).single_3 = (*(M128*)_row3Ptr).single_3;
isTransposed = true;
}
@@ -99,10 +115,10 @@ namespace StgSharp.Math
{
case TransposeMode.New:
return new Matrix4x4(
_transpose._row0,
_transpose._row1,
_transpose._row2,
_transpose._row3
*(M128*)_transpose._row0Ptr,
*(M128*)_transpose._row1Ptr,
*(M128*)_transpose._row2Ptr,
*(M128*)_transpose._row3Ptr
);
break;
case TransposeMode.Copy:
@@ -114,44 +130,45 @@ namespace StgSharp.Math
}
}
/*
public static Matrix4x4 operator +(Matrix4x4 matrix1, Matrix4x4 matrix2)
{
return new Matrix4x4(
internalIO.VecAddVec(matrix1._row0, matrix2._row0),
internalIO.VecAddVec(matrix1._row1, matrix2._row1),
internalIO.VecAddVec(matrix1._row2, matrix2._row2),
internalIO.VecAddVec(matrix1._row3, matrix2._row3)
internalIO.VecAddVec(matrix1._row0Ptr, matrix2._row0Ptr),
internalIO.VecAddVec(matrix1._row1Ptr, matrix2._row1Ptr),
internalIO.VecAddVec(matrix1._row2Ptr, matrix2._row2Ptr),
internalIO.VecAddVec(matrix1._row3Ptr, matrix2._row3Ptr)
) ;
}
public static Matrix4x4 operator *(Matrix4x4 matrix, float value)
{
M128 newRow0 = new M128(
matrix._row0.single_0 * value,
matrix._row0.single_1 * value,
matrix._row0.single_2 * value,
matrix._row0.single_3 * value
(*(M128*)matrix._row0Ptr).single_0 * value,
(*(M128*)matrix._row0Ptr).single_1 * value,
(*(M128*)matrix._row0Ptr).single_2 * value,
(*(M128*)matrix._row0Ptr).single_3 * value
);
M128 newRow1 = new M128(
matrix._row1.single_0 * value,
matrix._row1.single_1 * value,
matrix._row1.single_2 * value,
matrix._row1.single_3 * value
(*(M128*)matrix._row1Ptr).single_0 * value,
(*(M128*)matrix._row1Ptr).single_1 * value,
(*(M128*)matrix._row1Ptr).single_2 * value,
(*(M128*)matrix._row1Ptr).single_3 * value
);
M128 newRow2 = new M128(
matrix._row2.single_0 * value,
matrix._row2.single_1 * value,
matrix._row2.single_2 * value,
matrix._row2.single_3 * value
(*(M128*)matrix._row2Ptr).single_0 * value,
(*(M128*)matrix._row2Ptr).single_1 * value,
(*(M128*)matrix._row2Ptr).single_2 * value,
(*(M128*)matrix._row2Ptr).single_3 * value
);
M128 newRow3 = new M128(
matrix._row3.single_0 * value,
matrix._row3.single_1 * value,
matrix._row3.single_2 * value,
matrix._row3.single_3 * value
(*(M128*)matrix._row3Ptr).single_0 * value,
(*(M128*)matrix._row3Ptr).single_1 * value,
(*(M128*)matrix._row3Ptr).single_2 * value,
(*(M128*)matrix._row3Ptr).single_3 * value
);
return new Matrix4x4(
@@ -159,6 +176,28 @@ namespace StgSharp.Math
);
}
public override string ToString()
{
return $"{*(M128*)_row0Ptr}\n{*(M128*)_row1Ptr}\n{*(M128*)_row2Ptr}\n{*(M128*)_row3Ptr}";
}
/**/
~Matrix4x4()
{
if (map==null)
{
Marshal.FreeHGlobal((IntPtr)_row0Ptr);
Marshal.FreeHGlobal((IntPtr)_row1Ptr);
Marshal.FreeHGlobal((IntPtr)_row2Ptr);
Marshal.FreeHGlobal((IntPtr)_row3Ptr);
}
else
{
//in case the matrix is in a M128 map
}
}
}
+44 -21
View File
@@ -6,63 +6,86 @@ using System.Runtime.InteropServices;
namespace StgSharp.Math
{
public class Vec4d
{
internal readonly int mapID;
internal readonly long m128Ptr;
internal readonly M128Map _map;
internal readonly IntPtr _m128Ptr;
private M128 _value;
public unsafe float X
{
get { return (*(M128*)mapID).single_0; }
set { (*(M128*)mapID).single_0 = value; }
get { return (*(M128*)_m128Ptr).single_0; }
set { (*(M128*)_m128Ptr).single_0 = value; }
}
public float Y
public unsafe float Y
{
get { return _value.single_1; }
set { _value.single_1 = value; }
get { return (*(M128*)_m128Ptr).single_1; }
set { (*(M128*)_m128Ptr).single_1 = value; }
}
public float Z
public unsafe float Z
{
get { return _value.single_2; }
set { _value.single_2 = value; }
get { return (*(M128*)_m128Ptr).single_2; }
set { (*(M128*)_m128Ptr).single_2 = value; }
}
public float W
public unsafe float W
{
get { return _value.single_3; }
set { _value.single_3 = value; }
get { return (*(M128*)_m128Ptr).single_3; }
set { (*(M128*)_m128Ptr).single_3 = value; }
}
public Vec4d(float x, float y, float z, float w)
{
X = x;
Y = y;
Z = z;
W = w;
IntPtr a = internalIO.InternalInitM128(x,y,z,w);
if ((ulong)a>=0)
{
this._m128Ptr = a;
}
}
internal Vec4d()
{
_m128Ptr = internalIO.InternalInitM128(0,0,0,0);
}
public static Vec4d operator +(Vec4d vec1,Vec4d vec2)
{
Vec4d result = new Vec4d();
result._value = internalIO.VecAddVec(vec1._value,vec2._value);
internalIO.VecAddVec(vec1._m128Ptr, vec2._m128Ptr/**/,result._m128Ptr/**/);
return result;
}
/**/
public static Vec4d operator -(Vec4d vec1, Vec4d vec2)
{
Vec4d result = new Vec4d();
result._value = internalIO.VecAddVec(vec1._value, vec2._value);
internalIO.VecSubVec(vec1._m128Ptr,vec2._m128Ptr,result._m128Ptr);
return result;
}
/**/
public unsafe override string ToString()
{
return $"{*(M128*)_m128Ptr}";
}
~Vec4d()
{
if (_map == null)
{
internalIO.InternalDeinitM128(this._m128Ptr);
}
else
{
}
}
}
}
+1 -1
View File
@@ -13,7 +13,7 @@
<EnableNETAnalyzers>True</EnableNETAnalyzers>
<AnalysisLevel>preview-all</AnalysisLevel>
<OutputType>Library</OutputType>
<StartupObject></StartupObject>
<StartupObject>StgSharp.Debug.DebugProgram</StartupObject>
<Nullable>enable</Nullable>
<Configurations>Debug;Release;NoOps</Configurations>
</PropertyGroup>
@@ -1 +1 @@
90bd7195add9e7840a5242a3ac308feca4b9379c
7187d76e83f08a7f8f9257b5e2e267ca420dd38a