예제 #1
0
        private void SavePreprocessShaders()
        {
            ShaderToolsSetting.GetInstance().PreprocessShadersSettings.Clear();
            for (int iPreprocessShaders = 0; iPreprocessShaders < m_PreprocessShadersForGUIs.Count; iPreprocessShaders++)
            {
                PreprocessShadersForGUI iterPreprocessShadersForGUI = m_PreprocessShadersForGUIs[iPreprocessShaders];
                if (iterPreprocessShadersForGUI.Script == null ||
                    iterPreprocessShadersForGUI.Setting == null)
                {
                    continue;
                }

                try
                {
                    iterPreprocessShadersForGUI.Setting.OnSaveByGUI();

                    PreprocessShadersSetting preprocessShadersSetting = new PreprocessShadersSetting();
                    preprocessShadersSetting.MonoScriptGUID         = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(iterPreprocessShadersForGUI.Script));
                    preprocessShadersSetting.MonoScriptTypeFullName = iterPreprocessShadersForGUI.Script.GetClass().FullName;
                    preprocessShadersSetting.SettingJson            = JsonUtility.ToJson(iterPreprocessShadersForGUI.Setting);
                    ShaderToolsSetting.GetInstance().PreprocessShadersSettings.Add(preprocessShadersSetting);
                }
                catch (Exception e)
                {
                    MDebug.LogWarning("Shader", $"保存Shader处理失败\n{e.ToString()}");
                }
            }
        }
예제 #2
0
        private void LoadPreprocessShaders()
        {
            m_PreprocessShadersForGUIs.Clear();
            List <PreprocessShadersSetting> preprocessShadersSettings = ShaderToolsSetting.GetInstance().PreprocessShadersSettings;

            for (int iPreprocessShaders = 0; iPreprocessShaders < preprocessShadersSettings.Count; iPreprocessShaders++)
            {
                PreprocessShadersSetting iterPreprocessShadersSetting = preprocessShadersSettings[iPreprocessShaders];
                try
                {
                    PreprocessShadersForGUI preprocessShadersForGUI = new PreprocessShadersForGUI();
                    preprocessShadersForGUI.Script = AssetDatabase.LoadMainAssetAtPath(AssetDatabase.GUIDToAssetPath(iterPreprocessShadersSetting.MonoScriptGUID)) as MonoScript;
                    if (preprocessShadersForGUI.Script == null)
                    {
                        continue;
                    }

                    Type baseType = preprocessShadersForGUI.Script.GetClass();
                    while (true)
                    {
                        baseType = baseType.BaseType;
                        if (baseType.IsGenericType)
                        {
                            break;
                        }
                    }
                    Type settingType = baseType.GenericTypeArguments[0];
                    preprocessShadersForGUI.Setting = JsonUtility.FromJson(iterPreprocessShadersSetting.SettingJson
                                                                           , settingType) as BasePreprocessShadersSetting;
                    if (preprocessShadersForGUI.Setting == null)
                    {
                        continue;
                    }

                    preprocessShadersForGUI.Setting.OnLoadByGUI();

                    m_PreprocessShadersForGUIs.Add(preprocessShadersForGUI);
                }
                catch (Exception e)
                {
                    MDebug.LogWarning("Shader", $"加载Shader处理失败\n{e.ToString()}");
                }
            }
        }