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
+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
{
}
}
}
}