#ifndef CUSTOM_UNLIT_INPUT_INCLUDED
#define CUSTOM_UNLIT_INPUT_INCLUDED

TEXTURE2D(_BaseMap);
SAMPLER(sampler_BaseMap);

UNITY_INSTANCING_BUFFER_START(UnityPerMaterial)
    UNITY_DEFINE_INSTANCED_PROP(float4, _BaseMap_ST)
    UNITY_DEFINE_INSTANCED_PROP(float4, _BaseColor)
    UNITY_DEFINE_INSTANCED_PROP(float, _Cutoff)
UNITY_INSTANCING_BUFFER_END(UnityPerMaterial)

// 通过UNITY_ACCESS_INSTANCED_PROP访问material属性
#define INPUT_PROP(name) UNITY_ACCESS_INSTANCED_PROP(UnityPerMaterial, name)

struct InputConfig
{
    float2 baseUV;
};

InputConfig GetInputConfig(float2 baseUV)
{
    InputConfig c;
    c.baseUV = baseUV;
    return c;
}

float2 TransformBaseUV(float2 baseUV)
{
    // 计算缩放和偏移后的UV坐标
    float4 baseST = INPUT_PROP(_BaseMap_ST);
    return baseUV * baseST.xy + baseST.zw;
}

float2 TransformDetailUV(float2 baseUV)
{
    return 0.0;
}

float4 GetMask(InputConfig c)
{
    return 1.0;
}

float4 GetDetail(InputConfig c)
{
    return 0.0;
}

float4 GetBase(InputConfig c)
{
    float4 baseMap = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, c.baseUV);
    float4 baseColor = INPUT_PROP(_BaseColor);
    return baseMap * baseColor;
}

float3 GetEmission(InputConfig c)
{
    return GetBase(c).rgb;
}

float GetCutoff(InputConfig c)
{
    return INPUT_PROP(_Cutoff);
}

float GetMetallic(InputConfig c)
{
    return 0.0;
}

float GetSmoothness(InputConfig c)
{
    return 0.0;
}

float GetFresnel(InputConfig c)
{
    return 0.0;
}

float3 GetNormalTS(InputConfig c)
{
    return float3(0.0, 0.0, 1.0);
}

#endif