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

namespace Ghost.Nvtt;

public unsafe partial struct NvttCompressionOptions : System.IDisposable
{
    /// <summary>
    /// From: <see cref="Api.nvttCreateCompressionOptions()" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public static NvttCompressionOptions* Create()
    {
        return Api.nvttCreateCompressionOptions();
    }

    /// <summary>
    /// From: <see cref="Api.nvttDestroyCompressionOptions(NvttCompressionOptions*)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public void Dispose()
    {
        Api.nvttDestroyCompressionOptions((NvttCompressionOptions*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this));
    }

    /// <summary>
    /// From: <see cref="Api.nvttResetCompressionOptions(NvttCompressionOptions*)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public void Reset()
    {
        Api.nvttResetCompressionOptions((NvttCompressionOptions*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this));
    }

    /// <summary>
    /// From: <see cref="Api.nvttSetCompressionOptionsFormat(NvttCompressionOptions*, NvttFormat)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public void SetFormat(NvttFormat format)
    {
        Api.nvttSetCompressionOptionsFormat(
            (NvttCompressionOptions*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this),
            format);
    }

    /// <summary>
    /// From: <see cref="Api.nvttSetCompressionOptionsQuality(NvttCompressionOptions*, NvttQuality)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public void SetQuality(NvttQuality quality)
    {
        Api.nvttSetCompressionOptionsQuality(
            (NvttCompressionOptions*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this),
            quality);
    }

    /// <summary>
    /// From: <see cref="Api.nvttSetCompressionOptionsColorWeights(NvttCompressionOptions*, float, float, float, float)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public void SetColorWeights(float red, float green, float blue, float alpha)
    {
        Api.nvttSetCompressionOptionsColorWeights(
            (NvttCompressionOptions*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this),
            red,
            green,
            blue,
            alpha);
    }

    /// <summary>
    /// From: <see cref="Api.nvttSetCompressionOptionsPixelFormat(NvttCompressionOptions*, uint, uint, uint, uint, uint)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public void SetPixelFormat(uint bitcount, uint rmask, uint gmask, uint bmask, uint amask)
    {
        Api.nvttSetCompressionOptionsPixelFormat(
            (NvttCompressionOptions*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this),
            bitcount,
            rmask,
            gmask,
            bmask,
            amask);
    }

    /// <summary>
    /// From: <see cref="Api.nvttSetCompressionOptionsPixelType(NvttCompressionOptions*, NvttPixelType)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public void SetPixelType(NvttPixelType pixelType)
    {
        Api.nvttSetCompressionOptionsPixelType(
            (NvttCompressionOptions*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this),
            pixelType);
    }

    /// <summary>
    /// From: <see cref="Api.nvttSetCompressionOptionsPitchAlignment(NvttCompressionOptions*, int)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public void SetPitchAlignment(int pitchAlignment)
    {
        Api.nvttSetCompressionOptionsPitchAlignment(
            (NvttCompressionOptions*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this),
            pitchAlignment);
    }

    /// <summary>
    /// From: <see cref="Api.nvttSetCompressionOptionsQuantization(NvttCompressionOptions*, NvttBoolean, NvttBoolean, NvttBoolean, int)" />
    /// </summary>
    [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
    public void SetQuantization(NvttBoolean colorDithering, NvttBoolean alphaDithering, NvttBoolean binaryAlpha, int alphaThreshold)
    {
        Api.nvttSetCompressionOptionsQuantization(
            (NvttCompressionOptions*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref this),
            colorDithering,
            alphaDithering,
            binaryAlpha,
            alphaThreshold);
    }

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