// <auto-generated>
// This file is generated by Ghost.NativeWrapperGen. Do not edit manually.
// </auto-generated>

namespace Ghost.Ufbx;

public unsafe partial struct ufbx_matrix
{
    /// <summary>
    /// From: <see cref="Api.ufbx_matrix_mul(ufbx_matrix*, ufbx_matrix*)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public ufbx_matrix Mul(ufbx_matrix* b)
    {
        return Api.ufbx_matrix_mul(
            (ufbx_matrix*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this),
            b);
    }

    /// <summary>
    /// From: <see cref="Api.ufbx_matrix_determinant(ufbx_matrix*)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public float Determinant()
    {
        return Api.ufbx_matrix_determinant((ufbx_matrix*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this));
    }

    /// <summary>
    /// From: <see cref="Api.ufbx_matrix_invert(ufbx_matrix*)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public ufbx_matrix Invert()
    {
        return Api.ufbx_matrix_invert((ufbx_matrix*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this));
    }

    /// <summary>
    /// From: <see cref="Api.ufbx_matrix_for_normals(ufbx_matrix*)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public ufbx_matrix ForNormals()
    {
        return Api.ufbx_matrix_for_normals((ufbx_matrix*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this));
    }

    /// <summary>
    /// From: <see cref="Api.ufbx_transform_position(ufbx_matrix*, ufbx_vec3)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public ufbx_vec3 TransformPosition(ufbx_vec3 v)
    {
        return Api.ufbx_transform_position(
            (ufbx_matrix*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this),
            v);
    }

    /// <summary>
    /// From: <see cref="Api.ufbx_transform_direction(ufbx_matrix*, ufbx_vec3)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public ufbx_vec3 TransformDirection(ufbx_vec3 v)
    {
        return Api.ufbx_transform_direction(
            (ufbx_matrix*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this),
            v);
    }

    /// <summary>
    /// From: <see cref="Api.ufbx_matrix_to_transform(ufbx_matrix*)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public ufbx_transform ToTransform()
    {
        return Api.ufbx_matrix_to_transform((ufbx_matrix*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this));
    }
}
