public float GetValue(Material material, RenderStatePropertyType type)
            {
                if (!states.ContainsKey(material.shader))
                {
                    CacheShaderRenderState(material.shader);
                }

                RenderState         state    = states[material.shader];
                RenderStateProperty property = state.properties[type - RenderStatePropertyType.Begin];

                if (string.IsNullOrEmpty(property.propertyName))
                {
                    return(property.defaultValue);
                }

                return(material.GetFloat(property.propertyName));
            }
            public RenderState()
            {
                RenderStateProperty cull = new RenderStateProperty()
                {
                    name = "Cull", defaultValue = (float)CullMode.Back, parse = RenderStateProperty.ParseValueOfCull
                };

                properties[RenderStatePropertyType.Cull - RenderStatePropertyType.Begin] = cull;

                RenderStateProperty zwrite = new RenderStateProperty()
                {
                    name = "ZWrite", defaultValue = (float)ZWrite.On, parse = RenderStateProperty.ParseValueOfZWrite
                };

                properties[RenderStatePropertyType.ZWrite - RenderStatePropertyType.Begin] = zwrite;

                RenderStateProperty ztest = new RenderStateProperty()
                {
                    name = "ZTest", defaultValue = (float)CompareFunction.LessEqual, parse = RenderStateProperty.ParseValueOfZTest
                };

                properties[RenderStatePropertyType.ZTest - RenderStatePropertyType.Begin] = ztest;
            }