daily update on 20230822 by nitload youmu
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user