daily uodate on 20231208 by nitload youmu, preparation for multi thread rendering

This commit is contained in:
Nitload
2023-12-08 05:36:04 +08:00
parent ae804553ce
commit ab85c1a9fe
297 changed files with 157896 additions and 5170 deletions
@@ -1,12 +0,0 @@
namespace StgSharp.Math
{
public static unsafe partial class Vector
{
/*
public static Vec2d GetVector( vec4d pointPair)
{
return pointPair.Point2-pointPair.Point1;
}
*/
}
}
@@ -1,563 +0,0 @@
using System;
using System.Runtime.InteropServices;
namespace StgSharp.Math
{
public static partial class VectorCalc
{
/*
public static unsafe float Multiple(vec3d vec1, vec3d vec2)
{
IntPtr retPtr = InternalIO.mulps_internal(vec1._Vector4Ptr,vec2._Vector4Ptr);
Vector4 Vector4 = *(Vector4*)retPtr;
Marshal.FreeHGlobal(retPtr);
return
Vector4.single_0 +
Vector4.single_1 +
Vector4.single_2;
}
public static unsafe float Multiple(Vec4d vec1,vec3d vec2)
{
IntPtr retPtr = InternalIO.mulps_internal(vec1._Vector4Ptr,vec2._Vector4Ptr);
Vector4 Vector4 = *(Vector4*)retPtr;
Marshal.FreeHGlobal(retPtr);
return
Vector4.single_0 +
Vector4.single_1 +
Vector4.single_2 +
Vector4.single_3;
}
public static Matrix2x2 Multiple(Matrix2x2 matrix1, Matrix2x2 matrix2)
{
if (matrix2 == Matrix2x2.Unit)
{
return new Matrix2x2(
InternalIO.load_cpy_internal(matrix1._colum0Ptr),
InternalIO.load_cpy_internal(matrix1._colum1Ptr)
);
}
Matrix2x2 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix2x2(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr)
);
}
public static Matrix2x2 Multiple(Matrix2x3 matrix1, Matrix3x2 matrix2)
{
Matrix3x2 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix2x2(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr)
);
}
public static Matrix2x2 Multiple(Matrix2x4 matrix1, Matrix4x2 matrix2)
{
Matrix4x2 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix2x2(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr)
);
}
public static Matrix2x3 Multiple(Matrix2x2 matrix1, Matrix2x3 matrix2)
{
Matrix2x2 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix2x3(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr)
);
}
public static Matrix2x3 Multiple(Matrix2x3 matrix1, Matrix3x3 matrix2)
{
Matrix3x2 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix2x3(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr)
);
}
public static Matrix2x3 Multiple(Matrix2x4 matrix1, Matrix4x3 matrix2)
{
Matrix4x2 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix2x3(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr)
);
}
public static Matrix2x4 Multiple(Matrix2x2 matrix1, Matrix2x4 matrix2)
{
Matrix2x2 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix2x4(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum3Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum3Ptr)
);
}
public static Matrix2x4 Multiple(Matrix2x3 matrix1, Matrix3x4 matrix2)
{
Matrix3x2 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix2x4(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum3Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum3Ptr)
);
}
public static Matrix2x4 Multiple(Matrix2x4 matrix1, Matrix4x4 matrix2)
{
Matrix4x2 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix2x4(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum3Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum3Ptr)
);
}
public static Matrix3x2 Multiple(Matrix3x2 matrix1, Matrix2x2 matrix2)
{
Matrix2x3 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix3x2(
InternalIO.mulps_sum_internal(trans._colum0Ptr,matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr,matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr,matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr,matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr,matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr,matrix2._colum1Ptr)
);
}
public static Matrix3x2 Multiple(Matrix3x3 matrix1, Matrix3x2 matrix2)
{
Matrix3x3 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix3x2(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr)
);
}
public static Matrix3x2 Multiple(Matrix3x4 matrix1, Matrix4x2 matrix2)
{
Matrix4x3 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix3x2(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr)
);
}
public static Matrix3x3 Multiple(Matrix3x2 matrix1, Matrix2x3 matrix2)
{
Matrix2x3 transpose = matrix1.Transpose(TransposeMode.Copy);
return new Matrix3x3(
InternalIO.mulps_sum_internal(transpose._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(transpose._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(transpose._colum0Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(transpose._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(transpose._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(transpose._colum1Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(transpose._colum2Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(transpose._colum2Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(transpose._colum2Ptr, matrix2._colum2Ptr)
);
}
public static Matrix3x3 Multiple(Matrix3x3 matrix1, Matrix3x3 matrix2)
{
Matrix3x3 transpose = matrix2.Transpose(TransposeMode.Copy);
return new Matrix3x3(
InternalIO.mulps_sum_internal(matrix1._colum0Ptr,transpose._colum0Ptr),
InternalIO.mulps_sum_internal(matrix1._colum0Ptr,transpose._colum1Ptr),
InternalIO.mulps_sum_internal(matrix1._colum0Ptr,transpose._colum2Ptr),
InternalIO.mulps_sum_internal(matrix1._colum1Ptr, transpose._colum0Ptr),
InternalIO.mulps_sum_internal(matrix1._colum1Ptr, transpose._colum1Ptr),
InternalIO.mulps_sum_internal(matrix1._colum1Ptr, transpose._colum2Ptr),
InternalIO.mulps_sum_internal(matrix1._colum2Ptr, transpose._colum0Ptr),
InternalIO.mulps_sum_internal(matrix1._colum2Ptr, transpose._colum1Ptr),
InternalIO.mulps_sum_internal(matrix1._colum2Ptr, transpose._colum2Ptr)
);
}
public static Matrix3x3 Multiple(Matrix3x4 matrix1, Matrix4x3 matrix2)
{
Matrix3x4 transpose = matrix2.Transpose(TransposeMode.Copy);
return new Matrix3x3(
InternalIO.mulps_sum_internal(matrix1._colum0Ptr, transpose._colum0Ptr),
InternalIO.mulps_sum_internal(matrix1._colum0Ptr, transpose._colum1Ptr),
InternalIO.mulps_sum_internal(matrix1._colum0Ptr, transpose._colum2Ptr),
InternalIO.mulps_sum_internal(matrix1._colum1Ptr, transpose._colum0Ptr),
InternalIO.mulps_sum_internal(matrix1._colum1Ptr, transpose._colum1Ptr),
InternalIO.mulps_sum_internal(matrix1._colum1Ptr, transpose._colum2Ptr),
InternalIO.mulps_sum_internal(matrix1._colum2Ptr, transpose._colum0Ptr),
InternalIO.mulps_sum_internal(matrix1._colum2Ptr, transpose._colum1Ptr),
InternalIO.mulps_sum_internal(matrix1._colum2Ptr, transpose._colum2Ptr)
);
}
public static Matrix3x4 Multiple(Matrix3x2 matrix1, Matrix2x4 matrix2)
{
Matrix2x3 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix3x4(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum3Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum3Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum3Ptr)
);
}
public static Matrix3x4 Multiple(Matrix3x3 matrix1, Matrix3x4 matrix2)
{
Matrix3x3 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix3x4(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum3Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum3Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum3Ptr)
);
}
public static Matrix3x4 Multiple(Matrix3x4 matrix1, Matrix4x4 matrix2)
{
Matrix4x3 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix3x4(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum3Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum3Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum3Ptr)
);
}
public static Matrix4x2 Multiple(Matrix4x2 matrix1, Matrix2x2 matrix2)
{
Matrix2x4 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix4x2(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum1Ptr)
);
}
public static Matrix4x2 Multiple(Matrix4x3 matrix1, Matrix3x2 matrix2)
{
Matrix3x4 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix4x2(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum1Ptr)
);
}
public static Matrix4x2 Multiple(Matrix4x4 matrix1, Matrix4x2 matrix2)
{
Matrix4x4 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix4x2(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum1Ptr)
);
}
public static Matrix4x3 Multiple(Matrix4x2 matrix1, Matrix2x3 matrix2)
{
Matrix2x4 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix4x3(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum2Ptr)
);
}
public static Matrix4x3 Multiple(Matrix4x3 matrix1, Matrix3x3 matrix2)
{
Matrix3x4 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix4x3(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum2Ptr)
);
}
public static Matrix4x3 Multiple(Matrix4x4 matrix1, Matrix4x3 matrix2)
{
Matrix4x4 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix4x3(
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum0Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum1Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum2Ptr, matrix2._colum2Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum0Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum1Ptr),
InternalIO.mulps_sum_internal(trans._colum3Ptr, matrix2._colum2Ptr)
);
}
public static Matrix4x4 Multiple(Matrix4x2 matrix1, Matrix2x4 matrix2)
{
Matrix2x4 transpose = matrix1.Transpose(TransposeMode.Copy);
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(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(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(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)
);
}
public static Matrix4x4 Multiple( Matrix4x3 matrix1, Matrix3x4 matrix2)
{
Matrix3x4 trans = matrix1.Transpose(TransposeMode.Copy);
return new Matrix4x4(
InternalIO.mulps_sum_internal(matrix2._colum0Ptr,trans._colum0Ptr),
InternalIO.mulps_sum_internal(matrix2._colum0Ptr,trans._colum1Ptr),
InternalIO.mulps_sum_internal(matrix2._colum0Ptr,trans._colum2Ptr),
InternalIO.mulps_sum_internal(matrix2._colum0Ptr,trans._colum3Ptr),
InternalIO.mulps_sum_internal(matrix2._colum1Ptr,trans._colum0Ptr),
InternalIO.mulps_sum_internal(matrix2._colum1Ptr,trans._colum1Ptr),
InternalIO.mulps_sum_internal(matrix2._colum1Ptr,trans._colum2Ptr),
InternalIO.mulps_sum_internal(matrix2._colum1Ptr,trans._colum3Ptr),
InternalIO.mulps_sum_internal(matrix2._colum2Ptr,trans._colum0Ptr),
InternalIO.mulps_sum_internal(matrix2._colum2Ptr,trans._colum1Ptr),
InternalIO.mulps_sum_internal(matrix2._colum2Ptr,trans._colum2Ptr),
InternalIO.mulps_sum_internal(matrix2._colum2Ptr,trans._colum3Ptr),
InternalIO.mulps_sum_internal(matrix2._colum3Ptr,trans._colum0Ptr),
InternalIO.mulps_sum_internal(matrix2._colum3Ptr,trans._colum1Ptr),
InternalIO.mulps_sum_internal(matrix2._colum3Ptr,trans._colum2Ptr),
InternalIO.mulps_sum_internal(matrix2._colum3Ptr,trans._colum3Ptr)
);
}
/*
public static Matrix4x4 Multiple( Matrix4x4 matrix1, Matrix4x4 matrix2)
{
matrix1.InternalTranspose();
return new Matrix4x4(
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(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(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(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,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StgSharp.Math
{
public static unsafe partial class VectorCalc
{
}
}
+12 -6
View File
@@ -11,10 +11,16 @@ namespace StgSharp.Math
[FieldOffset(0)] internal Mat4 mat;
[FieldOffset(4 * 4 * sizeof(float))] internal Mat2 transpose;
[FieldOffset(6 * 4 * sizeof(float))] internal bool isTransposed;
[FieldOffset(0)] public Vec2d Colum0;
[FieldOffset(16)] public Vec2d Colum1;
[FieldOffset(32)] public Vec2d Colum2;
[FieldOffset(48)] public Vec2d Colum3;
public Matrix2x4(
float a00, float a01,float a02,float a03,
float a10, float a11,float a12,float a13
float a00, float a01, float a02, float a03,
float a10, float a11, float a12, float a13
)
{
mat.colum0 = new Vector4(a00, a10, 0, 0);
@@ -144,7 +150,7 @@ namespace StgSharp.Math
return new Matrix2x2(
Vector4.Dot(left.transpose.colum0, right.mat.colum0),
Vector4.Dot(left.transpose.colum0, right.mat.colum1),
Vector4.Dot(left.transpose.colum1, right.mat.colum0),
Vector4.Dot(left.transpose.colum1, right.mat.colum1)
);
@@ -158,7 +164,7 @@ namespace StgSharp.Math
Vector4.Dot(left.transpose.colum0, right.mat.colum0),
Vector4.Dot(left.transpose.colum0, right.mat.colum1),
Vector4.Dot(left.transpose.colum0, right.mat.colum2),
Vector4.Dot(left.transpose.colum1, right.mat.colum0),
Vector4.Dot(left.transpose.colum1, right.mat.colum1),
Vector4.Dot(left.transpose.colum1, right.mat.colum2)
@@ -174,7 +180,7 @@ namespace StgSharp.Math
Vector4.Dot(left.transpose.colum0, right.mat.colum1),
Vector4.Dot(left.transpose.colum0, right.mat.colum2),
Vector4.Dot(left.transpose.colum0, right.mat.colum3),
Vector4.Dot(left.transpose.colum1, right.mat.colum0),
Vector4.Dot(left.transpose.colum1, right.mat.colum1),
Vector4.Dot(left.transpose.colum1, right.mat.colum2),
+13 -1
View File
@@ -9,11 +9,13 @@ namespace StgSharp.Math
public struct Matrix3x2
{
[FieldOffset(0)] internal Mat2 mat;
[FieldOffset(0)] internal vec3d colum0;
[FieldOffset(4 * 4)] internal vec3d colum1;
[FieldOffset(2 * 4 * sizeof(float))] internal Mat3 transpose;
[FieldOffset(5 * 4 * sizeof(float))] internal bool isTransposed;
public Matrix3x2(
public unsafe Matrix3x2(
float a00, float a01,
float a10, float a11,
float a20, float a21
@@ -21,6 +23,11 @@ namespace StgSharp.Math
{
mat.colum0 = new Vector4(a00, a10, a20, 0);
mat.colum0 = new Vector4(a01, a11, a21, 0);
#if NET5_0_OR_GREATER
Unsafe.SkipInit(out colum0);
Unsafe.SkipInit(out colum1);
Unsafe.SkipInit(out transpose);
#endif
}
internal Matrix3x2(
@@ -32,6 +39,11 @@ namespace StgSharp.Math
mat.colum1 = c1;
}
public vec3d VerticalVecMultiply(Vec2d vec)
{
return colum0 * vec.X + colum1 * vec.Y;
}
public unsafe float this[int rowNum, int columNum]
{
get
+19 -1
View File
@@ -10,7 +10,7 @@ namespace StgSharp.Math
/// Vec2Ds in StgSharp are defaultly usaed as colum vector.
/// </summary>
[StructLayout(LayoutKind.Explicit, Size = 16,Pack = 16)]
[StructLayout(LayoutKind.Explicit, Size = 16, Pack = 16)]
public struct Vec2d
{
@@ -27,6 +27,11 @@ namespace StgSharp.Math
X = x; Y = y;
}
public static Vec2d Zero
{
get { return new Vec2d(0, 0); }
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vec2d operator +(Vec2d vec1, Vec2d vec2)
{
@@ -61,7 +66,20 @@ namespace StgSharp.Math
);
}
public static bool operator ==(Vec2d left, Vec2d right)
{
return left.X == right.X && left.Y == right.Y;
}
public static bool operator !=(Vec2d left, Vec2d right)
{
return !(left == right);
}
public float Cross(Vec2d right)
{
return X * right.Y - Y * right.X;
}
}
}
+24 -14
View File
@@ -6,12 +6,6 @@ using System.Runtime.InteropServices;
namespace StgSharp.Math
{
public static class Vec3d
{
public static vec3d Zero => new vec3d(0, 0, 0);
public static vec3d Unit => new vec3d(1, 1, 1);
}
[StructLayout(LayoutKind.Explicit, Size = 16, Pack = 16)]
public struct vec3d : IEquatable<vec3d>
{
@@ -31,9 +25,17 @@ namespace StgSharp.Math
public vec3d(
float x, float y, float z)
{
#if NET5_0_OR_GREATER
Unsafe.SkipInit(out vec);
#endif
X = x; Y = y; Z = z;
}
internal vec3d(Vector4 vector)
{
vec = vector;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public float Dot(vec3d right)
{
@@ -53,22 +55,24 @@ namespace StgSharp.Math
);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal vec3d(Vector4 vector)
{
vec = vector;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static vec3d operator +(vec3d left, vec3d right)
{
return new vec3d(
left.X + right.X,
left.Y + right.Y,
left.Z + right.Z
left.vec + right.vec
);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public float GetMaxValue()
{
float ret = X;
ret = ret > Y ? ret : Y;
ret = ret > Z ? ret : Z;
return ret;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static vec3d operator -(vec3d left, vec3d right)
{
@@ -157,4 +161,10 @@ namespace StgSharp.Math
return $"[{X},{Y},{Z}]";
}
}
public static class Vec3d
{
public static vec3d Unit { get => new vec3d(1, 1, 1); }
public static vec3d Zero { get => new vec3d(0, 0, 0); }
}
}
+44 -4
View File
@@ -5,21 +5,61 @@ using System.Runtime.InteropServices;
namespace StgSharp.Math
{
[StructLayout(LayoutKind.Sequential)]
internal struct M128F
{
internal float X;
internal float Y;
internal float Z;
internal float W;
}
[StructLayout(LayoutKind.Explicit, Size = 16, Pack = 16)]
public struct Vec4d
{
[FieldOffset(0)] internal Vector4 vec;
[FieldOffset(0)] internal M128F fvec;
[FieldOffset(0)]public float X;
[FieldOffset(4)]public float Y;
[FieldOffset(8)]public float Z;
[FieldOffset(12)]public float W;
[FieldOffset(0)] public float X;
[FieldOffset(4)] public float Y;
[FieldOffset(8)] public float Z;
[FieldOffset(12)] public float W;
[FieldOffset(0)] public int X_int;
[FieldOffset(4)] public int Y_int;
[FieldOffset(8)] public int Z_int;
[FieldOffset(12)] public int W_int;
[FieldOffset(0)] public long X_long;
[FieldOffset(8)] public long Y_long;
[FieldOffset(0)] public long X_ulong;
[FieldOffset(8)] public long Y_ulong;
[FieldOffset(0)] public byte byte_0;
[FieldOffset(1)] public byte byte_1;
[FieldOffset(2)] public byte byte_2;
[FieldOffset(3)] public byte byte_3;
[FieldOffset(4)] public byte byte_4;
[FieldOffset(5)] public byte byte_5;
[FieldOffset(6)] public byte byte_6;
[FieldOffset(7)] public byte byte_7;
[FieldOffset(8)] public byte byte_8;
[FieldOffset(9)] public byte byte_9;
[FieldOffset(10)] public byte byte_10;
[FieldOffset(11)] public byte byte_11;
[FieldOffset(12)] public byte byte_12;
[FieldOffset(13)] public byte byte_13;
[FieldOffset(14)] public byte byte_14;
[FieldOffset(15)] public byte byte_15;
unsafe public Vec4d(
float x, float y, float z, float w)
{
X = x; Y = y; Z = z; W = w;
}
}
}