﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using CodeStage.AdvancedFPSCounter;

public class PostProcessTest : MonoBehaviour
{
    AFPSCounter fpsCounter;
    int repeatTimes = 1;
    // Start is called before the first frame update
    void Start()
    {
        mainCamera = Camera.main;
        if(null!=mainCamera)
        {
            v1Bh = mainCamera.GetComponent<PostProcessV1Behavior>();
            v1Bh.enabled = false;
            v2Bh = mainCamera.GetComponent<PostProcessV2Behavior>();
            v2Bh.enabled = false;
            cbBh = mainCamera.GetComponent<CommandBufferBlitBehavior>();
            cbBh.enabled = false;
        }

        v1List.Add(v1Bh);
        for (int i = 0; i < repeatTimes - 1; i++)
        {
            var v1 = mainCamera.gameObject.AddComponent<PostProcessV1Behavior>();
            v1.BriShader = v1Bh.BriShader;
            v1.enabled = false;
            v1List.Add(v1);
        }

        v2List.Add(v2Bh);
        for(int i=0;i<repeatTimes-1;i++)
        {
            var v2 = mainCamera.gameObject.AddComponent<PostProcessV2Behavior>();
            v2.BriShaderDrawMesh = v2Bh.BriShaderDrawMesh;
            v2.enabled = false;
            v2List.Add(v2);
        }

        cbbList.Add(cbBh);
        for (int i = 0; i < repeatTimes - 1; i++)
        {
            var cb = mainCamera.gameObject.AddComponent<CommandBufferBlitBehavior>();
            cb.BriShaderBlit = cbBh.BriShaderBlit;
            cb.enabled = false;
            cbbList.Add(cb);
        }

        _initFpsCounter();
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    void _initFpsCounter()
    {
        AFPSCounter temp = AFPSCounter.AddToScene(true);
        GameObject.DontDestroyOnLoad(temp.gameObject);
        //AFPSCounter.Instance.fpsCounter.UpdateInterval = 0.5f;
        AFPSCounter.Instance.deviceInfoCounter.Enabled = false;
        AFPSCounter.Instance.memoryCounter.Enabled = false;
        AFPSCounter.Instance.FontSize = 40;

        fpsCounter = GameObject.Find("Advanced FPS Counter").GetComponent<AFPSCounter>();
        if (fpsCounter == null)
            fpsCounter = Camera.main.gameObject.AddComponent<AFPSCounter>();
    }

    Camera mainCamera;
    PostProcessV1Behavior v1Bh;
    List<PostProcessV1Behavior> v1List = new List<PostProcessV1Behavior>();
    PostProcessV2Behavior v2Bh;
    List<PostProcessV2Behavior> v2List = new List<PostProcessV2Behavior>();
    CommandBufferBlitBehavior cbBh;
    List<CommandBufferBlitBehavior> cbbList = new List<CommandBufferBlitBehavior>();
    public void OnClickBlitMode()
    {
        // v1Bh.enabled = true;
        // v2Bh.enabled = false;
        // cbBh.enabled = false;
        foreach (var v1 in v1List)
            v1.enabled = true;
        foreach (var v2 in v2List)
            v2.enabled = false;
        foreach (var cb in cbbList)
            cb.enabled = false;
        
    }

    public void OnClickCommendBufferMode()
    {
        //v1Bh.enabled = false;
        //v2Bh.enabled = true;
        foreach (var v1 in v1List)
            v1.enabled = false;
        foreach (var v2 in v2List)
            v2.enabled = true;
        foreach (var cb in cbbList)
            cb.enabled = false;
        // cbBh.enabled = false;
    }

    public void OnClickCommandBufferBlit()
    {
        //v1Bh.enabled = false;
        //v2Bh.enabled = false;
        foreach (var v1 in v1List)
            v1.enabled = false;
        foreach (var v2 in v2List)
            v2.enabled = false;
        foreach (var cb in cbbList)
            cb.enabled = true;
        // cbBh.enabled = true;
    }

    public void OnClickClear()
    {
        //v1Bh.enabled = false;
        //v2Bh.enabled = false;
        foreach (var v1 in v1List)
            v1.enabled = false;
        foreach (var v2 in v2List)
            v2.enabled = false;
        foreach (var cb in cbbList)
            cb.enabled = false;
        // cbBh.enabled = false;
    }
}
