public bool FillFragmentInstructions(int subShaderId, int passId, params string[] values) { TemplateFunctionData fragmentFunctionData = SubShaders[subShaderId].Passes[passId].FragmentFunctionData; if (fragmentFunctionData != null && !string.IsNullOrEmpty(fragmentFunctionData.Id)) { string body = string.Empty; bool isValid = FillTemplateBody(subShaderId, passId, fragmentFunctionData.Id, ref body, values); SetPassData(TemplateModuleDataType.PassFragmentFunction, subShaderId, passId, body); return(isValid); } if (values.Length > 0) { UIUtils.ShowMessage("Attemping to add fragment instructions on a template with no assigned vertex code area", MessageSeverity.Error); return(false); } return(true); }
public void UpdateDataCollectorForTemplates(ref MasterNodeDataCollector dataCollector, ref List <string> vertexInstructions) { #if UNITY_2018_1_OR_NEWER if (m_enable) { for (int i = 0; i < AdditionalUsePasses.Length; i++) { dataCollector.AddUsePass(AdditionalUsePasses[i], false); } for (int i = 0; i < InstancedPragmas.Length; i++) { dataCollector.AddToPragmas(-1, InstancedPragmas[i]); } if (dataCollector.IsSRP) { TemplateFunctionData functionData = dataCollector.TemplateDataCollectorInstance.CurrentTemplateData.VertexFunctionData; string uvCoord = dataCollector.TemplateDataCollectorInstance.GetUV(0, MasterNodePortCategory.Vertex); string vertexNormal = dataCollector.TemplateDataCollectorInstance.GetVertexNormal(PrecisionType.Float, false, MasterNodePortCategory.Vertex); string vertexTangent = dataCollector.TemplateDataCollectorInstance.GetVertexTangent(WirePortDataType.FLOAT4, PrecisionType.Float, false, MasterNodePortCategory.Vertex); string vertexPos = dataCollector.TemplateDataCollectorInstance.GetVertexPosition(WirePortDataType.OBJECT, PrecisionType.Float, false, MasterNodePortCategory.Vertex); string functionHeader = string.Format(ApplyMeshModificationFunctionSRP[0], functionData.InVarType, functionData.InVarName); string functionBody = functionHeader + ApplyMeshModificationFunctionSRP[1] + ApplyMeshModificationFunctionSRP[2] + string.Format(ApplyMeshModificationFunctionSRP[3], vertexPos) + ApplyMeshModificationFunctionSRP[4] + ApplyMeshModificationFunctionSRP[5] + ApplyMeshModificationFunctionSRP[6] + string.Format(ApplyMeshModificationFunctionSRP[7], vertexPos) + string.Format(ApplyMeshModificationFunctionSRP[8], vertexPos) + ApplyMeshModificationFunctionSRP[9] + string.Format(ApplyMeshModificationFunctionSRP[10], vertexNormal) + ApplyMeshModificationFunctionSRP[11] + ApplyMeshModificationFunctionSRP[12] + ApplyMeshModificationFunctionSRP[13] + string.Format(ApplyMeshModificationFunctionSRP[14], uvCoord) + ApplyMeshModificationFunctionSRP[15] + string.Format(ApplyMeshModificationFunctionSRP[16], uvCoord) + ApplyMeshModificationFunctionSRP[17] + ApplyMeshModificationFunctionSRP[18] + ApplyMeshModificationFunctionSRP[19] + ApplyMeshModificationFunctionSRP[20] + string.Format(ApplyMeshModificationFunctionSRP[21], vertexTangent, vertexNormal) + string.Format(ApplyMeshModificationFunctionSRP[22], vertexTangent) + ApplyMeshModificationFunctionSRP[23] + string.Format(ApplyMeshModificationFunctionSRP[24], functionData.InVarName) + ApplyMeshModificationFunctionSRP[25]; dataCollector.AddFunction(functionHeader, functionBody); for (int i = 0; i < InstancedGlobalsSRP.Length; i++) { dataCollector.AddToUniforms(-1, InstancedGlobalsSRP[i]); } string vertexVarName = dataCollector.TemplateDataCollectorInstance.CurrentTemplateData.VertexFunctionData.InVarName; vertexInstructions.Insert(0, string.Format(ApplyMeshModificationInstruction, vertexVarName)); } else { TemplateFunctionData functionData = dataCollector.TemplateDataCollectorInstance.CurrentTemplateData.VertexFunctionData; string uvCoord = dataCollector.TemplateDataCollectorInstance.GetUV(0, MasterNodePortCategory.Vertex); string vertexNormal = dataCollector.TemplateDataCollectorInstance.GetVertexNormal(PrecisionType.Float, false, MasterNodePortCategory.Vertex); string vertexPos = dataCollector.TemplateDataCollectorInstance.GetVertexPosition(WirePortDataType.OBJECT, PrecisionType.Float, false, MasterNodePortCategory.Vertex); string functionHeader = string.Format(ApplyMeshModificationFunctionDefaultTemplate[0], functionData.InVarType, functionData.InVarName); string functionBody = functionHeader + ApplyMeshModificationFunctionDefaultTemplate[1] + ApplyMeshModificationFunctionDefaultTemplate[2] + string.Format(ApplyMeshModificationFunctionDefaultTemplate[3], vertexPos) + ApplyMeshModificationFunctionDefaultTemplate[4] + ApplyMeshModificationFunctionDefaultTemplate[5] + string.Format(ApplyMeshModificationFunctionDefaultTemplate[6], uvCoord) + string.Format(ApplyMeshModificationFunctionDefaultTemplate[7], uvCoord) + string.Format(ApplyMeshModificationFunctionDefaultTemplate[8], vertexPos) + string.Format(ApplyMeshModificationFunctionDefaultTemplate[9], vertexPos) + string.Format(ApplyMeshModificationFunctionDefaultTemplate[10], vertexNormal, uvCoord) + ApplyMeshModificationFunctionDefaultTemplate[11] + string.Format(ApplyMeshModificationFunctionDefaultTemplate[12], functionData.InVarName) + ApplyMeshModificationFunctionDefaultTemplate[13]; dataCollector.AddFunction(functionHeader, functionBody); for (int i = 0; i < InstancedGlobalsDefault.Length; i++) { dataCollector.AddToUniforms(-1, InstancedGlobalsDefault[i]); } string vertexVarName = dataCollector.TemplateDataCollectorInstance.CurrentTemplateData.VertexFunctionData.InVarName; vertexInstructions.Insert(0, string.Format(ApplyMeshModificationInstruction, vertexVarName)); } } #endif }
public void Destroy() { m_passNameContainer = null; #if CUSTOM_OPTIONS_AVAILABLE m_customOptionsContainer = null; #endif if (m_templateProperties != null) { m_templateProperties.Destroy(); } m_templateProperties = null; if (m_modules != null) { m_modules.Destroy(); } m_modules = null; if (m_inputDataList != null) { m_inputDataList.Clear(); } m_inputDataList = null; if (m_inputDataDict != null) { m_inputDataDict.Clear(); } m_inputDataDict = null; m_vertexFunctionData = null; m_fragmentFunctionData = null; if (m_vertexDataContainer != null) { m_vertexDataContainer.Destroy(); } m_vertexDataContainer = null; if (m_interpolatorDataContainer != null) { m_interpolatorDataContainer.Destroy(); } if (m_localVarsList != null) { m_localVarsList.Clear(); m_localVarsList = null; } m_interpolatorDataContainer = null; if (m_availableShaderGlobals != null) { m_availableShaderGlobals.Clear(); } m_availableShaderGlobals = null; }