using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;

namespace Thousandto.Core.Base
{
    //RenderTexture处理的类
    public class RenderTextureUtils
    {
        //创建纹理 -- 按照比例来进行
        public static RenderTexture CreateTextureBaseScale(float scale, int d, RenderTextureFormat format)
        {
            int w = (int)Math.Round(Screen.width * scale);
            int h = (int)Math.Round(Screen.height * scale);            
            return CreateTexture(w, h, d, format);
        }

        //创建纹理 -- 按照高度来进行
        public static RenderTexture CreateTextureBaseHeight(int h, int d, RenderTextureFormat format)
        {
            int w = (int)Math.Round(Screen.width * ((float)h / (float)Screen.height));
            return CreateTexture(w, h, d, format);
        }
        
        //创建RenderTexture纹理
        public static RenderTexture CreateTexture(int w, int h, int d, RenderTextureFormat format)
        {
            if (GetSuppertFormat(ref format))
            {
                return RenderTexture.GetTemporary(w, h, d, format);
            }
            return null;
        }

        //释放RenderTextureTexture
        public static void ReleaseTexture(RenderTexture tex)
        {
            if (tex != null)
            {
                RenderTexture.ReleaseTemporary(tex); 
            }             
        }

        //获取当前支持的格式
        public static bool GetSuppertFormat(ref RenderTextureFormat format)
        {
            if (SystemInfo.SupportsRenderTextureFormat(format))
            {
                return true; 
            }
            else if (SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.RGB565))
            {
                format = RenderTextureFormat.RGB565;
            }
            else if (SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.ARGB4444))
            {
                format = RenderTextureFormat.ARGB4444;
            }
            else if (SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.ARGB1555))
            {
                format = RenderTextureFormat.ARGB1555;
            }            
            else if (SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.ARGB32))
            {
                format = RenderTextureFormat.ARGB32;
            }
            else
            {
                return false;
            }
            return true;
        }
    }
}