#ifndef _PATHTRACING_PATHTRACINGMATERIALS_HLSL_
#define _PATHTRACING_PATHTRACINGMATERIALS_HLSL_

#include "Packages/com.unity.render-pipelines.core/Runtime/PathTracing/MaterialPool/MaterialPool.hlsl"

#define PTMaterial MaterialPool::MaterialEntry
#define MaterialProperties MaterialPool::MaterialProperties

StructuredBuffer<PTMaterial>    g_MaterialList;

// Textures
Texture2DArray<float4>          g_AlbedoTextures;
Texture2DArray<float4>          g_TransmissionTextures;
Texture2DArray<float4>          g_EmissionTextures;
float                           g_AtlasTexelSize; // The size of 1 texel in the atlases above

// Samplers
SamplerState                    sampler_g_EmissionTextures;
SamplerState                    sampler_g_AlbedoTextures;
SamplerState                    sampler_g_TransmissionTextures;

float                           g_AlbedoBoost;

float4 SampleAtlas(Texture2DArray<float4> atlas, SamplerState atlasSampler, uint index, float2 uv, float2 scale, float2 offset, bool pointFilterMode)
{
    return MaterialPool::SampleAtlas(atlas, atlasSampler, g_AtlasTexelSize, index, uv, scale, offset, pointFilterMode);
}

MaterialProperties LoadMaterialProperties(UnifiedRT::InstanceData instanceInfo, bool useWhiteAsBaseColor, float2 uv0, float2 uv1)
{
    MaterialProperties output = MaterialPool::LoadMaterialProperties(
        g_MaterialList,
        g_AlbedoTextures,
        sampler_g_AlbedoTextures,
        g_TransmissionTextures,
        sampler_g_TransmissionTextures,
        g_EmissionTextures,
        sampler_g_EmissionTextures,
        g_AlbedoBoost,
        g_AtlasTexelSize,
        instanceInfo.userMaterialID,
        uv0,
        uv1);

    if (useWhiteAsBaseColor)
    {
        // override to white albedo, because albedo is multiplied with lightmap color at runtime
        output.baseColor = float3(1, 1, 1);
    }

    return output;
}

#endif