﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;

#if URP_OUTLINE && UNITY_2019_1_OR_NEWER
#if UNITY_2019_3_OR_NEWER
using UnityEngine.Rendering.Universal;
#else
using UnityEngine.Rendering.LWRP;
#endif
#endif

#if UNITY_EDITOR
using UnityEditor;
#endif

#if HDRP_OUTLINE
using UnityEngine.Rendering.HighDefinition;
#endif

namespace EPOOutline
{
    public static class CameraUtility
    {
        public static int GetMSAA(Camera camera)
        {
            if (camera.targetTexture != null)
                return camera.targetTexture.antiAliasing;

            var antialiasing = GetRenderPipelineMSAA();

            var msaa = Mathf.Max(antialiasing, 1);
            if (!camera.allowMSAA)
                msaa = 1;

            if (camera.actualRenderingPath != RenderingPath.Forward &&
                camera.actualRenderingPath != RenderingPath.VertexLit)
                msaa = 1;

            return msaa;
        }
        
        private static int GetRenderPipelineMSAA()
        {
#if URP_OUTLINE && UNITY_2019_1_OR_NEWER
            if (PipelineFetcher.CurrentAsset is
#if UNITY_2019_3_OR_NEWER
                UniversalRenderPipelineAsset
#else
                LightweightRenderPipelineAsset
#endif
                )

                return (PipelineFetcher.CurrentAsset as
#if UNITY_2019_3_OR_NEWER
                    UniversalRenderPipelineAsset
#else
                    LightweightRenderPipelineAsset
#endif
                    ).msaaSampleCount;
#endif

#if HDRP_OUTLINE
            if (PipelineFetcher.CurrentAsset is HDRenderPipelineAsset)
                return 1;
#endif

            return QualitySettings.antiAliasing;
        }
    }
}