Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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
        }
Ejemplo n.º 3
0
        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;
        }