Beispiel #1
0
    public void OnProcessShader(Shader shader, ShaderSnippetData snippet, IList <ShaderCompilerData> inputData)
    {
        // Do we have a shader variant stripper function for this shader?
        VariantStrippingFunc stripperFunc = null;

        m_StripperFuncs.TryGetValue(shader.name, out stripperFunc);
        if (stripperFunc == null || inputData.Count == 0)
        {
            return;
        }
        int inputShaderVariantCount   = inputData.Count;
        ShaderCompilerData workaround = inputData[0];

        for (int i = 0; i < inputData.Count; ++i)
        {
            ShaderCompilerData input = inputData[i];
            if (stripperFunc(shader, snippet, input))
            {
                inputData.RemoveAt(i);
                i--;
            }
        }
        // Currently if a certain snippet is completely stripped (for example if you remove a whole pass) other passes might get broken
        // To work around that, we make sure that we always have at least one variant.
        if (inputData.Count == 0)
        {
            inputData.Add(workaround);
        }
    }
Beispiel #2
0
        public void OnProcessShader(Shader shader, ShaderSnippetData snippet, IList <ShaderCompilerData> inputData)
        {
            // This test will also return if we are not using HDRenderPipelineAsset
            if (m_CurrentHDRPAsset == null || !m_CurrentHDRPAsset.allowShaderVariantStripping)
            {
                return;
            }

            // Do we have a shader variant stripper function for this shader?
            VariantStrippingFunc stripperFunc = null;

            m_StripperFuncs.TryGetValue(shader.name, out stripperFunc);
            if (stripperFunc == null)
            {
                return;
            }

            int inputShaderVariantCount = inputData.Count;

            for (int i = 0; i < inputData.Count; ++i)
            {
                ShaderCompilerData input = inputData[i];
                if (stripperFunc(m_CurrentHDRPAsset, shader, snippet, input))
                {
                    inputData.RemoveAt(i);
                    i--;
                }
            }
        }