#if GRIFFIN
using UnityEngine;

namespace Pinwheel.Griffin
{
    public static class GInternalMaterials
    {
        private static Material unlitTextureMaterial;
        public static Material UnlitTextureMaterial
        {
            get
            {
                if (unlitTextureMaterial == null)
                {
                    unlitTextureMaterial = new Material(Shader.Find("Unlit/Texture"));
                }
                return unlitTextureMaterial;
            }
        }

        private static Material unlitTransparentMaterial;
        public static Material UnlitTransparentMaterial
        {
            get
            {
                if (unlitTransparentMaterial == null)
                {
                    unlitTransparentMaterial = new Material(Shader.Find("Unlit/Transparent"));
                }
                return unlitTransparentMaterial;
            }
        }

        private static Material copyTextureMaterial;
        public static Material CopyTextureMaterial
        {
            get
            {
                if (copyTextureMaterial == null)
                {
                    copyTextureMaterial = new Material(GRuntimeSettings.Instance.internalShaders.copyTextureShader);
                }
                return copyTextureMaterial;
            }
        }

        private static Material subDivisionMapMaterial;
        public static Material SubDivisionMapMaterial
        {
            get
            {
                if (subDivisionMapMaterial == null)
                {
                    subDivisionMapMaterial = new Material(GRuntimeSettings.Instance.internalShaders.subDivisionMapShader);
                    subDivisionMapMaterial.SetFloat("_Epsilon", GCommon.SUB_DIV_EPSILON);
                    subDivisionMapMaterial.SetFloat("_PixelOffset", GCommon.SUB_DIV_PIXEL_OFFSET);
                    subDivisionMapMaterial.SetFloat("_Step", GCommon.SUB_DIV_STEP);
                }
                return subDivisionMapMaterial;
            }
        }

        private static Material blurMaterial;
        public static Material BlurMaterial
        {
            get
            {
                if (blurMaterial == null)
                {
                    blurMaterial = new Material(GRuntimeSettings.Instance.internalShaders.blurShader);
                }
                return blurMaterial;
            }
        }

        private static Material blurRadiusMaterial;
        public static Material BlurRadiusMaterial
        {
            get
            {
                if (blurRadiusMaterial == null)
                {
                    blurRadiusMaterial = new Material(GRuntimeSettings.Instance.internalShaders.blurRadiusShader);
                }
                return blurRadiusMaterial;
            }
        }

        


        private static Material painterCursorProjectorMaterial;
        public static Material PainterCursorProjectorMaterial
        {
            get
            {
                if (painterCursorProjectorMaterial == null)
                {
                    painterCursorProjectorMaterial = new Material(GRuntimeSettings.Instance.internalShaders.painterCursorProjectorShader);
                }
                return painterCursorProjectorMaterial;
            }
        }

        private static Material solidColorMaterial;
        public static Material SolidColorMaterial
        {
            get
            {
                if (solidColorMaterial == null)
                {
                    solidColorMaterial = new Material(GRuntimeSettings.Instance.internalShaders.solidColorShader);
                }
                return solidColorMaterial;
            }
        }


        private static Material rampMakerMaterial;
        public static Material RampMakerMaterial
        {
            get
            {
                if (rampMakerMaterial == null)
                {
                    rampMakerMaterial = new Material(GRuntimeSettings.Instance.internalShaders.rampMakerShader);
                }
                return rampMakerMaterial;
            }
        }

        private static Material geometryLivePreviewMaterial;
        public static Material GeometryLivePreviewMaterial
        {
            get
            {
                if (geometryLivePreviewMaterial == null)
                {
                    geometryLivePreviewMaterial = new Material(GRuntimeSettings.Instance.internalShaders.geometryLivePreviewShader);
                }
                return geometryLivePreviewMaterial;
            }
        }

        private static Material geometricalHeightMapMaterial;
        public static Material GeometricalHeightMapMaterial
        {
            get
            {
                if (geometricalHeightMapMaterial == null)
                {
                    geometricalHeightMapMaterial = new Material(GRuntimeSettings.Instance.internalShaders.geometricalHeightMapShader);
                }
                return geometricalHeightMapMaterial;
            }
        }

        private static Material foliageRemoverMaterial;
        public static Material FoliageRemoverMaterial
        {
            get
            {
                if (foliageRemoverMaterial == null)
                {
                    foliageRemoverMaterial = new Material(GRuntimeSettings.Instance.internalShaders.splineMaskShader);
                }
                return foliageRemoverMaterial;
            }
        }

        private static Material maskVisualizerMaterial;
        public static Material MaskVisualizerMaterial
        {
            get
            {
                if (maskVisualizerMaterial == null)
                {
                    maskVisualizerMaterial = new Material(GRuntimeSettings.Instance.internalShaders.maskVisualizerShader);
                }
                return maskVisualizerMaterial;
            }
        }

        private static Material stamperMaterial;
        public static Material StamperMaterial
        {
            get
            {
                if (stamperMaterial == null)
                {
                    stamperMaterial = new Material(GRuntimeSettings.Instance.internalShaders.stamperShader);
                }
                return stamperMaterial;
            }
        }

        private static Material terrainNormalMapRendererMaterial;
        public static Material TerrainNormalMapRendererMaterial
        {
            get
            {
                if (terrainNormalMapRendererMaterial == null)
                {
                    terrainNormalMapRendererMaterial = new Material(GRuntimeSettings.Instance.internalShaders.terrainNormalMapShader);
                }
                return terrainNormalMapRendererMaterial;
            }
        }

        private static Material terrainPerPixelNormalMapRendererMaterial;
        public static Material TerrainPerPixelNormalMapRendererMaterial
        {
            get
            {
                if (terrainPerPixelNormalMapRendererMaterial == null)
                {
                    terrainPerPixelNormalMapRendererMaterial = new Material(GRuntimeSettings.Instance.internalShaders.terrainPerPixelNormalMapShader);
                }
                return terrainPerPixelNormalMapRendererMaterial;
            }
        }

        private static Material textureStamperBrushMaterial;
        public static Material TextureStamperBrushMaterial
        {
            get
            {
                if (textureStamperBrushMaterial == null)
                {
                    textureStamperBrushMaterial = new Material(GRuntimeSettings.Instance.internalShaders.textureStamperBrushShader);
                }
                return textureStamperBrushMaterial;
            }
        }

        private static Material grassPreviewMaterial;
        public static Material GrassPreviewMaterial
        {
            get
            {
                if (grassPreviewMaterial == null)
                {
                    grassPreviewMaterial = new Material(GRuntimeSettings.Instance.internalShaders.grassPreviewShader);
                }
                return grassPreviewMaterial;
            }
        }

        private static Material navHelperDummyGameObjectMaterial;
        public static Material NavHelperDummyGameObjectMaterial
        {
            get
            {
                if (navHelperDummyGameObjectMaterial == null)
                {
                    navHelperDummyGameObjectMaterial = new Material(GRuntimeSettings.Instance.internalShaders.navHelperDummyGameObjectShader);
                }
                Color cyan = Color.cyan;
                navHelperDummyGameObjectMaterial.SetColor("_Color", new Color(cyan.r, cyan.g, cyan.b, 0.5f));
                return navHelperDummyGameObjectMaterial;
            }
        }

        private static Material splatsToAlbedoMaterial;
        public static Material SplatsToAlbedoMaterial
        {
            get
            {
                if (splatsToAlbedoMaterial == null)
                {
                    splatsToAlbedoMaterial = new Material(GRuntimeSettings.Instance.internalShaders.splatsToAlbedoShader);
                }
                return splatsToAlbedoMaterial;
            }
        }

        private static Material unlitChannelMaskMaterial;
        public static Material UnlitChannelMaskMaterial
        {
            get
            {
                if (unlitChannelMaskMaterial == null)
                {
                    unlitChannelMaskMaterial = new Material(GRuntimeSettings.Instance.internalShaders.unlitChannelMaskShader);
                }
                return unlitChannelMaskMaterial;
            }
        }

        private static Material channelToGrayscaleMaterial;
        public static Material ChannelToGrayscaleMaterial
        {
            get
            {
                if (channelToGrayscaleMaterial == null)
                {
                    channelToGrayscaleMaterial = new Material(GRuntimeSettings.Instance.internalShaders.channelToGrayscaleShader);
                }
                return channelToGrayscaleMaterial;
            }
        }

        private static Material heightMapFromMeshMaterial;
        public static Material HeightMapFromMeshMaterial
        {
            get
            {
                if (heightMapFromMeshMaterial == null)
                {
                    heightMapFromMeshMaterial = new Material(GRuntimeSettings.Instance.internalShaders.heightMapFromMeshShader);
                }
                return heightMapFromMeshMaterial;
            }
        }

        private static Material interactiveGrassVectorFieldMaterial;
        public static Material InteractiveGrassVectorFieldMaterial
        {
            get
            {
                if (interactiveGrassVectorFieldMaterial == null)
                {
                    interactiveGrassVectorFieldMaterial = new Material(GRuntimeSettings.Instance.internalShaders.interactiveGrassVectorFieldShader);
                }
                return interactiveGrassVectorFieldMaterial;
            }
        }

        private static Material subdivLivePreviewMaterial;
        public static Material SubdivLivePreviewMaterial
        {
            get
            {
                if (subdivLivePreviewMaterial == null)
                {
                    subdivLivePreviewMaterial = new Material(GRuntimeSettings.Instance.internalShaders.subdivLivePreviewShader);
                }
                return subdivLivePreviewMaterial;
            }
        }

        private static Material visibilityLivePreviewMaterial;
        public static Material VisibilityLivePreviewMaterial
        {
            get
            {
                if (visibilityLivePreviewMaterial == null)
                {
                    visibilityLivePreviewMaterial = new Material(GRuntimeSettings.Instance.internalShaders.visibilityLivePreviewShader);
                }
                return visibilityLivePreviewMaterial;
            }
        }

        private static Material heightmapConverterEncodeRGMaterial;
        public static Material HeightmapConverterEncodeRGMaterial
        {
            get
            {
                if (heightmapConverterEncodeRGMaterial == null)
                {
                    heightmapConverterEncodeRGMaterial = new Material(GRuntimeSettings.Instance.internalShaders.heightmapConverterEncodeRGShader);
                }
                return heightmapConverterEncodeRGMaterial;
            }
        }

        private static Material heightmapDecodeGrayscaleMaterial;
        public static Material HeightmapDecodeGrayscaleMaterial
        {
            get
            {
                if (heightmapDecodeGrayscaleMaterial == null)
                {
                    heightmapDecodeGrayscaleMaterial = new Material(GRuntimeSettings.Instance.internalShaders.heightmapDecodeGrayscaleShader);
                }
                return heightmapDecodeGrayscaleMaterial;
            }
        }

        private static Material drawTex2DArraySliceMaterial;
        public static Material DrawTex2DArraySliceMaterial
        {
            get
            {
                if (drawTex2DArraySliceMaterial == null)
                {
                    drawTex2DArraySliceMaterial = new Material(GRuntimeSettings.Instance.internalShaders.drawTex2DArraySliceShader);
                }
                return drawTex2DArraySliceMaterial;
            }
        }

        private static Material mask4ChannelsMaterial;
        public static Material Mask4ChannelsMaterial
        {
            get
            {
                if (mask4ChannelsMaterial == null)
                {
                    mask4ChannelsMaterial = new Material(GRuntimeSettings.Instance.internalShaders.mask4ChannelsShader);
                }
                return mask4ChannelsMaterial;
            }
        }
    }
}
#endif