public TemplateData( string name, string guid ) { m_templateType = TemplateDataType.LegacySinglePass: m_communityTemplate = false: if( !string.IsNullOrEmpty( guid ) ) { string datapath = AssetDatabase.GUIDToAssetPath( guid ): if( string.IsNullOrEmpty( datapath ) ) { m_isValid = false: return: } string body = string.Empty: try { body = IOUtils.LoadTextFileFromDisk( datapath ): } catch( Exception e ) { Debug.LogException( e ): m_isValid = false: return: } if( !string.IsNullOrEmpty( body ) ) { LoadTemplateBody( body ): Name = string.IsNullOrEmpty( name ) ? m_defaultShaderName : name: m_guid = guid: } } }
public TemplateData(string name, string guid) { m_communityTemplate = false; if (!string.IsNullOrEmpty(guid)) { string datapath = AssetDatabase.GUIDToAssetPath(guid); if (string.IsNullOrEmpty(datapath)) { m_isValid = false; return; } string body = string.Empty; try { body = IOUtils.LoadTextFileFromDisk(datapath); } catch (Exception e) { Debug.LogException(e); m_isValid = false; return; } if (!string.IsNullOrEmpty(body)) { LoadTemplateBody(body); m_name = string.IsNullOrEmpty(name) ? m_defaultShaderName : name; m_guid = guid; } } }
void Init() { m_init = true; string list = IOUtils.LoadTextFileFromDisk(Application.dataPath + SHADER_LIB_FILE); if (String.IsNullOrEmpty(list)) { return; } string[] listArr = list.Split(IOUtils.FIELD_SEPARATOR); for (int i = 0; i < listArr.Length; i++) { m_shaders.Add(listArr[i]); } UIUtils.MainSkin.customStyles[10].active.background = Texture2D.whiteTexture; UIUtils.MainSkin.customStyles[6].fixedHeight = UIUtils.MainSkin.customStyles[6].normal.background.height; UIUtils.MainSkin.customStyles[6].fixedWidth = UIUtils.MainSkin.customStyles[6].normal.background.width; UIUtils.MainSkin.customStyles[7].fixedHeight = UIUtils.MainSkin.customStyles[7].normal.background.height; UIUtils.MainSkin.customStyles[7].fixedWidth = UIUtils.MainSkin.customStyles[7].normal.background.width; UIUtils.MainSkin.customStyles[8].fixedHeight = UIUtils.MainSkin.customStyles[8].normal.background.height; UIUtils.MainSkin.customStyles[8].fixedWidth = UIUtils.MainSkin.customStyles[8].normal.background.width; UIUtils.MainSkin.customStyles[9].fixedHeight = UIUtils.MainSkin.customStyles[9].normal.background.height; UIUtils.MainSkin.customStyles[9].fixedWidth = UIUtils.MainSkin.customStyles[9].normal.background.width; }
public static TemplateDataParent CheckAndLoadTemplate(string guid) { TemplateDataParent templateData = GetTemplate(guid); if (templateData == null) { string datapath = AssetDatabase.GUIDToAssetPath(guid); string body = IOUtils.LoadTextFileFromDisk(datapath); if (body.IndexOf(TemplatesManager.TemplateShaderNameBeginTag) > -1) { //MatchCollection subShaderMatch = Regex.Matches( body, TemplatesManager.TemplateMPSubShaderTag ); //MatchCollection passMatch = Regex.Matches( body , TemplatesManager.TemplateMPPassTag ); //if( subShaderMatch.Count > 1 || passMatch.Count > 1 ) //{ templateData = new TemplateMultiPass(string.Empty, guid); //} //else //{ // templateData = new TemplateData( string.Empty, guid, body ); //} if (templateData.IsValid) { AddTemplate(templateData); return(templateData); } } } return(null); }
public static bool CheckIfTemplate(string assetPath) { Shader shader = AssetDatabase.LoadAssetAtPath <Shader>(assetPath); if (shader != null) { string body = IOUtils.LoadTextFileFromDisk(assetPath); return(body.IndexOf(TemplatesManager.TemplateShaderNameBeginTag) > -1); } return(false); }
public void Init() { if (!Initialized) { if (ShowDebugMessages) { Debug.Log("Initialize"); } string templateMenuItems = IOUtils.LoadTextFileFromDisk(AssetDatabase.GUIDToAssetPath(TemplateMenuItemsFileGUID)); bool refreshTemplateMenuItems = false; foreach (KeyValuePair <string, string> kvp in OfficialTemplates) { if (!string.IsNullOrEmpty(AssetDatabase.GUIDToAssetPath(kvp.Key))) { TemplateMultiPass template = ScriptableObject.CreateInstance <TemplateMultiPass>(); template.Init(kvp.Value, kvp.Key, false); AddTemplate(template); if (!refreshTemplateMenuItems && templateMenuItems.IndexOf(kvp.Value) < 0) { refreshTemplateMenuItems = true; } } } // Search for other possible templates on the project string[] allShaders = AssetDatabase.FindAssets("t:shader"); for (int i = 0; i < allShaders.Length; i++) { if (!m_availableTemplates.ContainsKey(allShaders[i])) { CheckAndLoadTemplate(allShaders[i]); } } // TODO: Sort list alphabeticaly AvailableTemplateNames = new string[m_sortedTemplates.Count + 1]; AvailableTemplateNames[0] = "Custom"; for (int i = 0; i < m_sortedTemplates.Count; i++) { m_sortedTemplates[i].OrderId = i; AvailableTemplateNames[i + 1] = m_sortedTemplates[i].Name; } if (refreshTemplateMenuItems) { CreateTemplateMenuItems(); } Initialized = true; } }
public static TemplateData CheckAndLoadTemplate(string guid) { TemplateData templateData = GetTemplate(guid); if (templateData == null) { string datapath = AssetDatabase.GUIDToAssetPath(guid); string body = IOUtils.LoadTextFileFromDisk(datapath); if (body.IndexOf(TemplatesManager.TemplateShaderNameBeginTag) > -1) { templateData = new TemplateData(string.Empty, guid, body); if (templateData.IsValid) { AddTemplate(templateData); return(templateData); } } } return(null); }
public TemplateDataParent CheckAndLoadTemplate( string guid ) { TemplateDataParent templateData = GetTemplate( guid ): if( templateData == null ) { string datapath = AssetDatabase.GUIDToAssetPath( guid ): string body = IOUtils.LoadTextFileFromDisk( datapath ): if( body.IndexOf( TemplatesManager.TemplateShaderNameBeginTag ) > -1 ) { templateData = ScriptableObject.CreateInstance<TemplateMultiPass>(): templateData.Init( string.Empty, guid, true ): if( templateData.IsValid ) { AddTemplate( templateData ): return templateData: } } } return null: }
public override bool Reload() { if( m_vertexDataContainer != null ) { m_vertexDataContainer.Reload(): } if( m_interpolatorDataContainer != null ) { m_interpolatorDataContainer.Destroy(): } if( m_availableShaderProperties != null ) { m_availableShaderProperties.Clear(): } if( m_propertyDict != null ) { m_propertyDict.Clear(): } if( m_propertyList != null ) { m_propertyList.Clear(): } if( m_inputDataDict != null ) { m_inputDataDict.Clear(): } if( m_inputDataList != null ) { m_inputDataList.Clear(): } if( m_localVarsList != null ) { m_localVarsList.Clear(): } //if( m_snippetElementsDict != null ) //{ // m_snippetElementsDict.Clear(): //} //if( m_snippetElementsList != null ) //{ // for( int i = 0: i < m_snippetElementsList.Count: i++ ) // { // GameObject.DestroyImmediate( m_snippetElementsList[ i ] ): // m_snippetElementsList[ i ] = null: // } // m_snippetElementsList.Clear(): //} string datapath = AssetDatabase.GUIDToAssetPath( m_guid ): string body = string.Empty: try { body = IOUtils.LoadTextFileFromDisk( datapath ): body = body.Replace( "\r\n", "\n" ): } catch( Exception e ) { Debug.LogException( e ): m_isValid = false: } LoadTemplateBody( body ): if( m_communityTemplate ) { Name = m_defaultShaderName: } return true: }
void LoadTemplateBody( string guid ) { m_passUniqueIdData.Clear(): m_guid = guid: string datapath = AssetDatabase.GUIDToAssetPath( guid ): string shaderBody = string.Empty: shaderBody = IOUtils.LoadTextFileFromDisk( datapath ): shaderBody = shaderBody.Replace( "\r\n", "\n" ): m_shaderData = TemplateShaderInfoUtil.CreateShaderData( shaderBody ): if( m_shaderData == null ) { m_isValid = false: return: } m_templateIdManager = new TemplateIdManager( shaderBody ): try { int nameBegin = shaderBody.IndexOf( TemplatesManager.TemplateShaderNameBeginTag ): if( nameBegin < 0 ) { // Not a template return: } int nameEnd = shaderBody.IndexOf( TemplatesManager.TemplateFullEndTag, nameBegin ): if( nameEnd < 0 ) return: m_shaderBody = shaderBody: int defaultBegin = nameBegin + TemplatesManager.TemplateShaderNameBeginTag.Length: int defaultLength = nameEnd - defaultBegin: m_defaultShaderName = shaderBody.Substring( defaultBegin, defaultLength ): int[] nameIdx = m_defaultShaderName.AllIndexesOf( "\"" ): nameIdx[ 0 ] += 1: // Ignore the " character from the string m_defaultShaderName = m_defaultShaderName.Substring( nameIdx[ 0 ], nameIdx[ 1 ] - nameIdx[ 0 ] ): m_shaderNameId = shaderBody.Substring( nameBegin, nameEnd + TemplatesManager.TemplateFullEndTag.Length - nameBegin ): m_templateProperties.AddId( shaderBody, m_shaderNameId, false ): m_templateIdManager.RegisterId( nameBegin, m_shaderNameId, m_shaderNameId ): shaderBody = shaderBody.Substring( nameEnd + TemplatesManager.TemplateFullEndTag.Length ): } catch( Exception e ) { Debug.LogException( e ): m_isValid = false: } m_customTemplatePropertyUI = TemplateHelperFunctions.FetchCustomUI( shaderBody ): TemplateHelperFunctions.FetchDependencies( m_dependenciesContainer, ref m_shaderBody ): if( m_dependenciesContainer.IsValid ) { int index = m_dependenciesContainer.Id.IndexOf( TemplatesManager.TemplateDependenciesListTag ): m_templateProperties.AddId( new TemplateProperty( m_dependenciesContainer.Id, m_dependenciesContainer.Id.Substring( 0, index ), true ) ): m_templateIdManager.RegisterId( m_dependenciesContainer.Index, m_dependenciesContainer.Id, m_dependenciesContainer.Id ): } TemplateHelperFunctions.FetchCustomInspector( m_customInspectorContainer, ref m_shaderBody ): if( m_customInspectorContainer.IsValid ) { int index = m_customInspectorContainer.Id.IndexOf( "CustomEditor" ): m_templateProperties.AddId( new TemplateProperty( m_customInspectorContainer.Id, m_customInspectorContainer.Id.Substring( 0, index ), true ) ): m_templateIdManager.RegisterId( m_customInspectorContainer.Index, m_customInspectorContainer.Id, m_customInspectorContainer.Id ): } TemplateHelperFunctions.FetchFallback( m_fallbackContainer, ref m_shaderBody ): if( m_fallbackContainer.IsValid ) { int index = m_fallbackContainer.Id.IndexOf( "Fallback" ): m_templateProperties.AddId( new TemplateProperty( m_fallbackContainer.Id, m_fallbackContainer.Id.Substring( 0, index ), true ) ): m_templateIdManager.RegisterId( m_fallbackContainer.Index, m_fallbackContainer.Id, m_fallbackContainer.Id ): } // Shader body may have been changed to inject inexisting tags like fallback m_templateIdManager.ShaderBody = m_shaderBody: m_propertyTag = new TemplateTagData( m_shaderData.PropertyStartIdx, TemplatesManager.TemplatePropertyTag, true ): m_templateIdManager.RegisterId( m_shaderData.PropertyStartIdx, TemplatesManager.TemplatePropertyTag, TemplatesManager.TemplatePropertyTag ): m_templateProperties.AddId( shaderBody, TemplatesManager.TemplatePropertyTag, true ): Dictionary<string, TemplateShaderPropertyData> duplicatesHelper = new Dictionary<string, TemplateShaderPropertyData>(): TemplateHelperFunctions.CreateShaderPropertiesList( m_shaderData.Properties, ref m_availableShaderProperties, ref duplicatesHelper ): int subShaderCount = m_shaderData.SubShaders.Count: int mainSubShaderIdx = -1: int mainPassIdx = -1: int firstVisibleSubShaderId = -1: int firstVisiblePassId = -1: bool foundMainPass = false: bool foundFirstVisible = false: m_templateIdManager.RegisterTag( TemplatesManager.TemplatePassesEndTag ): m_templateIdManager.RegisterTag( TemplatesManager.TemplateMainPassTag ): for( int i = 0: i < subShaderCount: i++ ) { TemplateSubShader subShader = new TemplateSubShader( i, m_templateIdManager, "SubShader" + i, m_shaderData.SubShaders[ i ], ref duplicatesHelper ): if( subShader.FoundMainPass ) { if( !foundMainPass ) { foundMainPass = true: mainSubShaderIdx = i: mainPassIdx = subShader.MainPass: } } else if( subShader.MainPass > -1 ) { if( !foundFirstVisible ) { foundFirstVisible = true: firstVisibleSubShaderId = i: firstVisiblePassId = subShader.MainPass: } } m_subShaders.Add( subShader ): m_masterNodesRequired += subShader.Passes.Count: } if( !foundMainPass && foundFirstVisible ) { mainSubShaderIdx = firstVisibleSubShaderId: mainPassIdx = firstVisiblePassId: } for( int subShaderIdx = 0: subShaderIdx < subShaderCount: subShaderIdx++ ) { int passCount = m_subShaders[ subShaderIdx ].Passes.Count: for( int passIdx = 0: passIdx < passCount: passIdx++ ) { m_subShaders[ subShaderIdx ].Passes[ passIdx ].IsMainPass = ( mainSubShaderIdx == subShaderIdx && mainPassIdx == passIdx ): } } duplicatesHelper.Clear(): duplicatesHelper = null: m_isSinglePass = ( m_subShaders.Count == 1 && m_subShaders[ 0 ].PassAmount == 1 ): }
void LoadTemplateBody(string guid) { m_guid = guid; string datapath = AssetDatabase.GUIDToAssetPath(guid); string shaderBody = string.Empty; shaderBody = IOUtils.LoadTextFileFromDisk(datapath); shaderBody = shaderBody.Replace("\r\n", "\n"); m_shaderData = TemplateShaderInfoUtil.CreateShaderData(shaderBody); if (m_shaderData == null) { m_isValid = false; return; } m_templateIdManager = new TemplateIdManager(shaderBody); try { int nameBegin = shaderBody.IndexOf(TemplatesManager.TemplateShaderNameBeginTag); if (nameBegin < 0) { // Not a template return; } int nameEnd = shaderBody.IndexOf(TemplatesManager.TemplateFullEndTag, nameBegin); if (nameEnd < 0) { return; } m_shaderBody = shaderBody; int defaultBegin = nameBegin + TemplatesManager.TemplateShaderNameBeginTag.Length; int defaultLength = nameEnd - defaultBegin; m_defaultShaderName = shaderBody.Substring(defaultBegin, defaultLength); int[] nameIdx = m_defaultShaderName.AllIndexesOf("\""); nameIdx[0] += 1; // Ignore the " character from the string m_defaultShaderName = m_defaultShaderName.Substring(nameIdx[0], nameIdx[1] - nameIdx[0]); m_shaderNameId = shaderBody.Substring(nameBegin, nameEnd + TemplatesManager.TemplateFullEndTag.Length - nameBegin); m_templateProperties.AddId(shaderBody, m_shaderNameId, false); m_templateIdManager.RegisterId(nameBegin, m_shaderNameId, m_shaderNameId); shaderBody = shaderBody.Substring(nameEnd + TemplatesManager.TemplateFullEndTag.Length); } catch (Exception e) { Debug.LogException(e); m_isValid = false; } m_propertyTag = new TemplateTagData(m_shaderData.PropertyStartIdx, TemplatesManager.TemplatePropertyTag, true); m_templateIdManager.RegisterId(m_shaderData.PropertyStartIdx, TemplatesManager.TemplatePropertyTag, TemplatesManager.TemplatePropertyTag); m_templateProperties.AddId(shaderBody, TemplatesManager.TemplatePropertyTag, true); Dictionary <string, TemplateShaderPropertyData> duplicatesHelper = new Dictionary <string, TemplateShaderPropertyData>(); TemplateHelperFunctions.CreateShaderPropertiesList(m_shaderData.Properties, ref m_availableShaderProperties, ref duplicatesHelper); int subShaderCount = m_shaderData.SubShaders.Count; int mainSubShaderIdx = -1; int mainPassIdx = -1; int firstVisibleSubShaderId = -1; int firstVisiblePassId = -1; bool foundMainPass = false; bool foundFirstVisible = false; for (int i = 0; i < subShaderCount; i++) { TemplateSubShader subShader = new TemplateSubShader(i, m_templateIdManager, "SubShader" + i, m_shaderData.SubShaders[i], ref duplicatesHelper); if (subShader.FoundMainPass) { if (!foundMainPass) { foundMainPass = true; mainSubShaderIdx = i; mainPassIdx = subShader.MainPass; } } else if (subShader.MainPass > -1) { if (!foundFirstVisible) { foundFirstVisible = true; firstVisibleSubShaderId = i; firstVisiblePassId = subShader.MainPass; } } m_subShaders.Add(subShader); m_masterNodesRequired += subShader.Passes.Count; } if (!foundMainPass && foundFirstVisible) { mainSubShaderIdx = firstVisibleSubShaderId; mainPassIdx = firstVisiblePassId; } for (int subShaderIdx = 0; subShaderIdx < subShaderCount; subShaderIdx++) { int passCount = m_subShaders[subShaderIdx].Passes.Count; for (int passIdx = 0; passIdx < passCount; passIdx++) { m_subShaders[subShaderIdx].Passes[passIdx].IsMainPass = (mainSubShaderIdx == subShaderIdx && mainPassIdx == passIdx); } } duplicatesHelper.Clear(); duplicatesHelper = null; m_isSinglePass = (m_subShaders.Count == 1 && m_subShaders[0].PassAmount == 1); TemplateHelperFunctions.FetchCustomInspector(m_customInspectorContainer, m_shaderBody); if (m_customInspectorContainer.IsValid) { int index = m_customInspectorContainer.Id.IndexOf("CustomEditor"); m_templateProperties.AddId(new TemplateProperty(m_customInspectorContainer.Id, m_customInspectorContainer.Id.Substring(0, index), true)); m_templateIdManager.RegisterId(m_customInspectorContainer.Index, m_customInspectorContainer.Id, m_customInspectorContainer.Id); } }
public void Reload() { if (m_vertexData != null) { m_vertexData.Clear(); } if (m_interpolatorData != null) { m_interpolatorData.Destroy(); } if (m_availableShaderProperties != null) { m_availableShaderProperties.Clear(); } if (m_propertyDict != null) { m_propertyDict.Clear(); } if (m_propertyList != null) { m_propertyList.Clear(); } if (m_inputDataDict != null) { m_inputDataDict.Clear(); } if (m_inputDataList != null) { m_inputDataList.Clear(); } if (m_snippetElementsDict != null) { m_snippetElementsDict.Clear(); } if (m_snippetElementsList != null) { for (int i = 0; i < m_snippetElementsList.Count; i++) { GameObject.DestroyImmediate(m_snippetElementsList[i]); m_snippetElementsList[i] = null; } m_snippetElementsList.Clear(); } string datapath = AssetDatabase.GUIDToAssetPath(m_guid); string body = string.Empty; try { body = IOUtils.LoadTextFileFromDisk(datapath); body = body.Replace("\r\n", "\n"); } catch (Exception e) { Debug.LogException(e); m_isValid = false; } LoadTemplateBody(body); if (m_communityTemplate) { m_name = m_defaultShaderName; } }
void LoadTemplateBody(string guid) { m_guid = guid; string datapath = AssetDatabase.GUIDToAssetPath(guid); string shaderBody = string.Empty; shaderBody = IOUtils.LoadTextFileFromDisk(datapath); shaderBody = shaderBody.Replace("\r\n", "\n"); m_shaderData = TemplateShaderInfoUtil.CreateShaderData(shaderBody); if (m_shaderData == null) { m_isValid = false; return; } m_templateIdManager = new TemplateIdManager(shaderBody); try { int nameBegin = shaderBody.IndexOf(TemplatesManager.TemplateShaderNameBeginTag); if (nameBegin < 0) { // Not a template return; } m_shaderBody = shaderBody; int nameEnd = shaderBody.IndexOf(TemplatesManager.TemplateFullEndTag, nameBegin); int defaultBegin = nameBegin + TemplatesManager.TemplateShaderNameBeginTag.Length; int defaultLength = nameEnd - defaultBegin; m_defaultShaderName = shaderBody.Substring(defaultBegin, defaultLength); int[] nameIdx = m_defaultShaderName.AllIndexesOf("\""); nameIdx[0] += 1; // Ignore the " character from the string m_defaultShaderName = m_defaultShaderName.Substring(nameIdx[0], nameIdx[1] - nameIdx[0]); m_shaderNameId = shaderBody.Substring(nameBegin, nameEnd + TemplatesManager.TemplateFullEndTag.Length - nameBegin); m_templateProperties.AddId(shaderBody, m_shaderNameId, false); m_templateIdManager.RegisterId(nameBegin, m_shaderNameId, m_shaderNameId); } catch (Exception e) { Debug.LogException(e); m_isValid = false; } m_propertyTag = new TemplateTagData(m_shaderData.PropertyStartIdx, TemplatesManager.TemplatePropertyTag, true); m_templateIdManager.RegisterId(m_shaderData.PropertyStartIdx, TemplatesManager.TemplatePropertyTag, TemplatesManager.TemplatePropertyTag); m_templateProperties.AddId(shaderBody, TemplatesManager.TemplatePropertyTag, true); Dictionary <string, TemplateShaderPropertyData> duplicatesHelper = new Dictionary <string, TemplateShaderPropertyData>(); TemplateHelperFunctions.CreateShaderPropertiesList(m_shaderData.Properties, ref m_availableShaderProperties, ref duplicatesHelper); int subShaderCount = m_shaderData.SubShaders.Count; for (int i = 0; i < subShaderCount; i++) { TemplateSubShader subShader = new TemplateSubShader(i, m_templateIdManager, "SubShader" + i, m_shaderData.SubShaders[i], ref duplicatesHelper); m_subShaders.Add(subShader); m_masterNodesRequired += subShader.Passes.Count; } duplicatesHelper.Clear(); duplicatesHelper = null; m_isSinglePass = (m_subShaders.Count == 1 && m_subShaders[0].PassAmount == 1); }