コード例 #1
0
        /// <summary>
        /// Call ActivateShader from the model/bsp "draw" function.  It will set up
        /// the appropriate texture stages, etc.
        /// </summary>
        public bool ActivateShader(int shader_index, ShaderPass pass)
        {
            bool bDoneProcessing = true;

            if (shader_index < UTIL_SHADER_MAX)
            {
                ActivateUtilShader(shader_index);
            }
            else
            {
                switch (m_LookupTable[shader_index].type)
                {
                case ShaderType.Soso:
                    TagSoso tsoso = (TagSoso)m_SosoArray[m_LookupTable[shader_index].index];
                    if (pass == ShaderPass.First)
                    {
                        tsoso.Pass1();
                        bDoneProcessing = true;
                    }
                    else if (pass == ShaderPass.Second)
                    {
                        tsoso.Pass2();
                        bDoneProcessing = true;
                    }
                    break;

                case ShaderType.Shad:
                    TagShad tshad = (TagShad)m_ShadArray[m_LookupTable[shader_index].index];
                    tshad.SetupBlendFunction();
                    tshad.ActivatePass1(ref m_TextureManager);
                    break;

                case ShaderType.Senv:
                    TagSenv tsenv = (TagSenv)m_SenvArray[m_LookupTable[shader_index].index];
                    if (pass == ShaderPass.First)
                    {
                        tsenv.Pass1();
                        bDoneProcessing = true;
                    }
                    break;

                case ShaderType.Schi:
                    TagSchi tschi = (TagSchi)m_SchiArray[m_LookupTable[shader_index].index];
                    if (pass == ShaderPass.First)
                    {
                        tschi.TwoStage_Pass1();
                        bDoneProcessing = true;
                    }
                    break;

                case ShaderType.Scex:
                    TagScex tscex = (TagScex)m_ScexArray[m_LookupTable[shader_index].index];
                    if (pass == ShaderPass.First)
                    {
                        tscex.Pass1();
                        bDoneProcessing = true;
                    }
                    break;

                case ShaderType.Sgla:
                    TagSgla tsgla = (TagSgla)m_SglaArray[m_LookupTable[shader_index].index];
                    if (pass == ShaderPass.First)
                    {
                        tsgla.Pass1();
                        bDoneProcessing = true;
                    }
                    break;

                case ShaderType.Swat:
                    TagSwat tswat = (TagSwat)m_SwatArray[m_LookupTable[shader_index].index];
                    if (pass == ShaderPass.First)
                    {
                        tswat.Pass1();
                        bDoneProcessing = true;
                    }
                    break;

                default:
                    ShaderBase shdr = new ShaderBase();
                    shdr.SetupBlendFunction();
                    break;
                }
            }

            return(bDoneProcessing);
        }