Example #1
0
    private void OnEnable()
    {
        if (!ImageEffectHelper.IsSupported(shader, false, false, this))
        {
            enabled = false;
        }

        m_RTU = new RenderTextureUtility();
    }
Example #2
0
    private void OnEnable()
    {
        if (!ImageEffectHelper.IsSupported(shader, false, false, this))
        {
            enabled = false;
            return;
        }

        SetDirty();
    }
        private void OnEnable()
        {
            if (!ImageEffectHelper.IsSupported(filmicDepthOfFieldShader, true, true, this) || !ImageEffectHelper.IsSupported(medianFilterShader, true, true, this))
            {
                enabled = false;
                return;
            }

            if (ImageEffectHelper.supportsDX11 && !ImageEffectHelper.IsSupported(textureBokehShader, true, true, this))
            {
                enabled = false;
                return;
            }

            sceneCam.depthTextureMode |= DepthTextureMode.Depth;
        }
    void UpdateHistogram(RenderTexture source, Rect rect, HistogramMode mode)
    {
        if (m_HistogramMaterial == null)
        {
            m_HistogramMaterial = ImageEffectHelper.CheckShaderAndCreateMaterial(concreteTarget.histogramShader);
        }

        if (m_HistogramBuffer == null)
        {
            m_HistogramBuffer = new ComputeBuffer(256, sizeof(uint) << 2);
        }

        m_HistogramBuffer.SetData(k_EmptyBuffer);

        ComputeShader cs = concreteTarget.histogramComputeShader;

        int kernel = cs.FindKernel("KHistogramGather");

        cs.SetBuffer(kernel, "_Histogram", m_HistogramBuffer);
        cs.SetTexture(kernel, "_Source", source);

        int[] channels = null;
        switch (mode)
        {
        case HistogramMode.Luminance:
            channels = new[] { 0, 0, 0, 1 };
            break;

        case HistogramMode.RGB:
            channels = new[] { 1, 1, 1, 0 };
            break;

        case HistogramMode.Red:
            channels = new[] { 1, 0, 0, 0 };
            break;

        case HistogramMode.Green:
            channels = new[] { 0, 1, 0, 0 };
            break;

        case HistogramMode.Blue:
            channels = new[] { 0, 0, 1, 0 };
            break;
        }

        cs.SetInts("_Channels", channels);
        cs.SetInt("_IsLinear", concreteTarget.isGammaColorSpace ? 0 : 1);
        cs.Dispatch(kernel, Mathf.CeilToInt(source.width / 32f), Mathf.CeilToInt(source.height / 32f), 1);

        kernel = cs.FindKernel("KHistogramScale");
        cs.SetBuffer(kernel, "_Histogram", m_HistogramBuffer);
        cs.SetFloat("_Height", rect.height);
        cs.Dispatch(kernel, 1, 1, 1);

        if (m_HistogramTexture == null)
        {
            DestroyImmediate(m_HistogramTexture);
            m_HistogramTexture           = new RenderTexture((int)rect.width, (int)rect.height, 0, RenderTextureFormat.ARGB32);
            m_HistogramTexture.hideFlags = HideFlags.HideAndDontSave;
        }

        m_HistogramMaterial.SetBuffer("_Histogram", m_HistogramBuffer);
        m_HistogramMaterial.SetVector("_Size", new Vector2(m_HistogramTexture.width, m_HistogramTexture.height));
        m_HistogramMaterial.SetColor("_ColorR", redCurveColor);
        m_HistogramMaterial.SetColor("_ColorG", greenCurveColor);
        m_HistogramMaterial.SetColor("_ColorB", blueCurveColor);
        m_HistogramMaterial.SetColor("_ColorL", masterCurveColor);
        m_HistogramMaterial.SetInt("_Channel", (int)mode);
        Graphics.Blit(m_HistogramTexture, m_HistogramTexture, m_HistogramMaterial, (mode == HistogramMode.RGB) ? 1 : 0);
    }