daily update on 20230822 by nitload youmu
This commit is contained in:
@@ -1,10 +1,20 @@
|
||||
using StgSharp.Geometries;
|
||||
//
|
||||
#define WINDOWS
|
||||
//#define LINUX
|
||||
//#define MACOS
|
||||
//#define IOS
|
||||
//#define ANDROID
|
||||
|
||||
using StgSharp.Geometries;
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
|
||||
|
||||
|
||||
namespace StgSharp
|
||||
{
|
||||
|
||||
|
||||
internal static unsafe partial class internalIO
|
||||
{
|
||||
|
||||
|
||||
@@ -11,10 +11,18 @@ namespace StgSharp
|
||||
{
|
||||
internal static partial class internalIO
|
||||
{
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "load",
|
||||
|
||||
#region load
|
||||
|
||||
[DllImport(dllName: "StgSharpGraphic.dll", EntryPoint = "load",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern IntPtr load_internal(float x,float y, float z, float w);
|
||||
internal static extern ref M128 load_internal(float x,float y, float z, float w);
|
||||
|
||||
[DllImport(dllName: "StgSharpGraphic.dll", EntryPoint = "load",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static unsafe extern M128* loadptr_internal(float x, float y, float z, float w);
|
||||
|
||||
[DllImport("StgSharpGraphic.dll",EntryPoint = "load_matmap",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
@@ -24,6 +32,11 @@ namespace StgSharp
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr load_cpy_internal(IntPtr ptr);
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region add sub
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "addps",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr addps_internal(IntPtr ptr1, IntPtr ptr2);
|
||||
@@ -32,18 +45,33 @@ namespace StgSharp
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr subps_internal(IntPtr ptr1, IntPtr ptr2);
|
||||
|
||||
#endregion
|
||||
|
||||
#region mulps
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "mulps",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr mulps_internal(IntPtr ptr1, IntPtr ptr2);
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "mulps_const",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern IntPtr mulps_const_internal(IntPtr ptr, float value);
|
||||
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "mulps_sum",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern float mulps_sum_internal(IntPtr ptr1, IntPtr ptr2);
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "mulps_sum",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern unsafe float mulps_sum_internal(M128* ptr1, M128* ptr2);
|
||||
|
||||
#endregion
|
||||
|
||||
#region div
|
||||
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "mulps",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr divps_internal(IntPtr ptr1, IntPtr ptr2);
|
||||
@@ -52,14 +80,12 @@ namespace StgSharp
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr divps_const_internal(IntPtr ptr, float value);
|
||||
|
||||
#endregion
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "sqrtss_const",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern float sqrtss_const_internal(float a);
|
||||
|
||||
[DllImport("StgSharpGraphic.dll",EntryPoint = "test_addps_mat",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr addps_mat_internal_test(IntPtr ptr1, IntPtr ptr2);
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -67,21 +93,56 @@ namespace StgSharp
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr set_m128ptr_default_internal();
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "transpose_ssemat_2",
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#region deinit m128
|
||||
|
||||
[DllImport(
|
||||
"msvcrt.dll",
|
||||
EntryPoint = "_aligned_free",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern ref M128matMap transpose_ssemat2_internal(ref M128matMap matMap);
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern unsafe void deinit_internal(M128* ptr);
|
||||
|
||||
[DllImport("StgSharpGraphic.dll",EntryPoint = "transpose_ssemat_3",
|
||||
[DllImport(
|
||||
"msvcrt.dll",
|
||||
EntryPoint = "_aligned_free",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern ref M128matMap transpose_ssemat3_internal(ref M128matMap matMap);
|
||||
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern unsafe void deinit_internal(Mat2* ptr);
|
||||
|
||||
/*
|
||||
[DllImport(
|
||||
"msvcrt.dll",
|
||||
EntryPoint = "_aligned_free",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern unsafe void deinit_internal(Mat3* ptr);
|
||||
*/
|
||||
|
||||
[DllImport(
|
||||
"msvcrt.dll",
|
||||
EntryPoint = "_aligned_free",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern unsafe void deinit_internal(Mat4* ptr);
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "deinitM128",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void deinitM128_internal(IntPtr M128Ptr);
|
||||
internal static extern void deinitM128_internal(ref M128 vec);
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "deinitM128",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern unsafe void deinitM128_internal(M128* vec);
|
||||
|
||||
#endregion
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "deinit_matmapPtr_sse",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void deinitMatmapPtr_sse_internal(ref M128matMap mapPtr);
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "deinit_matmap_sse",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
|
||||
@@ -6,20 +6,11 @@ using System.Text;
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
internal struct MatSize
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
internal ushort sizePair;
|
||||
|
||||
[FieldOffset(0)]
|
||||
internal byte width;
|
||||
[FieldOffset(1)]
|
||||
internal byte height;
|
||||
}
|
||||
|
||||
public static unsafe partial class SSE
|
||||
{
|
||||
public static int M128Size = 16;
|
||||
|
||||
internal static IntPtr defaultM128Ptr =
|
||||
internalIO.set_m128ptr_default_internal();
|
||||
|
||||
@@ -43,11 +34,5 @@ namespace StgSharp.Math
|
||||
{
|
||||
}
|
||||
|
||||
public static Vec4d addps(Vec4d vec1, Vec4d vec2)
|
||||
{
|
||||
return new Vec4d(
|
||||
internalIO.addps_internal(vec1._m128Ptr,vec2._m128Ptr)
|
||||
) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
public static unsafe partial class VectorCalc
|
||||
public static partial class VectorCalc
|
||||
{
|
||||
/*
|
||||
|
||||
@@ -527,30 +527,34 @@ namespace StgSharp.Math
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
public static Matrix4x4 Multiple( Matrix4x4 matrix1, Matrix4x4 matrix2)
|
||||
{
|
||||
Matrix4x4 transpose = matrix1.Transpose(TransposeMode.Copy);
|
||||
matrix1.InternalTranspose();
|
||||
|
||||
return new Matrix4x4(
|
||||
internalIO.mulps_sum_internal(matrix2._colum0Ptr, transpose._colum0Ptr),
|
||||
internalIO.mulps_sum_internal(matrix2._colum0Ptr, transpose._colum1Ptr),
|
||||
internalIO.mulps_sum_internal(matrix2._colum0Ptr, transpose._colum2Ptr),
|
||||
internalIO.mulps_sum_internal(matrix2._colum0Ptr, transpose._colum3Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum0Ptr,matrix2._matMap.colum0Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum0Ptr,matrix2._matMap.colum1Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum0Ptr,matrix2._matMap.colum2Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum0Ptr,matrix2._matMap.colum3Ptr),
|
||||
|
||||
internalIO.mulps_sum_internal(matrix2._colum1Ptr, transpose._colum0Ptr),
|
||||
internalIO.mulps_sum_internal(matrix2._colum1Ptr, transpose._colum1Ptr),
|
||||
internalIO.mulps_sum_internal(matrix2._colum1Ptr, transpose._colum2Ptr),
|
||||
internalIO.mulps_sum_internal(matrix2._colum1Ptr, transpose._colum3Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum1Ptr,matrix2._matMap.colum0Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum1Ptr,matrix2._matMap.colum1Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum1Ptr,matrix2._matMap.colum2Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum1Ptr,matrix2._matMap.colum3Ptr),
|
||||
|
||||
internalIO.mulps_sum_internal(matrix2._colum2Ptr, transpose._colum0Ptr),
|
||||
internalIO.mulps_sum_internal(matrix2._colum2Ptr, transpose._colum1Ptr),
|
||||
internalIO.mulps_sum_internal(matrix2._colum2Ptr, transpose._colum2Ptr),
|
||||
internalIO.mulps_sum_internal(matrix2._colum2Ptr, transpose._colum3Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum2Ptr,matrix2._matMap.colum0Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum2Ptr,matrix2._matMap.colum1Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum2Ptr,matrix2._matMap.colum2Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum2Ptr,matrix2._matMap.colum3Ptr),
|
||||
|
||||
internalIO.mulps_sum_internal(matrix2._colum3Ptr, transpose._colum0Ptr),
|
||||
internalIO.mulps_sum_internal(matrix2._colum3Ptr, transpose._colum1Ptr),
|
||||
internalIO.mulps_sum_internal(matrix2._colum3Ptr, transpose._colum2Ptr),
|
||||
internalIO.mulps_sum_internal(matrix2._colum3Ptr, transpose._colum3Ptr)
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum3Ptr,matrix2._matMap.colum0Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum3Ptr,matrix2._matMap.colum1Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum3Ptr,matrix2._matMap.colum2Ptr),
|
||||
internalIO.mulps_sum_internal(matrix1._transpose.colum3Ptr,matrix2._matMap.colum3Ptr)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct colum2 : IEquatable<colum2>
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
public float X;
|
||||
[FieldOffset(4)]
|
||||
public float Y;
|
||||
|
||||
public colum2(float x, float y)
|
||||
{
|
||||
X = x;
|
||||
Y = y;
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (obj.GetType() != typeof(colum2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return this.Equals((colum2)obj);
|
||||
}
|
||||
}
|
||||
|
||||
bool IEquatable<colum2>.Equals(colum2 other)
|
||||
{
|
||||
if (this.GetHashCode() != other.GetHashCode())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return X == other.X && Y == other.Y;
|
||||
}
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return HashCode.Combine(X, Y);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{X}\n{Y}";
|
||||
}
|
||||
|
||||
public static colum2 operator +(colum2 c1, colum2 c2)
|
||||
{
|
||||
return new colum2(
|
||||
c1.X + c2.X,
|
||||
c1.Y + c2.Y
|
||||
);
|
||||
}
|
||||
|
||||
public static colum2 operator -(colum2 c1, colum2 c2)
|
||||
{
|
||||
return new colum2(
|
||||
c1.X - c2.X,
|
||||
c1.Y - c2.Y
|
||||
);
|
||||
}
|
||||
|
||||
public static colum2 operator *(colum2 colum, float x)
|
||||
{
|
||||
return new colum2(colum.X * x, colum.Y * x);
|
||||
}
|
||||
|
||||
public static colum2 operator /(colum2 colum, float x)
|
||||
{
|
||||
return new colum2(colum.X / x, colum.Y / x);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,121 +0,0 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct colum3 : IEquatable<colum3>
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
public float X;
|
||||
[FieldOffset(4)]
|
||||
public float Y;
|
||||
[FieldOffset(8)]
|
||||
public float Z;
|
||||
|
||||
public colum3(float x, float y, float z)
|
||||
{
|
||||
X = x;
|
||||
Y = y;
|
||||
Z = z;
|
||||
}
|
||||
|
||||
bool IEquatable<colum3>.Equals(colum3 other)
|
||||
{
|
||||
if (this.GetHashCode() != other.GetHashCode())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return this.X == other.X
|
||||
&& this.Y == other.Y
|
||||
&& this.Z == other.Z;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (obj.GetType() != typeof(colum3))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return this.Equals((colum3)obj);
|
||||
}
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return HashCode.Combine(X, Y, Z);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{X}\t{Y}\t{Z}";
|
||||
}
|
||||
|
||||
public static bool operator ==(colum3 vec1, colum3 vec2)
|
||||
{
|
||||
return vec1.X == vec2.X
|
||||
&& vec1.Y == vec2.Y
|
||||
&& vec1.Z == vec2.Z;
|
||||
}
|
||||
|
||||
public static bool operator !=(colum3 vec1, colum3 vec2)
|
||||
{
|
||||
return !(vec1.X == vec2.X
|
||||
&& vec1.Y == vec2.Y
|
||||
&& vec1.Z == vec2.Z);
|
||||
}
|
||||
|
||||
public static colum3 operator +(colum3 vec1, colum3 vec2)
|
||||
{
|
||||
return new colum3(
|
||||
vec1.X + vec2.X,
|
||||
vec1.Y + vec2.Y,
|
||||
vec1.Z + vec2.Z
|
||||
);
|
||||
}
|
||||
|
||||
public static colum3 operator -(colum3 vec1, colum3 vec2)
|
||||
{
|
||||
return new colum3(
|
||||
vec1.X - vec2.X,
|
||||
vec1.Y - vec2.Y,
|
||||
vec1.Z - vec2.Z
|
||||
);
|
||||
}
|
||||
|
||||
public static float operator *(colum3 vec1, colum3 vec2)
|
||||
{
|
||||
return
|
||||
vec1.X * vec2.X
|
||||
+ vec1.Y + vec2.Y
|
||||
+ vec1.Z + vec2.Z;
|
||||
}
|
||||
|
||||
public static colum3 operator *(colum3 vec, float x)
|
||||
{
|
||||
return new colum3(
|
||||
vec.X * x,
|
||||
vec.Y * x,
|
||||
vec.Z * x
|
||||
);
|
||||
}
|
||||
|
||||
public static colum3 operator /(colum3 vec, float x)
|
||||
{
|
||||
return new colum3(
|
||||
vec.X / x,
|
||||
vec.Y / x,
|
||||
vec.Z / x
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct colum4 : IEquatable<colum4>
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
public float X;
|
||||
[FieldOffset(4)]
|
||||
public float Y;
|
||||
[FieldOffset(8)]
|
||||
public float Z;
|
||||
[FieldOffset(12)]
|
||||
public float W;
|
||||
|
||||
public colum4(float x, float y, float z, float w)
|
||||
{
|
||||
X = x;
|
||||
Y = y;
|
||||
Z = z;
|
||||
W = w;
|
||||
}
|
||||
|
||||
public bool Equals(colum4 other)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
return base.Equals(obj);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return base.GetHashCode();
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return base.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using StgSharp.Math;
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace StgSharp
|
||||
{
|
||||
internal static unsafe partial class internalIO
|
||||
{
|
||||
#region add
|
||||
|
||||
[DllImport("StgsharpGraphic", EntryPoint = "add_Mat2",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern Mat2* add_mat2(Mat2* left, Mat2* right);
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region sub
|
||||
|
||||
[DllImport("StgsharpGraphic", EntryPoint = "sub_mat2",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern unsafe Mat2* sub_mat2(Mat2* left, Mat2* right);
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region transpose
|
||||
|
||||
|
||||
[DllImport("StgsharpGraphic", EntryPoint = "transmpose2to4",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern unsafe void Transpose2to4_internal(Mat2* source, Mat4* target);
|
||||
|
||||
#endregion
|
||||
|
||||
#region deinit mat2
|
||||
|
||||
[DllImport("StgsharpGraphic", EntryPoint = "deinit_mat2",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern unsafe void deinit_mat2(Mat2* mat);
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
[StructLayout(LayoutKind.Explicit, Size = 12 * sizeof(float), Pack = 16)]
|
||||
internal struct Mat2
|
||||
{
|
||||
|
||||
[FieldOffset(0)] internal M128 colum0;
|
||||
[FieldOffset(4 * sizeof(float))] internal M128 colum1;
|
||||
|
||||
[FieldOffset(0 * sizeof(float))] internal float m00;
|
||||
[FieldOffset(1 * sizeof(float))] internal float m10;
|
||||
[FieldOffset(2 * sizeof(float))] internal float m20;
|
||||
[FieldOffset(3 * sizeof(float))] internal float m30;
|
||||
|
||||
[FieldOffset(4 * sizeof(float))] internal float m01;
|
||||
[FieldOffset(5 * sizeof(float))] internal float m11;
|
||||
[FieldOffset(6 * sizeof(float))] internal float m21;
|
||||
[FieldOffset(7 * sizeof(float))] internal float m31;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using StgSharp.Math;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
[StructLayout(LayoutKind.Explicit, Size = 12*sizeof(float),Pack = 16)]
|
||||
internal struct mat3
|
||||
{
|
||||
|
||||
[FieldOffset(0)] internal M128 colum0;
|
||||
[FieldOffset(4 * sizeof(float))] internal M128 colum1;
|
||||
[FieldOffset(8 * sizeof(float))] internal M128 colum2;
|
||||
|
||||
[FieldOffset(0 * sizeof(float))] internal float m00;
|
||||
[FieldOffset(1 * sizeof(float))] internal float m10;
|
||||
[FieldOffset(2 * sizeof(float))] internal float m20;
|
||||
[FieldOffset(3 * sizeof(float))] internal float m30;
|
||||
|
||||
[FieldOffset(4 * sizeof(float))] internal float m01;
|
||||
[FieldOffset(5 * sizeof(float))] internal float m11;
|
||||
[FieldOffset(6 * sizeof(float))] internal float m21;
|
||||
[FieldOffset(7 * sizeof(float))] internal float m31;
|
||||
|
||||
[FieldOffset(8 * sizeof(float))] internal float m02;
|
||||
[FieldOffset(9 * sizeof(float))] internal float m12;
|
||||
[FieldOffset(10 * sizeof(float))] internal float m22;
|
||||
[FieldOffset(11 * sizeof(float))] internal float m32;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
using StgSharp;
|
||||
using StgSharp.Math;
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace StgSharp
|
||||
{
|
||||
internal static unsafe partial class internalIO
|
||||
{
|
||||
|
||||
#region add_mat4
|
||||
|
||||
#if NET7_0_OR_GREATER
|
||||
#else
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "addmat4",
|
||||
#endif
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern unsafe StgSharp.Math.Mat4* add_mat4(
|
||||
ref StgSharp.Math.Mat4 mat1, ref StgSharp.Math.Mat4 Mat2);
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "addmat4",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern unsafe StgSharp.Math.Mat4* add_mat4(
|
||||
StgSharp.Math.Mat4* mat1, StgSharp.Math.Mat4* Mat2);
|
||||
|
||||
#endregion
|
||||
|
||||
#region sub_mat4
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "sub_mat4",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static unsafe extern StgSharp.Math.Mat4* sub_mat4(
|
||||
ref StgSharp.Math.Mat4 mat1, ref StgSharp.Math.Mat4 Mat2);
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "StgSharp.Math.Mat4",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static unsafe extern StgSharp.Math.Mat4* sub_mat4(
|
||||
StgSharp.Math.Mat4* mat1, StgSharp.Math.Mat4* Mat2);
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region mul
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "mul_const",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static unsafe extern StgSharp.Math.Mat4* mul_const(
|
||||
StgSharp.Math.Mat4* mat, float value);
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "mul_const",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static unsafe extern StgSharp.Math.Mat4* mul_const(
|
||||
ref StgSharp.Math.Mat4 mat, float value);
|
||||
|
||||
[DllImport("StgsharpGraphic", EntryPoint = "mul_4_4",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern unsafe Mat4* mul_4_4(Mat4* left, Mat4* right);
|
||||
|
||||
#endregion
|
||||
|
||||
#region transpose
|
||||
|
||||
[DllImport("StgsharpGraphic.dll", EntryPoint = "transpose4to4",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern unsafe void Transpose4to4_internal(Mat4* source, Mat4* target);
|
||||
|
||||
[DllImport("StgsharpGraphic.dll", EntryPoint = "transpose4to4",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern unsafe void Transpose4to4_internal(ref Mat4* source, ref Mat4* target);
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region det
|
||||
|
||||
[DllImport("StgsharpGraphic", EntryPoint = "det_mat4",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static unsafe extern float det_mat4(Matrix4x4* matPtr);
|
||||
|
||||
#endregion
|
||||
|
||||
#region deinit_mat4
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "deinit_mat4",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern void deinit_mat4(ref StgSharp.Math.Mat4 mat);
|
||||
|
||||
[DllImport("StgSharpGraphic.dll", EntryPoint = "deinit_mat4",
|
||||
CallingConvention = CallingConvention.Cdecl)]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static extern void deinit_mat4(StgSharp.Math.Mat4* mat);
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
|
||||
|
||||
[StructLayout(LayoutKind.Explicit, Size = 16 * sizeof(float))]
|
||||
public struct Mat4
|
||||
{
|
||||
[FieldOffset(0)] internal M128 colum0;
|
||||
[FieldOffset(16)] internal M128 colum1;
|
||||
[FieldOffset(32)] internal M128 colum2;
|
||||
[FieldOffset(48)] internal M128 colum3;
|
||||
|
||||
[FieldOffset(0)] public float a00;
|
||||
[FieldOffset(4)] public float a10;
|
||||
[FieldOffset(8)] public float a20;
|
||||
[FieldOffset(12)] public float a30;
|
||||
|
||||
[FieldOffset(16)] public float a01;
|
||||
[FieldOffset(20)] public float a11;
|
||||
[FieldOffset(24)] public float a21;
|
||||
[FieldOffset(28)] public float a31;
|
||||
|
||||
[FieldOffset(32)] public float a02;
|
||||
[FieldOffset(36)] public float a12;
|
||||
[FieldOffset(40)] public float a22;
|
||||
[FieldOffset(44)] public float a32;
|
||||
|
||||
[FieldOffset(48)] public float a03;
|
||||
[FieldOffset(52)] public float a13;
|
||||
[FieldOffset(56)] public float a23;
|
||||
[FieldOffset(60)] public float a33;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
/*
|
||||
public class Matrix2x2
|
||||
{
|
||||
public static Matrix2x2 Unit
|
||||
@@ -115,4 +116,7 @@ namespace StgSharp.Math
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**/
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
|
||||
/*
|
||||
public class Matrix2x3
|
||||
{
|
||||
internal M128Map _map;
|
||||
@@ -126,4 +128,6 @@ namespace StgSharp.Math
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**/
|
||||
}
|
||||
|
||||
@@ -4,124 +4,8 @@ using System.Runtime.InteropServices;
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
|
||||
public class Matrix2x4
|
||||
public struct Matrix2x4
|
||||
{
|
||||
internal M128Map _map;
|
||||
|
||||
internal IntPtr _colum0Ptr;
|
||||
internal IntPtr _colum1Ptr;
|
||||
internal IntPtr _colum2Ptr;
|
||||
internal IntPtr _colum3Ptr;
|
||||
|
||||
private bool _isTranposed;
|
||||
private Matrix4x2 _transpose;
|
||||
|
||||
public Matrix2x4(
|
||||
float a00, float a01, float a02, float a03,
|
||||
float a10, float a11, float a12, float a13
|
||||
)
|
||||
{
|
||||
_colum0Ptr = internalIO.load_internal(a00, a10, 0, 0);
|
||||
_colum1Ptr = internalIO.load_internal(a01, a11, 0, 0);
|
||||
_colum2Ptr = internalIO.load_internal(a02, a12, 0, 0);
|
||||
_colum3Ptr = internalIO.load_internal(a03, a13, 0, 0);
|
||||
|
||||
_transpose = new Matrix4x2(this);
|
||||
}
|
||||
|
||||
internal Matrix2x4(
|
||||
IntPtr colum0Ptr,
|
||||
IntPtr colum1Ptr,
|
||||
IntPtr colum2Ptr,
|
||||
IntPtr colum3Ptr
|
||||
)
|
||||
{
|
||||
_colum0Ptr = colum0Ptr;
|
||||
_colum1Ptr = colum1Ptr;
|
||||
_colum2Ptr = colum2Ptr;
|
||||
_colum3Ptr = colum3Ptr;
|
||||
|
||||
_transpose = new Matrix4x2(this);
|
||||
}
|
||||
|
||||
public unsafe Matrix4x2 Transpose(TransposeMode transposeMode)
|
||||
{
|
||||
if (_isTranposed)
|
||||
{
|
||||
(*(M128*)_transpose._colum0Ptr).single_0 = (*(M128*)_colum0Ptr).single_0;
|
||||
(*(M128*)_transpose._colum0Ptr).single_1 = (*(M128*)_colum1Ptr).single_0;
|
||||
(*(M128*)_transpose._colum0Ptr).single_2 = (*(M128*)_colum2Ptr).single_0;
|
||||
(*(M128*)_transpose._colum0Ptr).single_3 = (*(M128*)_colum3Ptr).single_0;
|
||||
|
||||
(*(M128*)_transpose._colum1Ptr).single_0 = (*(M128*)_colum0Ptr).single_1;
|
||||
(*(M128*)_transpose._colum1Ptr).single_1 = (*(M128*)_colum1Ptr).single_1;
|
||||
(*(M128*)_transpose._colum1Ptr).single_2 = (*(M128*)_colum2Ptr).single_1;
|
||||
(*(M128*)_transpose._colum1Ptr).single_3 = (*(M128*)_colum3Ptr).single_1;
|
||||
|
||||
_isTranposed = true;
|
||||
}
|
||||
switch (transposeMode)
|
||||
{
|
||||
case TransposeMode.New:
|
||||
return new Matrix4x2(
|
||||
internalIO.load_cpy_internal(_transpose._colum0Ptr),
|
||||
internalIO.load_cpy_internal(_transpose._colum1Ptr)
|
||||
);
|
||||
break;
|
||||
case TransposeMode.Copy:
|
||||
return _transpose;
|
||||
break;
|
||||
default:
|
||||
throw new Exception();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static Matrix2x4 operator +(Matrix2x4 matrix1,Matrix2x4 matrix2)
|
||||
{
|
||||
return new Matrix2x4(
|
||||
internalIO.addps_internal(matrix1._colum0Ptr, matrix2._colum0Ptr),
|
||||
internalIO.addps_internal(matrix1._colum1Ptr, matrix2._colum1Ptr),
|
||||
internalIO.addps_internal(matrix1._colum2Ptr, matrix2._colum2Ptr),
|
||||
internalIO.addps_internal(matrix1._colum3Ptr, matrix2._colum3Ptr)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix2x4 operator -(Matrix2x4 matrix1, Matrix2x4 matrix2)
|
||||
{
|
||||
return new Matrix2x4(
|
||||
internalIO.subps_internal(matrix1._colum0Ptr, matrix2._colum0Ptr),
|
||||
internalIO.subps_internal(matrix1._colum1Ptr, matrix2._colum1Ptr),
|
||||
internalIO.subps_internal(matrix1._colum2Ptr, matrix2._colum2Ptr),
|
||||
internalIO.subps_internal(matrix1._colum3Ptr, matrix2._colum3Ptr)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix2x4 operator *(Matrix2x4 matrix, float value)
|
||||
{
|
||||
return new Matrix2x4(
|
||||
internalIO.mulps_const_internal(matrix._colum0Ptr,value),
|
||||
internalIO.mulps_const_internal(matrix._colum1Ptr,value),
|
||||
internalIO.mulps_const_internal(matrix._colum2Ptr,value),
|
||||
internalIO.mulps_const_internal(matrix._colum3Ptr,value)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix2x4 operator /(Matrix2x4 matrix, float value)
|
||||
{
|
||||
return new Matrix2x4(
|
||||
internalIO.divps_const_internal(matrix._colum0Ptr, value),
|
||||
internalIO.divps_const_internal(matrix._colum1Ptr, value),
|
||||
internalIO.divps_const_internal(matrix._colum2Ptr, value),
|
||||
internalIO.divps_const_internal(matrix._colum3Ptr, value)
|
||||
);
|
||||
}
|
||||
|
||||
internal Matrix2x4(
|
||||
Matrix4x2 transpose)
|
||||
{
|
||||
_transpose = transpose;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -3,86 +3,5 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
public class Matrix3x2
|
||||
{
|
||||
internal M128Map _map;
|
||||
|
||||
internal IntPtr _colum0Ptr;
|
||||
internal IntPtr _colum1Ptr;
|
||||
|
||||
private bool _isTransposed;
|
||||
private Matrix2x3 _transpose;
|
||||
|
||||
public Matrix3x2(
|
||||
float a00,float a01,
|
||||
float a10,float a11,
|
||||
float a20,float a21
|
||||
)
|
||||
{
|
||||
_colum0Ptr = internalIO.load_internal(a00,a10,a20,0);
|
||||
_colum0Ptr = internalIO.load_internal(a01,a11,a21,0);
|
||||
|
||||
_transpose = new Matrix2x3(this);
|
||||
}
|
||||
|
||||
internal Matrix3x2(
|
||||
IntPtr colum0Ptr,
|
||||
IntPtr colum1Ptr
|
||||
)
|
||||
{
|
||||
_colum0Ptr = colum0Ptr;
|
||||
_colum1Ptr = colum1Ptr;
|
||||
|
||||
_transpose = new Matrix2x3(this);
|
||||
}
|
||||
|
||||
internal Matrix3x2(Matrix2x3 transpose)
|
||||
{
|
||||
_transpose = transpose;
|
||||
}
|
||||
|
||||
public unsafe Matrix2x3 Transpose(TransposeMode transposeMode)
|
||||
{
|
||||
if (_isTransposed)
|
||||
{
|
||||
(*(M128*)_transpose._colum0Ptr).single_0 = (*(M128*)_colum0Ptr).single_0;
|
||||
(*(M128*)_transpose._colum1Ptr).single_0 = (*(M128*)_colum0Ptr).single_1;
|
||||
(*(M128*)_transpose._colum2Ptr).single_0 = (*(M128*)_colum0Ptr).single_2;
|
||||
|
||||
(*(M128*)_transpose._colum0Ptr).single_1 = (*(M128*)_colum1Ptr).single_0;
|
||||
(*(M128*)_transpose._colum1Ptr).single_1 = (*(M128*)_colum1Ptr).single_1;
|
||||
(*(M128*)_transpose._colum2Ptr).single_1 = (*(M128*)_colum1Ptr).single_2;
|
||||
|
||||
_isTransposed = true;
|
||||
|
||||
}
|
||||
switch (transposeMode)
|
||||
{
|
||||
case TransposeMode.New:
|
||||
return new Matrix2x3(
|
||||
_transpose._colum0Ptr,
|
||||
_transpose._colum0Ptr,
|
||||
_transpose._colum0Ptr
|
||||
);
|
||||
break;
|
||||
case TransposeMode.Copy:
|
||||
return _transpose;
|
||||
break;
|
||||
default:
|
||||
throw new Exception();
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
~Matrix3x2()
|
||||
{
|
||||
if (_map==null)
|
||||
{
|
||||
internalIO.deinitM128_internal(_colum0Ptr);
|
||||
internalIO.deinitM128_internal(_colum1Ptr);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,138 +5,6 @@ namespace StgSharp.Math
|
||||
{
|
||||
public class Matrix3x3
|
||||
{
|
||||
public static Matrix3x3 Unit
|
||||
= new Matrix3x3(
|
||||
1,0,0,
|
||||
0,1,0,
|
||||
0,0,1
|
||||
);
|
||||
|
||||
internal M128Map map;
|
||||
|
||||
internal IntPtr _colum0Ptr;
|
||||
internal IntPtr _colum1Ptr;
|
||||
internal IntPtr _colum2Ptr;
|
||||
|
||||
private bool _isDisposed;
|
||||
private Matrix3x3 _transpose;
|
||||
|
||||
public Matrix3x3(
|
||||
float a00, float a01, float a02,
|
||||
float a10, float a11, float a12,
|
||||
float a20, float a21, float a22
|
||||
)
|
||||
{
|
||||
_colum0Ptr = internalIO.load_internal(a00,a10,a20,0);
|
||||
_colum1Ptr = internalIO.load_internal(a01,a11,a21,0);
|
||||
_colum2Ptr = internalIO.load_internal(a02,a12,a22,0);
|
||||
|
||||
_transpose = new Matrix3x3(this);
|
||||
}
|
||||
|
||||
internal Matrix3x3(Matrix3x3 transpose)
|
||||
{
|
||||
_transpose = transpose;
|
||||
}
|
||||
|
||||
internal Matrix3x3(
|
||||
IntPtr colum0Ptr,
|
||||
IntPtr colum1Ptr,
|
||||
IntPtr colum2Ptr
|
||||
)
|
||||
{
|
||||
_colum0Ptr= colum0Ptr;
|
||||
_colum1Ptr= colum1Ptr;
|
||||
_colum2Ptr= colum2Ptr;
|
||||
|
||||
_transpose = new Matrix3x3(this);
|
||||
}
|
||||
|
||||
public unsafe Matrix3x3 Transpose(TransposeMode transposeMode)
|
||||
{
|
||||
if (!_isDisposed)
|
||||
{
|
||||
(*(M128*)_transpose._colum0Ptr).single_0 = (*(M128*)_colum0Ptr).single_0;
|
||||
(*(M128*)_transpose._colum0Ptr).single_1 = (*(M128*)_colum1Ptr).single_0;
|
||||
(*(M128*)_transpose._colum0Ptr).single_2 = (*(M128*)_colum2Ptr).single_0;
|
||||
|
||||
(*(M128*)_transpose._colum1Ptr).single_0 = (*(M128*)_colum0Ptr).single_1;
|
||||
(*(M128*)_transpose._colum1Ptr).single_1 = (*(M128*)_colum1Ptr).single_1;
|
||||
(*(M128*)_transpose._colum1Ptr).single_2 = (*(M128*)_colum2Ptr).single_1;
|
||||
|
||||
(*(M128*)_transpose._colum2Ptr).single_0 = (*(M128*)_colum0Ptr).single_2;
|
||||
(*(M128*)_transpose._colum2Ptr).single_1 = (*(M128*)_colum1Ptr).single_2;
|
||||
(*(M128*)_transpose._colum2Ptr).single_2 = (*(M128*)_colum2Ptr).single_2;
|
||||
|
||||
_isDisposed = true;
|
||||
}
|
||||
|
||||
switch (transposeMode)
|
||||
{
|
||||
case TransposeMode.New:
|
||||
return new Matrix3x3(
|
||||
internalIO.load_cpy_internal(_transpose._colum0Ptr),
|
||||
internalIO.load_cpy_internal(_transpose._colum1Ptr),
|
||||
internalIO.load_cpy_internal(_transpose._colum2Ptr)
|
||||
);
|
||||
break;
|
||||
case TransposeMode.Copy:
|
||||
return _transpose;
|
||||
break;
|
||||
default:
|
||||
throw new Exception();
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static Matrix3x3 operator +(Matrix3x3 matrix1, Matrix3x3 matrix2)
|
||||
{
|
||||
return new Matrix3x3(
|
||||
internalIO.addps_internal(matrix1._colum0Ptr,matrix2._colum0Ptr),
|
||||
internalIO.addps_internal(matrix1._colum1Ptr,matrix2._colum1Ptr),
|
||||
internalIO.addps_internal(matrix1._colum2Ptr,matrix2._colum2Ptr)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix3x3 operator -(Matrix3x3 matrix1, Matrix3x3 matrix2)
|
||||
{
|
||||
return new Matrix3x3(
|
||||
internalIO.subps_internal(matrix1._colum0Ptr,matrix2._colum0Ptr),
|
||||
internalIO.subps_internal(matrix1._colum1Ptr,matrix2._colum1Ptr),
|
||||
internalIO.subps_internal(matrix1._colum2Ptr,matrix2._colum2Ptr)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix3x3 operator *(Matrix3x3 matrix, float value)
|
||||
{
|
||||
return new Matrix3x3(
|
||||
internalIO.mulps_const_internal(matrix._colum0Ptr,value),
|
||||
internalIO.mulps_const_internal(matrix._colum1Ptr,value),
|
||||
internalIO.mulps_const_internal(matrix._colum2Ptr,value)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix3x3 operator /(Matrix3x3 matrix, float value)
|
||||
{
|
||||
return new Matrix3x3(
|
||||
internalIO.divps_const_internal(matrix._colum0Ptr, value),
|
||||
internalIO.divps_const_internal(matrix._colum1Ptr, value),
|
||||
internalIO.divps_const_internal(matrix._colum2Ptr, value)
|
||||
);
|
||||
}
|
||||
|
||||
~Matrix3x3()
|
||||
{
|
||||
if (map==null)
|
||||
{
|
||||
internalIO.deinitM128_internal(_colum0Ptr);
|
||||
internalIO.deinitM128_internal(_colum1Ptr);
|
||||
internalIO.deinitM128_internal(_colum2Ptr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,151 +1,10 @@
|
||||
using System;
|
||||
using System.Reflection.Emit;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
public class Matrix3x4
|
||||
{
|
||||
internal M128Map map;
|
||||
|
||||
internal IntPtr _colum0Ptr;
|
||||
internal IntPtr _colum1Ptr;
|
||||
internal IntPtr _colum2Ptr;
|
||||
internal IntPtr _colum3Ptr;
|
||||
|
||||
private bool _isTransposed;
|
||||
private Matrix4x3 _transpose;
|
||||
|
||||
public Matrix3x4(
|
||||
float a00, float a01, float a02, float a03,
|
||||
float a10, float a11, float a12, float a13,
|
||||
float a20, float a21, float a22, float a23
|
||||
)
|
||||
{
|
||||
_colum0Ptr = internalIO.load_internal(a00,a10,a20,0);
|
||||
_colum1Ptr = internalIO.load_internal(a01,a11,a21,0);
|
||||
_colum2Ptr = internalIO.load_internal(a02,a12,a22,0);
|
||||
_colum2Ptr = internalIO.load_internal(a03,a13,a23,0);
|
||||
|
||||
_transpose = new Matrix4x3(this);
|
||||
}
|
||||
|
||||
internal Matrix3x4(
|
||||
IntPtr colum0Ptr,
|
||||
IntPtr colum1Ptr,
|
||||
IntPtr colum2Ptr,
|
||||
IntPtr colum3Ptr
|
||||
)
|
||||
{
|
||||
_colum0Ptr = colum0Ptr;
|
||||
_colum1Ptr = colum1Ptr;
|
||||
_colum2Ptr = colum2Ptr;
|
||||
_colum3Ptr = colum3Ptr;
|
||||
}
|
||||
|
||||
internal Matrix3x4()
|
||||
{
|
||||
_transpose = new Matrix4x3(this);
|
||||
}
|
||||
|
||||
internal Matrix3x4(Matrix4x3 transpose)
|
||||
{
|
||||
_transpose = transpose;
|
||||
}
|
||||
|
||||
public unsafe Matrix4x3 Transpose(TransposeMode transposeMode)
|
||||
{
|
||||
if (!_isTransposed)
|
||||
{
|
||||
|
||||
(*(M128*)_transpose._colum0Ptr).single_0 = (*(M128*)_colum0Ptr).single_0;
|
||||
(*(M128*)_transpose._colum0Ptr).single_1 = (*(M128*)_colum1Ptr).single_0;
|
||||
(*(M128*)_transpose._colum0Ptr).single_2 = (*(M128*)_colum2Ptr).single_0;
|
||||
(*(M128*)_transpose._colum0Ptr).single_2 = (*(M128*)_colum3Ptr).single_0;
|
||||
|
||||
(*(M128*)_transpose._colum1Ptr).single_0 = (*(M128*)_colum0Ptr).single_1;
|
||||
(*(M128*)_transpose._colum1Ptr).single_1 = (*(M128*)_colum1Ptr).single_1;
|
||||
(*(M128*)_transpose._colum1Ptr).single_2 = (*(M128*)_colum2Ptr).single_1;
|
||||
(*(M128*)_transpose._colum1Ptr).single_2 = (*(M128*)_colum3Ptr).single_1;
|
||||
|
||||
(*(M128*)_transpose._colum2Ptr).single_0 = (*(M128*)_colum0Ptr).single_2;
|
||||
(*(M128*)_transpose._colum2Ptr).single_1 = (*(M128*)_colum1Ptr).single_2;
|
||||
(*(M128*)_transpose._colum2Ptr).single_2 = (*(M128*)_colum2Ptr).single_2;
|
||||
(*(M128*)_transpose._colum2Ptr).single_2 = (*(M128*)_colum3Ptr).single_2;
|
||||
|
||||
}
|
||||
switch (transposeMode)
|
||||
{
|
||||
case TransposeMode.New:
|
||||
return new Matrix4x3(
|
||||
internalIO.load_cpy_internal(_transpose._colum0Ptr),
|
||||
internalIO.load_cpy_internal(_transpose._colum1Ptr),
|
||||
internalIO.load_cpy_internal(_transpose._colum2Ptr)
|
||||
) ;
|
||||
break;
|
||||
case TransposeMode.Copy:
|
||||
return _transpose;
|
||||
break;
|
||||
default:
|
||||
throw new Exception();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static Matrix3x4 operator +(Matrix3x4 matrix1, Matrix3x4 matrix2)
|
||||
{
|
||||
return new Matrix3x4(
|
||||
internalIO.addps_internal(matrix1._colum0Ptr,matrix1._colum0Ptr),
|
||||
internalIO.addps_internal(matrix1._colum1Ptr,matrix1._colum1Ptr),
|
||||
internalIO.addps_internal(matrix1._colum2Ptr,matrix1._colum2Ptr),
|
||||
internalIO.addps_internal(matrix1._colum2Ptr,matrix1._colum2Ptr)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix3x4 operator -(Matrix4x3 matrix1, Matrix3x4 matrix2)
|
||||
{
|
||||
return new Matrix3x4(
|
||||
internalIO.subps_internal(matrix1._colum0Ptr,matrix2._colum0Ptr),
|
||||
internalIO.subps_internal(matrix1._colum1Ptr,matrix2._colum1Ptr),
|
||||
internalIO.subps_internal(matrix1._colum2Ptr,matrix2._colum2Ptr),
|
||||
internalIO.subps_internal(matrix1._colum2Ptr,matrix2._colum2Ptr)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix3x4 operator *(Matrix3x4 matrix, float value)
|
||||
{
|
||||
return new Matrix3x4(
|
||||
internalIO.mulps_const_internal(matrix._colum0Ptr,value),
|
||||
internalIO.mulps_const_internal(matrix._colum1Ptr,value),
|
||||
internalIO.mulps_const_internal(matrix._colum2Ptr,value),
|
||||
internalIO.mulps_const_internal(matrix._colum3Ptr,value)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix3x4 operator /(Matrix3x4 matrix, float value)
|
||||
{
|
||||
return new Matrix3x4(
|
||||
internalIO.divps_const_internal(matrix._colum0Ptr,value),
|
||||
internalIO.divps_const_internal(matrix._colum1Ptr,value),
|
||||
internalIO.divps_const_internal(matrix._colum2Ptr,value),
|
||||
internalIO.divps_const_internal(matrix._colum3Ptr,value)
|
||||
);
|
||||
}
|
||||
|
||||
~Matrix3x4()
|
||||
{
|
||||
if (map == null)
|
||||
{
|
||||
internalIO.deinitM128_internal(_colum0Ptr);
|
||||
internalIO.deinitM128_internal(_colum1Ptr);
|
||||
internalIO.deinitM128_internal(_colum2Ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,127 +1,77 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using static StgSharp.Graphics.GLFWwndconfig;
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
public class Matrix4x2
|
||||
|
||||
|
||||
[StructLayout(LayoutKind.Explicit,Size = (16 + 8) * sizeof(float) + sizeof(bool), Pack = 16)]
|
||||
public struct Matrix4x2
|
||||
{
|
||||
internal M128Map _map;
|
||||
[FieldOffset(0)] internal Mat2 mat;
|
||||
[FieldOffset(8 * sizeof(float))] internal Mat4 transpose;
|
||||
[FieldOffset((16 + 8) * sizeof(float))] internal bool isTranspose;
|
||||
|
||||
internal IntPtr _colum0Ptr;
|
||||
internal IntPtr _colum1Ptr;
|
||||
|
||||
private bool _isTransposed;
|
||||
private Matrix2x4 _transpose;
|
||||
|
||||
public Matrix4x2(
|
||||
float a00, float a01,
|
||||
float a10, float a11,
|
||||
float a20, float a21,
|
||||
float a30, float a31
|
||||
unsafe public Matrix4x2(
|
||||
float a00,float a01,
|
||||
float a10,float a11,
|
||||
float a20,float a21,
|
||||
float a30,float a31
|
||||
)
|
||||
{
|
||||
_colum0Ptr = internalIO.load_internal(a00,a10,a20,a30);
|
||||
_colum0Ptr = internalIO.load_internal(a01,a11,a21,a31);
|
||||
M128* c0ref = internalIO.loadptr_internal(a00, a10, a20, a30);
|
||||
M128* c1ref = internalIO.loadptr_internal(a01, a11, a21, a31);
|
||||
|
||||
_transpose = new Matrix2x4(this);
|
||||
mat.colum0 = *c0ref;
|
||||
mat.colum1 = *c1ref;
|
||||
|
||||
/**/
|
||||
internalIO.deinitM128_internal(c0ref);
|
||||
internalIO.deinitM128_internal(c1ref);
|
||||
}
|
||||
|
||||
public Matrix4x2(
|
||||
IntPtr colum0Ptr,
|
||||
IntPtr colum1Ptr
|
||||
)
|
||||
unsafe internal Matrix4x2(Mat2 mat)
|
||||
{
|
||||
_colum0Ptr = colum0Ptr;
|
||||
_colum1Ptr = colum1Ptr;
|
||||
|
||||
_transpose = new Matrix2x4(this);
|
||||
this.mat = mat;
|
||||
}
|
||||
|
||||
public Matrix4x2(Matrix2x4 transpose)
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static unsafe Matrix4x2 operator +(Matrix4x2 left, Matrix4x2 right)
|
||||
{
|
||||
_transpose = transpose;
|
||||
Mat2* p = internalIO.add_mat2(&left.mat, &right.mat);
|
||||
Matrix4x2 ret = new Matrix4x2(*p);
|
||||
internalIO.deinit_mat2(p);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public unsafe Matrix2x4 Transpose(TransposeMode transposeMode )
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static unsafe Matrix4x2 operator -(Matrix4x2 left, Matrix4x2 right)
|
||||
{
|
||||
if (!_isTransposed)
|
||||
Mat2* p = internalIO.sub_mat2(&left.mat, &right.mat);
|
||||
Matrix4x2 ret = new Matrix4x2(*p);
|
||||
internalIO.deinit_mat2(p);
|
||||
return ret;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal unsafe void InternalTranspose()
|
||||
{
|
||||
if (!isTranspose)
|
||||
{
|
||||
(*(M128*)_transpose._colum0Ptr).single_0 = (*(M128*)_colum0Ptr).single_0;
|
||||
(*(M128*)_transpose._colum1Ptr).single_0 = (*(M128*)_colum0Ptr).single_1;
|
||||
(*(M128*)_transpose._colum2Ptr).single_0 = (*(M128*)_colum0Ptr).single_2;
|
||||
(*(M128*)_transpose._colum3Ptr).single_0 = (*(M128*)_colum0Ptr).single_3;
|
||||
fixed (Mat2* source = &this.mat)
|
||||
fixed (Mat4* target = &this.transpose)
|
||||
{
|
||||
internalIO.Transpose2to4_internal(source, target);
|
||||
}
|
||||
|
||||
(*(M128*)_transpose._colum0Ptr).single_1 = (*(M128*)_colum1Ptr).single_0;
|
||||
(*(M128*)_transpose._colum1Ptr).single_1 = (*(M128*)_colum1Ptr).single_1;
|
||||
(*(M128*)_transpose._colum2Ptr).single_1 = (*(M128*)_colum1Ptr).single_2;
|
||||
(*(M128*)_transpose._colum3Ptr).single_1 = (*(M128*)_colum1Ptr).single_3;
|
||||
|
||||
_isTransposed = true;
|
||||
|
||||
}
|
||||
|
||||
switch (transposeMode)
|
||||
{
|
||||
case TransposeMode.New:
|
||||
return new Matrix2x4(
|
||||
internalIO.load_cpy_internal(_transpose._colum0Ptr),
|
||||
internalIO.load_cpy_internal(_transpose._colum1Ptr),
|
||||
internalIO.load_cpy_internal(_transpose._colum2Ptr),
|
||||
internalIO.load_cpy_internal(_transpose._colum3Ptr)
|
||||
);
|
||||
break;
|
||||
case TransposeMode.Copy:
|
||||
return _transpose;
|
||||
break;
|
||||
default:
|
||||
throw new Exception();
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static Matrix4x2 operator +(Matrix4x2 matrix1, Matrix4x2 matrix2)
|
||||
{
|
||||
return new Matrix4x2(
|
||||
internalIO.addps_internal(matrix1._colum0Ptr,matrix2._colum0Ptr),
|
||||
internalIO.addps_internal(matrix1._colum1Ptr,matrix2._colum1Ptr)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix4x2 operator -(Matrix4x2 matrix1, Matrix4x2 matrix2)
|
||||
{
|
||||
return new Matrix4x2(
|
||||
internalIO.subps_internal(matrix1._colum0Ptr, matrix2._colum0Ptr),
|
||||
internalIO.subps_internal(matrix1._colum1Ptr, matrix2._colum1Ptr)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix4x2 operator *(Matrix4x2 matrix,float value)
|
||||
{
|
||||
return new Matrix4x2(
|
||||
internalIO.mulps_const_internal(matrix._colum0Ptr,value),
|
||||
internalIO.mulps_const_internal(matrix._colum1Ptr,value)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix4x2 operator /(Matrix4x2 matrix, float value)
|
||||
{
|
||||
return new Matrix4x2(
|
||||
internalIO.divps_const_internal(matrix._colum0Ptr,value),
|
||||
internalIO.divps_const_internal(matrix._colum1Ptr,value)
|
||||
);
|
||||
}
|
||||
|
||||
~Matrix4x2()
|
||||
{
|
||||
if (_map == null)
|
||||
{
|
||||
internalIO.deinitM128_internal(_colum0Ptr);
|
||||
internalIO.deinitM128_internal(_colum1Ptr);
|
||||
isTranspose = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -5,139 +5,7 @@ namespace StgSharp.Math
|
||||
{
|
||||
public class Matrix4x3
|
||||
{
|
||||
internal M128Map map;
|
||||
|
||||
internal IntPtr _colum0Ptr = IntPtr.Zero;
|
||||
internal IntPtr _colum1Ptr;
|
||||
internal IntPtr _colum2Ptr;
|
||||
|
||||
private bool _isTransposed;
|
||||
private Matrix3x4 _transpose;
|
||||
|
||||
public Matrix4x3(
|
||||
float a00, float a01, float a02,
|
||||
float a10, float a11, float a12,
|
||||
float a20, float a21, float a22,
|
||||
float a30, float a31, float a32
|
||||
)
|
||||
{
|
||||
_colum0Ptr = internalIO.load_internal(a00,a10,a20,a30);
|
||||
_colum1Ptr = internalIO.load_internal(a01,a11,a21,a31);
|
||||
_colum2Ptr = internalIO.load_internal(a02,a12,a22,a32);
|
||||
|
||||
_transpose = new Matrix3x4(this);
|
||||
}
|
||||
|
||||
internal Matrix4x3(
|
||||
IntPtr colum0Ptr,
|
||||
IntPtr colum1Ptr,
|
||||
IntPtr colum2Ptr
|
||||
)
|
||||
{
|
||||
_colum0Ptr = colum0Ptr;
|
||||
_colum1Ptr = colum1Ptr;
|
||||
_colum2Ptr = colum2Ptr;
|
||||
|
||||
_transpose = new Matrix3x4(this);
|
||||
}
|
||||
|
||||
internal Matrix4x3(Matrix3x4 transpose)
|
||||
{
|
||||
this._transpose = transpose;
|
||||
}
|
||||
|
||||
|
||||
public unsafe Matrix3x4 Transpose(TransposeMode transposeMode)
|
||||
{
|
||||
if (!_isTransposed)
|
||||
{
|
||||
(*(M128*)_transpose._colum0Ptr).single_0 = (*(M128*)_colum0Ptr).single_0;
|
||||
(*(M128*)_transpose._colum0Ptr).single_1 = (*(M128*)_colum1Ptr).single_0;
|
||||
(*(M128*)_transpose._colum0Ptr).single_2 = (*(M128*)_colum2Ptr).single_0;
|
||||
|
||||
(*(M128*)_transpose._colum1Ptr).single_0 = (*(M128*)_colum0Ptr).single_1;
|
||||
(*(M128*)_transpose._colum1Ptr).single_1 = (*(M128*)_colum1Ptr).single_1;
|
||||
(*(M128*)_transpose._colum1Ptr).single_2 = (*(M128*)_colum2Ptr).single_1;
|
||||
|
||||
(*(M128*)_transpose._colum2Ptr).single_0 = (*(M128*)_colum0Ptr).single_2;
|
||||
(*(M128*)_transpose._colum2Ptr).single_1 = (*(M128*)_colum1Ptr).single_2;
|
||||
(*(M128*)_transpose._colum2Ptr).single_2 = (*(M128*)_colum2Ptr).single_2;
|
||||
|
||||
(*(M128*)_transpose._colum3Ptr).single_0 = (*(M128*)_colum0Ptr).single_3;
|
||||
(*(M128*)_transpose._colum3Ptr).single_1 = (*(M128*)_colum1Ptr).single_3;
|
||||
(*(M128*)_transpose._colum3Ptr).single_2 = (*(M128*)_colum2Ptr).single_3;
|
||||
|
||||
_isTransposed = true;
|
||||
}
|
||||
switch (transposeMode)
|
||||
{
|
||||
case TransposeMode.New:
|
||||
return new Matrix3x4(
|
||||
_transpose._colum0Ptr,
|
||||
_transpose._colum1Ptr,
|
||||
_transpose._colum2Ptr,
|
||||
_transpose._colum3Ptr
|
||||
);
|
||||
break;
|
||||
case TransposeMode.Copy:
|
||||
return _transpose;
|
||||
break;
|
||||
default:
|
||||
throw new Exception();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static Matrix4x3 operator +(Matrix4x3 matrix1, Matrix4x3 matrix2)
|
||||
{
|
||||
return new Matrix4x3(
|
||||
internalIO.addps_internal(matrix1._colum0Ptr, matrix2._colum0Ptr),
|
||||
internalIO.addps_internal(matrix1._colum1Ptr, matrix2._colum1Ptr),
|
||||
internalIO.addps_internal(matrix1._colum2Ptr, matrix2._colum2Ptr)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix4x3 operator -(Matrix4x3 matrix1, Matrix4x3 matrix2)
|
||||
{
|
||||
return new Matrix4x3(
|
||||
internalIO.subps_internal(matrix1._colum0Ptr, matrix2._colum0Ptr),
|
||||
internalIO.subps_internal(matrix1._colum1Ptr, matrix2._colum1Ptr),
|
||||
internalIO.subps_internal(matrix1._colum2Ptr, matrix2._colum2Ptr)
|
||||
) ;
|
||||
}
|
||||
|
||||
public static Matrix4x3 operator *(Matrix4x3 matrix, float value)
|
||||
{
|
||||
return new Matrix4x3(
|
||||
internalIO.mulps_const_internal(matrix._colum0Ptr,value),
|
||||
internalIO.mulps_const_internal(matrix._colum1Ptr,value),
|
||||
internalIO.mulps_const_internal(matrix._colum2Ptr,value)
|
||||
);
|
||||
}
|
||||
|
||||
public static Matrix4x3 operator /(Matrix4x3 matrix, float value)
|
||||
{
|
||||
return new Matrix4x3(
|
||||
internalIO.divps_const_internal(matrix._colum0Ptr,value),
|
||||
internalIO.divps_const_internal(matrix._colum1Ptr,value),
|
||||
internalIO.divps_const_internal(matrix._colum2Ptr,value)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
~Matrix4x3()
|
||||
{
|
||||
if (map == null)
|
||||
{
|
||||
internalIO.deinitM128_internal(_colum0Ptr);
|
||||
internalIO.deinitM128_internal(_colum1Ptr);
|
||||
internalIO.deinitM128_internal(_colum2Ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,145 +1,191 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Numerics;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
public enum TransposeMode
|
||||
{
|
||||
New,
|
||||
Copy
|
||||
}
|
||||
|
||||
|
||||
|
||||
public unsafe class Matrix4x4:IDisposable
|
||||
[StructLayout(LayoutKind.Explicit, Size = 2*16*sizeof(float)+sizeof(bool), Pack = 16)]
|
||||
public struct Matrix4x4 : IEquatable<Matrix4x4>
|
||||
{
|
||||
[FieldOffset(0)] internal Mat4 mat;
|
||||
[FieldOffset(64*sizeof(float))] internal Mat4 transpose;
|
||||
[FieldOffset(2*64*sizeof(float))]internal bool isTransposed;
|
||||
|
||||
|
||||
|
||||
public static readonly Matrix4x4 Unit
|
||||
= new Matrix4x4(
|
||||
1,0,0,0,
|
||||
0,1,0,0,
|
||||
0,0,1,0,
|
||||
0,0,0,1
|
||||
);
|
||||
|
||||
|
||||
internal M128Map M128Map;
|
||||
|
||||
//pointers of 4 colums are collected
|
||||
//in the array referred by these pointer.
|
||||
internal M128matMap _matMap;
|
||||
|
||||
|
||||
//define if this matrix has correctly stored its transpose matrix
|
||||
internal bool isTransposed = false;
|
||||
|
||||
//store the transpose mat of this one to avoid calculate again
|
||||
internal M128matMap _transpose;
|
||||
|
||||
private bool disposedValue;
|
||||
|
||||
internal Matrix4x4()
|
||||
{
|
||||
_matMap = new M128matMap(
|
||||
internalIO.load_internal(0, 0, 0, 0),
|
||||
internalIO.load_internal(0, 0, 0, 0),
|
||||
internalIO.load_internal(0, 0, 0, 0),
|
||||
internalIO.load_internal(0, 0, 0, 0)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
//constructor used to transform a matMap from C to a Matrix class,
|
||||
//the original matMap will be cleaned up after transformation
|
||||
internal Matrix4x4(
|
||||
ref M128matMap matMap
|
||||
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,
|
||||
float a30, float a31, float a32, float a33
|
||||
)
|
||||
{
|
||||
_matMap = matMap;
|
||||
internalIO .deinitMatmap_sse_internal( ref matMap );
|
||||
M128* c0ref = internalIO.loadptr_internal(a00, a10, a20, a30);
|
||||
M128* c1ref = internalIO.loadptr_internal(a01, a11, a21, a31);
|
||||
M128* c2ref = internalIO.loadptr_internal(a02, a12, a22, a32);
|
||||
M128* c3ref = internalIO.loadptr_internal(a03, a13, a23, a33);
|
||||
|
||||
mat.colum0 = *c0ref;
|
||||
mat.colum1 = *c1ref;
|
||||
mat.colum2 = *c2ref;
|
||||
mat.colum3 = *c3ref;
|
||||
|
||||
/**/
|
||||
internalIO.deinitM128_internal(c0ref);
|
||||
internalIO.deinitM128_internal(c1ref);
|
||||
internalIO.deinitM128_internal(c2ref);
|
||||
internalIO.deinitM128_internal(c3ref);
|
||||
/**/
|
||||
|
||||
}
|
||||
|
||||
internal Matrix4x4(
|
||||
IntPtr c0Ptr,
|
||||
IntPtr c1Ptr,
|
||||
IntPtr c2Ptr,
|
||||
IntPtr c3Ptr
|
||||
)
|
||||
public unsafe float this[int rowNum, int columNum]
|
||||
{
|
||||
_matMap = new M128matMap(c0Ptr,c1Ptr,c2Ptr,c3Ptr);
|
||||
}
|
||||
|
||||
public 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,
|
||||
float a30,float a31,float a32,float a33
|
||||
)
|
||||
{
|
||||
_matMap = new M128matMap(
|
||||
internalIO.load_internal(a00, a10, a20, a30),
|
||||
internalIO.load_internal(a01, a11, a21, a31),
|
||||
internalIO.load_internal(a02, a12, a22, a32),
|
||||
internalIO.load_internal(a03, a13, a23, a33)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public Matrix4x4 Transpose
|
||||
{
|
||||
get {
|
||||
if (isTransposed)
|
||||
{
|
||||
internalIO.deinitMatmap_sse_internal(ref _transpose);
|
||||
|
||||
}
|
||||
return new Matrix4x4(
|
||||
internalIO.load_cpy_internal(_transpose.colum0Ptr),
|
||||
internalIO.load_cpy_internal(_transpose.colum1Ptr),
|
||||
internalIO.load_cpy_internal(_transpose.colum2Ptr),
|
||||
internalIO.load_cpy_internal(_transpose.colum3Ptr)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!disposedValue)
|
||||
get
|
||||
{
|
||||
if (disposing)
|
||||
if (rowNum>3||rowNum<0)
|
||||
{
|
||||
// TODO: 释放托管状态(托管对象)
|
||||
throw new ArgumentOutOfRangeException(nameof(columNum));
|
||||
}
|
||||
if (columNum>3||columNum<0)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(columNum));
|
||||
}
|
||||
InternalTranspose();
|
||||
fixed (float* p = &this.transpose.a00 )
|
||||
{
|
||||
ulong pbit = (ulong)p
|
||||
+ (ulong)sizeof(M128) * (ulong)rowNum
|
||||
+ (ulong)sizeof(float) * (ulong)columNum;
|
||||
return *(float*)pbit;
|
||||
}
|
||||
|
||||
// TODO: 释放未托管的资源(未托管的对象)并重写终结器
|
||||
// TODO: 将大型字段设置为 null
|
||||
disposedValue = true;
|
||||
}
|
||||
}
|
||||
|
||||
// // TODO: 仅当“Dispose(bool disposing)”拥有用于释放未托管资源的代码时才替代终结器
|
||||
// ~Matrix4x4()
|
||||
// {
|
||||
// // 不要更改此代码。请将清理代码放入“Dispose(bool disposing)”方法中
|
||||
// Dispose(disposing: false);
|
||||
// }
|
||||
|
||||
public void Dispose()
|
||||
internal Matrix4x4(
|
||||
ref M128 vec0,
|
||||
ref M128 vec1,
|
||||
ref M128 vec2,
|
||||
ref M128 vec3
|
||||
)
|
||||
{
|
||||
// 不要更改此代码。请将清理代码放入“Dispose(bool disposing)”方法中
|
||||
Dispose(disposing: true);
|
||||
GC.SuppressFinalize(this);
|
||||
mat.colum0 = vec0;
|
||||
mat.colum1 = vec1;
|
||||
mat.colum2 = vec2;
|
||||
mat.colum3 = vec3;
|
||||
}
|
||||
|
||||
internal Matrix4x4(Mat4 mat)
|
||||
{
|
||||
this.mat = mat;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static unsafe Matrix4x4 operator +(Matrix4x4 mat1, Matrix4x4 Mat2)
|
||||
{
|
||||
Mat4* refret = internalIO.add_mat4(ref mat1.mat, ref Mat2.mat);
|
||||
Matrix4x4 ret = new Matrix4x4(*refret);
|
||||
internalIO.deinit_mat4(refret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static unsafe Matrix4x4 operator -(Matrix4x4 mat1, Matrix4x4 Mat2)
|
||||
{
|
||||
Mat4* refret = internalIO.sub_mat4(ref mat1.mat, ref Mat2.mat);
|
||||
Matrix4x4 ret = new Matrix4x4(*refret);
|
||||
internalIO.deinit_mat4(refret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static unsafe Matrix4x4 operator *(Matrix4x4 mat, float value)
|
||||
{
|
||||
Mat4* refret = internalIO.mul_const(ref mat.mat, value);
|
||||
Matrix4x4 ret = new Matrix4x4(*refret);
|
||||
internalIO.deinit_mat4(refret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static unsafe Matrix4x2 operator *(Matrix4x4 left, Matrix4x2 right)
|
||||
{
|
||||
left.InternalTranspose();
|
||||
Mat4 tr = left.transpose;
|
||||
return new Matrix4x2(
|
||||
internalIO.mulps_sum_internal(&tr.colum0, &right.mat.colum0),
|
||||
internalIO.mulps_sum_internal(&tr.colum0, &right.mat.colum1),
|
||||
internalIO.mulps_sum_internal(&tr.colum1, &right.mat.colum0),
|
||||
internalIO.mulps_sum_internal(&tr.colum1, &right.mat.colum1),
|
||||
internalIO.mulps_sum_internal(&tr.colum2, &right.mat.colum0),
|
||||
internalIO.mulps_sum_internal(&tr.colum2, &right.mat.colum1),
|
||||
internalIO.mulps_sum_internal(&tr.colum3, &right.mat.colum0),
|
||||
internalIO.mulps_sum_internal(&tr.colum3, &right.mat.colum1)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static unsafe Matrix4x4 operator *(Matrix4x4 left, Matrix4x4 right)
|
||||
{
|
||||
left.InternalTranspose();
|
||||
Mat4* p = internalIO.mul_4_4(&left.transpose, &right.mat);
|
||||
Matrix4x4 ret = new Matrix4x4(*p);
|
||||
internalIO.deinit_mat4(p);
|
||||
return ret;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public unsafe float Det()
|
||||
{
|
||||
InternalTranspose();
|
||||
fixed (Matrix4x4* _this = &this)
|
||||
{
|
||||
return internalIO.det_mat4(_this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal unsafe void InternalTranspose()
|
||||
{
|
||||
if (!isTransposed)
|
||||
{
|
||||
fixed (Mat4* source = &this.mat, target = &this.transpose)
|
||||
{
|
||||
internalIO.Transpose4to4_internal(source, target);
|
||||
}
|
||||
|
||||
isTransposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
InternalTranspose();
|
||||
return
|
||||
$"{transpose.colum0}\n" +
|
||||
$"{transpose.colum1}\n" +
|
||||
$"{transpose.colum2}\n" +
|
||||
$"{transpose.colum3}";
|
||||
|
||||
}
|
||||
|
||||
public bool Equals(Matrix4x4 other)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace StgSharp.Math
|
||||
@@ -8,67 +9,58 @@ namespace StgSharp.Math
|
||||
/// A two dimension vector defined by two elements.
|
||||
/// Vec2Ds in StgSharp are defaultly usaed as colum vector.
|
||||
/// </summary>
|
||||
public class Vec2d
|
||||
|
||||
[StructLayout(LayoutKind.Explicit, Size = 16,Pack = 16)]
|
||||
public struct Vec2d
|
||||
{
|
||||
|
||||
internal M128Map _map;
|
||||
internal IntPtr _m128Ptr;
|
||||
[FieldOffset(0)]
|
||||
public float X;
|
||||
[FieldOffset(4)]
|
||||
public float Y;
|
||||
|
||||
public unsafe float X
|
||||
{
|
||||
get { return (*(M128*)_m128Ptr).single_0; }
|
||||
set { (*(M128*)_m128Ptr).single_0 = value; }
|
||||
}
|
||||
|
||||
public unsafe float Y
|
||||
{
|
||||
get { return (*(M128*)_m128Ptr).single_1; }
|
||||
set { (*(M128*)_m128Ptr).single_1 = value; }
|
||||
}
|
||||
[FieldOffset(0)]
|
||||
internal M128 vec;
|
||||
|
||||
public Vec2d(float x, float y)
|
||||
{
|
||||
_m128Ptr = internalIO.load_internal(x, y, 0, 0);
|
||||
}
|
||||
|
||||
internal Vec2d(IntPtr value)
|
||||
{
|
||||
_m128Ptr = value;
|
||||
X = x; Y = y;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Vec2d operator +(Vec2d vec1, Vec2d vec2)
|
||||
{
|
||||
return new Vec2d(
|
||||
internalIO.addps_internal(vec1._m128Ptr,vec2._m128Ptr)
|
||||
vec1.X + vec2.X,
|
||||
vec1.Y + vec2.Y
|
||||
);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Vec2d operator -(Vec2d vec1, Vec2d vec2)
|
||||
{
|
||||
return new Vec2d(
|
||||
internalIO.subps_internal(vec1._m128Ptr,vec2._m128Ptr)
|
||||
vec1.X - vec2.X,
|
||||
vec1.Y - vec2.Y
|
||||
);
|
||||
}
|
||||
|
||||
public static Vec2d operator *(Vec2d vec, float value)
|
||||
{
|
||||
return new Vec2d(
|
||||
internalIO.mulps_const_internal(vec._m128Ptr,value)
|
||||
vec.X * value,
|
||||
vec.Y * value
|
||||
);
|
||||
}
|
||||
|
||||
public static Vec2d operator /(Vec2d vec, float value)
|
||||
{
|
||||
return new Vec2d(
|
||||
internalIO.divps_const_internal(vec._m128Ptr, value)
|
||||
vec.X / value,
|
||||
vec.Y / value
|
||||
);
|
||||
}
|
||||
|
||||
public static float operator *(Vec2d vec1, Vec2d vec2)
|
||||
{
|
||||
return internalIO.mulps_sum_internal(vec1._m128Ptr, vec2._m128Ptr);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,125 +1,75 @@
|
||||
using StgSharp.Control;
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
|
||||
public class Vec3d
|
||||
[StructLayout(LayoutKind.Explicit,Size = 16,Pack = 16)]
|
||||
public struct Vec3d
|
||||
{
|
||||
public static Vec3d defaultValue =
|
||||
new Vec3d(0, 0, 0);
|
||||
|
||||
[FieldOffset(0)]
|
||||
internal M128 vec;
|
||||
|
||||
internal M128Map _map;
|
||||
internal IntPtr _m128Ptr;
|
||||
[FieldOffset(0)] public float X;
|
||||
[FieldOffset(4)] public float Y;
|
||||
[FieldOffset(8)] public float Z;
|
||||
|
||||
public unsafe float X
|
||||
public Vec3d(
|
||||
float x, float y, float z)
|
||||
{
|
||||
get { return ((M128*)_m128Ptr)->single_0; }
|
||||
set { ((M128*)_m128Ptr)->single_0 = value; }
|
||||
}
|
||||
|
||||
public unsafe float Y
|
||||
{
|
||||
get { return ((M128*)_m128Ptr)->single_1; }
|
||||
set { ((M128*)_m128Ptr)->single_1 = value; }
|
||||
}
|
||||
|
||||
public unsafe float Z
|
||||
{
|
||||
get { return ((M128*)_m128Ptr)->single_2; }
|
||||
set { ((M128*)_m128Ptr)->single_2 = value; }
|
||||
}
|
||||
|
||||
|
||||
internal Vec3d(IntPtr value)
|
||||
{
|
||||
if ((long)value == -1)
|
||||
{
|
||||
throw new Exception("Failed to creat M128 pointer");
|
||||
}
|
||||
else
|
||||
{
|
||||
_m128Ptr = value;
|
||||
}
|
||||
}
|
||||
|
||||
public Vec3d(float x, float y, float z)
|
||||
{
|
||||
_m128Ptr = internalIO.load_internal(x,y,z,0);
|
||||
}
|
||||
|
||||
internal Vec3d()
|
||||
{
|
||||
_m128Ptr = defaultValue._m128Ptr;
|
||||
X = x; Y = y; Z = z;
|
||||
}
|
||||
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Vec3d operator +(Vec3d vec1, Vec3d vec2)
|
||||
{
|
||||
return new Vec3d(
|
||||
internalIO.addps_internal(vec1._m128Ptr, vec2._m128Ptr)
|
||||
vec1.X + vec2.X,
|
||||
vec1.Y + vec2.Y,
|
||||
vec1.Z + vec2.Z
|
||||
);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Vec3d operator -(Vec3d vec1, Vec3d vec2)
|
||||
{
|
||||
return new Vec3d(
|
||||
internalIO.subps_internal(vec1._m128Ptr, vec2._m128Ptr)
|
||||
vec1.X - vec2.X,
|
||||
vec1.Y - vec2.Y,
|
||||
vec1.Z - vec2.Z
|
||||
);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Vec3d operator *(Vec3d vec, float value)
|
||||
{
|
||||
return new Vec3d(
|
||||
internalIO.mulps_const_internal(vec._m128Ptr,value)
|
||||
vec.X * value,
|
||||
vec.Y * value,
|
||||
vec.Z * value
|
||||
);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Vec3d operator /(Vec3d vec, float value)
|
||||
{
|
||||
return new Vec3d(
|
||||
internalIO.divps_const_internal(vec._m128Ptr,value)
|
||||
vec.X/value,
|
||||
vec.Y/value,
|
||||
vec.Z/value
|
||||
);
|
||||
}
|
||||
/**/
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static float operator *(Vec3d vec1, Vec3d vec2)
|
||||
{
|
||||
//return VectorCalc.Multiple(vec1,vec2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
/**/
|
||||
public unsafe override string ToString()
|
||||
{
|
||||
return (*(M128*)_m128Ptr).ToString();
|
||||
}
|
||||
|
||||
public unsafe string ToString(string sample)
|
||||
{
|
||||
return $"{(*(M128*)_m128Ptr).single_0.ToString(sample)}\t"+
|
||||
$"{(*(M128*)_m128Ptr).single_1.ToString(sample)}\t"+
|
||||
$"{(*(M128*)_m128Ptr).single_2.ToString(sample)}\t"+
|
||||
$"{(*(M128*)_m128Ptr).single_3.ToString(sample)}\t";
|
||||
}
|
||||
|
||||
~Vec3d()
|
||||
{
|
||||
if (_map == null)
|
||||
{
|
||||
if (_m128Ptr != defaultValue._m128Ptr)
|
||||
{
|
||||
internalIO.deinitM128_internal(this._m128Ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
_m128Ptr = IntPtr.Zero;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
return
|
||||
vec1.X * vec2.X +
|
||||
vec1.Y * vec2.Y +
|
||||
vec1.Z * vec2.Z;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,126 +6,20 @@ using System.Runtime.InteropServices;
|
||||
namespace StgSharp.Math
|
||||
{
|
||||
|
||||
|
||||
public class Vec4d
|
||||
[StructLayout(LayoutKind.Explicit, Size = 16, Pack = 16)]
|
||||
public struct Vec4d
|
||||
{
|
||||
internal static readonly Vec4d defaultValue
|
||||
= new Vec4d( 0,0,0,0 );
|
||||
[FieldOffset(0)] internal M128 vec;
|
||||
|
||||
internal M128Map _map;
|
||||
internal IntPtr _m128Ptr;
|
||||
[FieldOffset(0)]public float X;
|
||||
[FieldOffset(4)]public float Y;
|
||||
[FieldOffset(8)]public float Z;
|
||||
[FieldOffset(12)]public float W;
|
||||
|
||||
|
||||
public unsafe float X
|
||||
unsafe public Vec4d(
|
||||
float x, float y, float z, float w)
|
||||
{
|
||||
get { return (*(M128*)_m128Ptr).single_0; }
|
||||
set { (*(M128*)_m128Ptr).single_0 = value; }
|
||||
X = x; Y = y; Z = z; W = w;
|
||||
}
|
||||
|
||||
public unsafe float Y
|
||||
{
|
||||
get { return (*(M128*)_m128Ptr).single_1; }
|
||||
set { (*(M128*)_m128Ptr).single_1 = value; }
|
||||
}
|
||||
|
||||
public unsafe float Z
|
||||
{
|
||||
get { return (*(M128*)_m128Ptr).single_2; }
|
||||
set { (*(M128*)_m128Ptr).single_2 = value; }
|
||||
}
|
||||
|
||||
public unsafe float W
|
||||
{
|
||||
get { return (*(M128*)_m128Ptr).single_3; }
|
||||
set { (*(M128*)_m128Ptr).single_3 = value; }
|
||||
}
|
||||
|
||||
public Vec4d(float x, float y, float z, float w)
|
||||
{
|
||||
IntPtr a = internalIO.load_internal(x,y,z,w);
|
||||
if ((ulong)a>=0)
|
||||
{
|
||||
this._m128Ptr = a;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// internal constructor to recive a pointer of the M128 value
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
internal Vec4d(IntPtr value)
|
||||
{
|
||||
if ((long)value == -1)
|
||||
{
|
||||
throw new Exception("Failed to init M128 pointer!");
|
||||
}
|
||||
else
|
||||
{
|
||||
_m128Ptr = value;
|
||||
}
|
||||
}
|
||||
|
||||
public Vec4d()
|
||||
{
|
||||
_m128Ptr = defaultValue._m128Ptr;
|
||||
}
|
||||
|
||||
public static unsafe Vec4d operator +(Vec4d vec1,Vec4d vec2)
|
||||
{
|
||||
return new Vec4d(
|
||||
internalIO.addps_internal(vec1._m128Ptr,vec2._m128Ptr)
|
||||
) ;
|
||||
}
|
||||
|
||||
/**/
|
||||
public static Vec4d operator -(Vec4d vec1, Vec4d vec2)
|
||||
{
|
||||
return new Vec4d(
|
||||
internalIO.subps_internal(vec1._m128Ptr,vec2._m128Ptr)
|
||||
);
|
||||
}
|
||||
/**/
|
||||
|
||||
public static Vec4d operator *(Vec4d vec, float value)
|
||||
{
|
||||
return new Vec4d(
|
||||
internalIO.mulps_const_internal(vec._m128Ptr,value)
|
||||
);
|
||||
}
|
||||
|
||||
public static Vec4d operator /(Vec4d vec, float value)
|
||||
{
|
||||
return new Vec4d(
|
||||
internalIO.divps_const_internal(vec._m128Ptr, value)
|
||||
);
|
||||
}
|
||||
|
||||
public unsafe override string ToString()
|
||||
{
|
||||
return $"{*(M128*)_m128Ptr}";
|
||||
}
|
||||
|
||||
~Vec4d()
|
||||
{
|
||||
if (_map == null)
|
||||
{
|
||||
if (_m128Ptr != defaultValue._m128Ptr)
|
||||
{
|
||||
internalIO.deinitM128_internal(this._m128Ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
_m128Ptr = IntPtr.Zero;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,8 +43,11 @@
|
||||
<NoWarn>1701;1702;0649;1591;0169</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<PropertyGroup Condition=" '$(OS)' == 'Windows_NT' ">
|
||||
<DefineConstants>_WINDOWS</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Bcl.HashCode" Version="1.1.1" />
|
||||
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
|
||||
</ItemGroup>
|
||||
|
||||
Binary file not shown.
@@ -162,12 +162,6 @@
|
||||
Vec2Ds in StgSharp are defaultly usaed as colum vector.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:StgSharp.Math.Vec4d.#ctor(System.IntPtr)">
|
||||
<summary>
|
||||
internal constructor to recive a pointer of the M128 value
|
||||
</summary>
|
||||
<param name="value"></param>
|
||||
</member>
|
||||
<member name="M:StgSharp.Math.Calc.ASin(System.Single)">
|
||||
<summary>
|
||||
Reurns the value of ArcSin(x)
|
||||
|
||||
@@ -1 +1 @@
|
||||
df9c40a56cc9cdbf0d2d8e2746396f8c7fbcaaf3
|
||||
affa619bf07b05c035efee881282f4490e2b3fd5
|
||||
|
||||
Binary file not shown.
@@ -162,12 +162,6 @@
|
||||
Vec2Ds in StgSharp are defaultly usaed as colum vector.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:StgSharp.Math.Vec4d.#ctor(System.IntPtr)">
|
||||
<summary>
|
||||
internal constructor to recive a pointer of the M128 value
|
||||
</summary>
|
||||
<param name="value"></param>
|
||||
</member>
|
||||
<member name="M:StgSharp.Math.Calc.ASin(System.Single)">
|
||||
<summary>
|
||||
Reurns the value of ArcSin(x)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user