GetPropertyCount() private method

private GetPropertyCount ( Shader s ) : int
s UnityEngine.Shader
return int
        public override void OnGUI(Rect position, SerializedProperty prop, GUIContent content)
        {
            var att = (ShaderPropertyPopupAttribute)attribute;

            var directable = prop.serializedObject.targetObject as IDirectable;

            if (directable != null)
            {
                var actor = directable.actor;
                if (actor != null)
                {
                    var renderer = actor.GetComponent <Renderer>();
                    if (renderer != null)
                    {
                        var material = renderer.sharedMaterial;
                        if (material != null)
                        {
                            var shader  = material.shader;
                            var options = new List <string>();
                            for (var i = 0; i < ShaderUtil.GetPropertyCount(shader); i++)
                            {
                                if (ShaderUtil.IsShaderPropertyHidden(shader, i))
                                {
                                    continue;
                                }

                                if (att.propertyType != null)
                                {
                                    var type = ShaderUtil.GetPropertyType(shader, i);
                                    if (att.propertyType == typeof(Color) && type != ShaderUtil.ShaderPropertyType.Color)
                                    {
                                        continue;
                                    }
                                    if (att.propertyType == typeof(Texture) && type != ShaderUtil.ShaderPropertyType.TexEnv)
                                    {
                                        continue;
                                    }
                                    if (att.propertyType == typeof(float) && type != ShaderUtil.ShaderPropertyType.Float && type != ShaderUtil.ShaderPropertyType.Range)
                                    {
                                        continue;
                                    }
                                    if ((att.propertyType == typeof(Vector2) || att.propertyType == typeof(Vector4)) && type != ShaderUtil.ShaderPropertyType.Vector)
                                    {
                                        continue;
                                    }
                                }

                                options.Add(ShaderUtil.GetPropertyName(shader, i));
                            }

                            prop.stringValue = EditorTools.CleanPopup <string>(content.text, prop.stringValue, options);
                            return;
                        }
                    }
                }
            }

            prop.stringValue = EditorGUILayout.TextField(content.text, prop.stringValue);
        }
        public override bool HasModified()
        {
            if (base.HasModified())
            {
                return(true);
            }

            var importer = target as ShaderImporter;

            if (importer == null)
            {
                return(false);
            }

            var shader = importer.GetShader();

            if (shader == null)
            {
                return(false);
            }

            var propertyCount = ShaderUtil.GetPropertyCount(shader);

            for (var i = 0; i < propertyCount; i++)
            {
                var propertyName = ShaderUtil.GetPropertyName(shader, i);
                for (var k = 0; k < m_Properties.Count; k++)
                {
                    if (m_Properties[k].propertyName == propertyName)
                    {
                        var tex = m_Properties[k].modifiable ? importer.GetDefaultTexture(propertyName) : importer.GetNonModifiableTexture(propertyName);
                        if (m_Properties[k].texture != tex)
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
示例#3
0
        private static int GetMaterialPropertyPopupHash(UnityEngine.Object[] objects)
        {
            int num = 0;

            for (int i = 0; i < objects.Length; i++)
            {
                VideoPlayer videoPlayer = (VideoPlayer)objects[i];
                if (videoPlayer)
                {
                    Renderer targetRenderer = VideoPlayerEditor.GetTargetRenderer(videoPlayer);
                    if (targetRenderer)
                    {
                        num ^= videoPlayer.targetMaterialProperty.GetHashCode();
                        Material[] sharedMaterials = targetRenderer.sharedMaterials;
                        for (int j = 0; j < sharedMaterials.Length; j++)
                        {
                            Material material = sharedMaterials[j];
                            if (material)
                            {
                                num ^= material.name.GetHashCode();
                                int k             = 0;
                                int propertyCount = ShaderUtil.GetPropertyCount(material.shader);
                                while (k < propertyCount)
                                {
                                    if (ShaderUtil.GetPropertyType(material.shader, k) == ShaderUtil.ShaderPropertyType.TexEnv)
                                    {
                                        num ^= ShaderUtil.GetPropertyName(material.shader, k).GetHashCode();
                                    }
                                    k++;
                                }
                            }
                        }
                    }
                }
            }
            return(num);
        }
示例#4
0
        private string GenerateMultiMaterialinformation()
        {
            string result;

            if (base.targets.Count <UnityEngine.Object>() > 1)
            {
                result = "";
            }
            else
            {
                VideoPlayer videoPlayer = base.target as VideoPlayer;
                if (!videoPlayer)
                {
                    result = "";
                }
                else
                {
                    Renderer targetRenderer = VideoPlayerEditor.GetTargetRenderer(videoPlayer);
                    if (!targetRenderer)
                    {
                        result = "";
                    }
                    else
                    {
                        Material[] sharedMaterials = targetRenderer.sharedMaterials;
                        if (sharedMaterials == null || sharedMaterials.Count <Material>() <= 1)
                        {
                            result = "";
                        }
                        else
                        {
                            List <string> list  = new List <string>();
                            Material[]    array = sharedMaterials;
                            for (int i = 0; i < array.Length; i++)
                            {
                                Material material = array[i];
                                if (material)
                                {
                                    int j             = 0;
                                    int propertyCount = ShaderUtil.GetPropertyCount(material.shader);
                                    while (j < propertyCount)
                                    {
                                        if (ShaderUtil.GetPropertyType(material.shader, j) == ShaderUtil.ShaderPropertyType.TexEnv && ShaderUtil.GetPropertyName(material.shader, j) == this.m_TargetMaterialProperty.stringValue)
                                        {
                                            list.Add(material.name);
                                            break;
                                        }
                                        j++;
                                    }
                                }
                            }
                            if (list.Count <string>() == sharedMaterials.Count <Material>())
                            {
                                result = VideoPlayerEditor.s_Styles.texPropInAllMaterialsHelp;
                            }
                            else
                            {
                                result = string.Format(VideoPlayerEditor.s_Styles.texPropInSomeMaterialsHelp, list.Count <string>(), sharedMaterials.Count <Material>()) + ": " + string.Join(", ", list.ToArray());
                            }
                        }
                    }
                }
            }
            return(result);
        }