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; } }