예제 #1
0
        void ProcessStep()
        {
            switch (State)
            {
            case States.None:
                Table.ToOrigin();
                State           = States.MovingToOrigin;
                TBProgress.Text = GreenResources.TurntableStepCounterStatusMovingToOrigin;
                break;

            case States.MovingToOrigin:
                Table.Rotate(PremovementSteps);
                State           = States.Premovement;
                TBProgress.Text = GreenResources.TurntableStepCounterStatusPremovement;
                break;

            case States.Premovement:
                Table.Rotate();
                Table.StopAtMagneticSwitch = true;
                State           = States.WaitForSwitch;
                TBProgress.Text = GreenResources.TurntableStepCounterStatusWaitingForSwitch;
                break;

            case States.WaitForSwitch:
                Steps       = Table.PositionInSteps;
                TotalSteps += Steps;
                Steps       = 0;
                Passes++;
                RPasses.Text               = Passes.ToString();
                AverageSteps               = TotalSteps / Passes;
                RStepsPerRotation.Text     = AverageSteps.ToString();
                Table.StopAtMagneticSwitch = false;
                goto case States.None;
            }
        }
예제 #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DepthOfFieldEffect"/> class.
 /// </summary>
 public DepthOfFieldEffect(GraphicsDevice graphics)
 {
     Material = combine = new DepthOfFieldMaterial(graphics);
     Passes.Add(new PostEffectChain(TextureUsage.Blur,
                                    depthScaleEffect = new PostEffect()
     {
         Material = depthScale = new DepthOfFieldMaterial(graphics)
         {
             IsDownScale = true
         }, RenderTargetScale = 0.5f
     },
                                    scaleEffect = new PostEffect()
     {
         Material = new ScaleMaterial(graphics), RenderTargetScale = 0.5f, Enabled = false
     },
                                    blur = new BlurEffect(graphics)
     {
         DepthBufferEnabled = true
     },
                                    new PostEffect()
     {
         Material = new ScaleMaterial(graphics), RenderTargetScale = 2.0f
     }
                                    ));
 }
예제 #3
0
 public Passes(Passes other) : this(OgrePINVOKE.new_Passes__SWIG_1(Passes.getCPtr(other)), true)
 {
     if (OgrePINVOKE.SWIGPendingException.Pending)
     {
         throw OgrePINVOKE.SWIGPendingException.Retrieve();
     }
 }
예제 #4
0
        public List <Passes> SelectPassesByVisitorType(int currentUserType, int deploymentId, int visitorTypeId)
        {
            MySqlParameter[] parameters = new MySqlParameter[] {
                new MySqlParameter("p_deploymentId", deploymentId),
                new MySqlParameter("currentUserType", currentUserType),
                new MySqlParameter("p_visitorTypeId", visitorTypeId)
            };
            List <Passes> passesCol = new List <Passes>();
            DataTable     dt        = MySQLDB.MySQLDBHelper.ExecuteSelectCommand("GetPassesByVisitorType", CommandType.StoredProcedure, parameters);
            Passes        objPass   = null;

            foreach (DataRow dr in dt.Rows)
            {
                objPass               = new Passes();
                objPass.PassId        = Convert.ToInt32(dr["PassId"].ToString());
                objPass.PassName      = dr["PassName"].ToString();
                objPass.PassStatus    = dr["PassStatus"].ToString();
                objPass.VisitortypeId = Convert.ToInt32(dr["VisitortypeId"].ToString());
                objPass.DeploymentId  = Convert.ToInt32(dr["DeploymentId"].ToString());
                passesCol.Add(objPass);
            }
            dt.Clear();
            dt.Dispose();
            return(passesCol);
        }
예제 #5
0
 public PassesEnumerator(Passes collection)
 {
     collectionRef = collection;
     currentIndex  = -1;
     currentObject = null;
     currentSize   = collectionRef.Count;
 }
예제 #6
0
 public void AddRange(Passes values)
 {
     OgrePINVOKE.Passes_AddRange(swigCPtr, Passes.getCPtr(values));
     if (OgrePINVOKE.SWIGPendingException.Pending)
     {
         throw OgrePINVOKE.SWIGPendingException.Retrieve();
     }
 }
예제 #7
0
 public void SetRange(int index, Passes values)
 {
     OgrePINVOKE.Passes_SetRange(swigCPtr, index, Passes.getCPtr(values));
     if (OgrePINVOKE.SWIGPendingException.Pending)
     {
         throw OgrePINVOKE.SWIGPendingException.Retrieve();
     }
 }
예제 #8
0
        /// <summary>
        /// Adds a new pass to the builder.
        /// </summary>
        public void AddPass(T pass)
        {
            if (pass is TranslationUnitPass)
            {
                (pass as TranslationUnitPass).Driver = Driver;
            }

            Passes.Add(pass);
        }
        public IList <Passes> GetPassTypeList()
        {
            IList <Passes> passTypeList = new List <Passes>();

            sqlhelper_obj = new SqlHelper();
            try
            {
                using (SqlConnection sqlconn_obj = new SqlConnection())
                {
                    sqlconn_obj.ConnectionString = sqlhelper_obj.GetConnectionSrting();

                    using (SqlCommand sqlcmd_getpassType_obj = new SqlCommand("PARK_PROC_GetAllPassTypes", sqlconn_obj))
                    {
                        sqlcmd_getpassType_obj.CommandType    = CommandType.StoredProcedure;
                        sqlcmd_getpassType_obj.CommandTimeout = 0;
                        DataSet ds;
                        using (SqlDataAdapter da = new SqlDataAdapter(sqlcmd_getpassType_obj))
                        {
                            ds = new DataSet();
                            da.Fill(ds);
                        }
                        DataTable dt = ds.Tables[0];

                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            Passes passType_obj = new Passes();
                            passType_obj.PassPriceID   = Convert.ToInt32(dt.Rows[i]["PassPriceID"]);
                            passType_obj.PassTypeID    = Convert.ToInt32(dt.Rows[i]["PassTypeID"]);
                            passType_obj.PassTypeName  = Convert.ToString(dt.Rows[i]["PassTypeName"]);
                            passType_obj.PassCode      = Convert.ToString(dt.Rows[i]["PassCode"]);
                            passType_obj.PassName      = Convert.ToString(dt.Rows[i]["PassName"]);
                            passType_obj.StationAccess = Convert.ToString(dt.Rows[i]["StationAccess"]);
                            passType_obj.Duration      = Convert.ToString(dt.Rows[i]["Duration"]);
                            //passType_obj.StartDate = Convert.ToString(dt.Rows[i]["StartDate"]);
                            //passType_obj.EndDate = Convert.ToString(dt.Rows[i]["EndDate"]);
                            passType_obj.StartDate = Convert.ToDateTime(dt.Rows[i]["StartDate"]);
                            passType_obj.EndDate   = Convert.ToDateTime(dt.Rows[i]["EndDate"]);
                            //passType_obj.NFCApplicable = Convert.ToBoolean(dt.Rows[i]["NFCApplicable"]);
                            //passType_obj.NFCCardPrice = Convert.ToString(dt.Rows[i]["NFCCardPrice"]);
                            passType_obj.VehicleTypeID   = Convert.ToInt32(dt.Rows[i]["VehicleTypeID"]);
                            passType_obj.VehicleTypeName = Convert.ToString(dt.Rows[i]["VehicleTypeName"]);
                            //passType_obj.StartRange = Convert.ToInt32(dt.Rows[i]["StartRange"]);
                            //passType_obj.EndRange = Convert.ToInt32(dt.Rows[i]["EndRange"]);
                            passType_obj.IsActive  = Convert.ToBoolean(dt.Rows[i]["IsActive"]);
                            passType_obj.UpdatedOn = dt.Rows[i]["UpdatedOn"] == DBNull.Value ? Convert.ToDateTime(null) : Convert.ToDateTime(dt.Rows[i]["UpdatedOn"]);
                            passType_obj.Price     = Convert.ToDecimal(dt.Rows[i]["Price"]);
                            passTypeList.Add(passType_obj);
                        }
                    }
                }
                return(passTypeList);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #10
0
 private void Draw(RenderTargetIdentifier from, RenderTargetIdentifier to, Passes pass)
 {
     buffer.SetGlobalTexture(fxSourceId, from);
     buffer.SetRenderTarget(to, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.Store);
     buffer.DrawProcedural(
         Matrix4x4.identity, settings.Material, (int)pass,
         MeshTopology.Triangles, 3
         );
 }
예제 #11
0
        public Passes getPasses()
        {
            Passes ret = new Passes(OgrePINVOKE.Technique_getPasses(swigCPtr), false);

            if (OgrePINVOKE.SWIGPendingException.Pending)
            {
                throw OgrePINVOKE.SWIGPendingException.Retrieve();
            }
            return(ret);
        }
        public List <Passes> ViewPassType(int PassPriceID)
        {
            sqlhelper_obj = new SqlHelper();
            List <Passes> passtype_List = new List <Passes>();

            try
            {
                using (SqlConnection sqlconn_obj = new SqlConnection())
                {
                    sqlconn_obj.ConnectionString = sqlhelper_obj.GetConnectionSrting();
                    using (SqlCommand sqlcmd_details_obj = new SqlCommand("PARK_PROC_ViewPassType", sqlconn_obj))
                    {
                        sqlcmd_details_obj.CommandType    = CommandType.StoredProcedure;
                        sqlcmd_details_obj.CommandTimeout = 0;
                        sqlcmd_details_obj.Parameters.AddWithValue("@PassPriceID", PassPriceID);
                        DataSet ds;
                        using (SqlDataAdapter sql_dp = new SqlDataAdapter(sqlcmd_details_obj))
                        {
                            ds = new DataSet();
                            sql_dp.Fill(ds);
                        }
                        DataTable dt = ds.Tables[0];
                        if (dt.Rows.Count > 0)
                        {
                            DataRow row          = dt.Rows[0];
                            Passes  passtype_obj = new Passes();
                            passtype_obj.PassPriceID   = Convert.ToInt32(row["PassPriceID"]);
                            passtype_obj.PassTypeID    = Convert.ToInt32(row["PassTypeID"]);
                            passtype_obj.PassCode      = Convert.ToString(row["PassCode"]);
                            passtype_obj.PassName      = Convert.ToString(row["PassName"]);
                            passtype_obj.StationAccess = Convert.ToString(row["StationAccess"]);
                            passtype_obj.Duration      = Convert.ToString(row["Duration"]);
                            passtype_obj.StartDate     = Convert.ToDateTime(row["StartDate"]);
                            passtype_obj.EndDate       = Convert.ToDateTime(row["EndDate"]);
                            //passtype_obj.StartDate = Convert.ToString(row["StartDate"]);
                            //passtype_obj.EndDate = Convert.ToString(row["EndDate"]);

                            // passtype_obj.NFCApplicable = Convert.ToBoolean(row["NFCApplicable"]);
                            // passtype_obj.NFCCardPrice = Convert.ToString(row["NFCCardPrice"]);
                            passtype_obj.VehicleTypeID   = Convert.ToInt32(row["VehicleTypeID"]);
                            passtype_obj.Price           = row["Price"] == DBNull.Value ? 0 : Convert.ToDecimal(row["Price"]);
                            passtype_obj.PassDescription = Convert.ToString(row["PassDescription"]);
                            passtype_obj.IsActive        = Convert.ToBoolean(row["IsActive"]);
                            passtype_List.Add(passtype_obj);
                        }
                    }
                }
                return(passtype_List);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #13
0
        public Passes GetRange(int index, int count)
        {
            global::System.IntPtr cPtr = OgrePINVOKE.Passes_GetRange(swigCPtr, index, count);
            Passes ret = (cPtr == global::System.IntPtr.Zero) ? null : new Passes(cPtr, true);

            if (OgrePINVOKE.SWIGPendingException.Pending)
            {
                throw OgrePINVOKE.SWIGPendingException.Retrieve();
            }
            return(ret);
        }
예제 #14
0
        public static Passes Repeat(Pass value, int count)
        {
            global::System.IntPtr cPtr = OgrePINVOKE.Passes_Repeat(Pass.getCPtr(value), count);
            Passes ret = (cPtr == global::System.IntPtr.Zero) ? null : new Passes(cPtr, true);

            if (OgrePINVOKE.SWIGPendingException.Pending)
            {
                throw OgrePINVOKE.SWIGPendingException.Retrieve();
            }
            return(ret);
        }
예제 #15
0
 public int UpadatePasses(Passes p_Passes)
 {
     MySqlParameter[] parameters = new MySqlParameter[] {
         new MySqlParameter("p_PassId", p_Passes.PassId),
         new MySqlParameter("p_PassName", p_Passes.PassName),
         new MySqlParameter("p_PassStatus", p_Passes.PassStatus),
         new MySqlParameter("p_VisitortypeId", p_Passes.VisitortypeId),
         new MySqlParameter("p_DeploymentId", p_Passes.DeploymentId)
     };
     return(MySQLDB.MySQLDBHelper.ExecuteNonQuery("UpdatePass", CommandType.StoredProcedure, parameters));
 }
예제 #16
0
 public override void DumpBody(XmlWriter writer)
 {
     writer.WriteElementString("color", Color.ToHtmlHex());
     writer.WriteElementString("blur-x", BlurX.ToString());
     writer.WriteElementString("blur-y", BlurY.ToString());
     writer.WriteElementString("strength", Strength.ToString());
     writer.WriteElementString("inner", Inner.ToString());
     writer.WriteElementString("knockout", Knockout.ToString());
     writer.WriteElementString("composite-source", CompositeSource.ToString());
     writer.WriteElementString("passes", Passes.ToString());
 }
예제 #17
0
        public int InsertPasses(Passes p_Passes)
        {//p_PassName, p_PassStatus, , p_PassStatus, p_VisitortypeId, p_DeploymentId
            int result = 0;

            MySqlParameter[] parameters = new MySqlParameter[] {
                new MySqlParameter("p_PassName", p_Passes.PassName),
                new MySqlParameter("p_PassStatus", p_Passes.PassStatus),
                new MySqlParameter("p_VisitortypeId", p_Passes.VisitortypeId),
                new MySqlParameter("p_DeploymentId", p_Passes.DeploymentId),
                new MySqlParameter("p_result", MySqlDbType.Int32, 2, ParameterDirection.Output, false, 1, 1, "Out", DataRowVersion.Default, result)
            };
            return(MySQLDB.MySQLDBHelper.ExecuteNonQuery("AddPass", CommandType.StoredProcedure, parameters));
        }
        public JsonResult SavePassType(Passes PassTypeData)
        {
            string success = "";

            try
            {
                success = passTypeDAL_obj.InsertAndUpdatePassType(PassTypeData, Convert.ToString(Session["UserID"]));
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(Json(success, JsonRequestBehavior.AllowGet));
        }
예제 #19
0
 public virtual Pass GetPassToRefund()
 {
     if (Passes.Any(x => x.IsValid()))
     {
         return(Passes.Where(x => x.IsValid())
                .OrderBy(x => x.EndDate)
                .FirstOrDefault());
     }
     else
     {
         return(Passes.OrderByDescending(x => x.EndDate)
                .FirstOrDefault());
     }
 }
예제 #20
0
 /// <summary>
 /// Initializes a new instance of the <see cref="HighDynamicRangeEffect"/> class.
 /// </summary>
 public HighDynamicRangeEffect(GraphicsDevice graphics)
 {
     Material = toneMapping = new ToneMappingMaterial(graphics);
     Passes.Add(new PostEffectChain(TextureUsage.Bloom,
                                    new PostEffect()
     {
         Material = threshold = new ThresholdMaterial(graphics), RenderTargetScale = 0.5f, SurfaceFormat = SurfaceFormat.Color
     },
                                    blur = new BlurEffect(graphics),
                                    new PostEffect()
     {
         Material = new ScaleMaterial(graphics), RenderTargetScale = 2.0f
     }
                                    ));
     Passes.Add(luminanceChain = new LuminanceChain(graphics));
 }
예제 #21
0
 public void SetMaterialSettings(MaterialEffect material, MeshMaterialLibrary.RenderType renderType)
 {
     if (renderType == MeshMaterialLibrary.RenderType.ShadowOmnidirectional)
     {
         //Check if we have a mask texture
         if (material.HasMask)
         {
             _pass = Passes.OmnidirectionalAlpha;
             _MaskTexture.SetValue(material.Mask);
         }
         else
         {
             _pass = Passes.Omnidirectional;
         }
     }
 }
예제 #22
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BloomEffect"/> class.
 /// </summary>
 public BloomEffect(GraphicsDevice graphics)
 {
     Material = bloom = new BloomMaterial(graphics);
     Passes.Add(new PostEffectChain());
     Passes.Add(new PostEffectChain(TextureUsage.Bloom,
                                    new PostEffect()
     {
         Material = threshold = new ThresholdMaterial(graphics), RenderTargetScale = 0.5f, SurfaceFormat = SurfaceFormat.Color
     },
                                    blur = new BlurEffect(graphics),
                                    new PostEffect()
     {
         Material = new ScaleMaterial(graphics), RenderTargetScale = 2.0f
     }
                                    ));
 }
예제 #23
0
        public override string GetRequestUrl()
        {
            var sb = new StringBuilder(Domain);

            sb.Append("iss-pass.json?");

            if (Latitude < -80 || Latitude > 80)
            {
                throw new Exception("Latitude must be between -80 and 80 degrees");
            }

            sb.Append("lat=");
            sb.Append(Latitude.ToString());

            if (Longitude < -180 || Longitude > 180)
            {
                throw new Exception("Longitude must be between -180 and 180 degrees");
            }

            sb.Append("&lon=");
            sb.Append(Longitude.ToString());

            if (Altitude != null)
            {
                if (Altitude < 0 || Altitude > 10000)
                {
                    throw new Exception("Altitude must be between 0 and 10000 meters");
                }

                sb.Append("&alt=");
                sb.Append(Altitude.ToString());
            }

            if (Passes != null)
            {
                if (Passes < 1 || Passes > 100)
                {
                    throw new Exception("Number of passes must be between 1 and 100");
                }

                sb.Append("&n=");
                sb.Append(Passes.ToString());
            }

            return(sb.ToString());
        }
예제 #24
0
        private void SortPasses()
        {
            Passes.Sort((e1, e2) =>
            {
                if (e1.BlendMode == 0 && e2.BlendMode != 0)
                {
                    return(-1);
                }

                if (e1.BlendMode != 0 && e2.BlendMode == 0)
                {
                    return(1);
                }

                if (e1.BlendMode == e2.BlendMode && e1.BlendMode == 0)
                {
                    return(e1.TexUnitNumber.CompareTo(e2.TexUnitNumber));
                }

                if (e1.BlendMode == 2 && e2.BlendMode != 2)
                {
                    return(-1);
                }

                if (e2.BlendMode == 2 && e1.BlendMode != 2)
                {
                    return(1);
                }

                var is1Additive = e1.BlendMode == 1 || e1.BlendMode == 6 || e1.BlendMode == 3;
                var is2Additive = e2.BlendMode == 1 || e2.BlendMode == 6 || e2.BlendMode == 3;

                if (is1Additive && !is2Additive)
                {
                    return(-1);
                }

                if (is2Additive && !is1Additive)
                {
                    return(1);
                }

                return(e1.TexUnitNumber.CompareTo(e2.TexUnitNumber));
            });
        }
예제 #25
0
 public PythonParserDetails(Workspaces.Document item)
     : base(item)
 {
     Passes.Add(() =>
     {
         return(false);
     });
     Passes.Add(() =>
     {
         ParseTreeWalker.Default.Walk(new Pass1Listener(this), ParseTree);
         return(false);
     });
     Passes.Add(() =>
     {
         ParseTreeWalker.Default.Walk(new Pass2Listener(this), ParseTree);
         return(false);
     });
 }
예제 #26
0
        public static Passes GetUser(int passID)
        {
            Passes passes = new Passes();

            SqlConnection conn = new SqlConnection(connectionString);

            conn.Open();
            SqlCommand command2 = new SqlCommand(
                String.Format("SELECT * FROM [dbo].[Passes] pass WHERE pass.PassID = '{0}'", passID),
                conn);

            SqlDataReader reader = command2.ExecuteReader();

            while (reader.Read())
            {
                passes.PassID = reader.GetInt32(0);
            }

            conn.Close();
            return(passes);
        }
        public ShaderGeneratorContext(ScriptHelper <TranslatedMaterialGraph.NodeInfo> graph, string name,
                                      Connection previewPin = null)
        {
            Name = name;

            Parameters = graph.Nodes.Where(_ => NodeTypes.IsParameter(_.Type)).ToList();
            Samplers   = graph.Nodes.Where(_ => NodeTypes.IsSampler(_.Type)).ToList();

            TranslatedMaterialGraph.Preprocess(graph, previewPin);

            var finalColorByPass = graph.Nodes.Where(_ => NodeTypes.IsFinalColor(_.Type)).ToLookup(_ => _.Value);

            foreach (var pass in finalColorByPass)
            {
                var passGraph = graph.Clone();
                passGraph.Nodes.RemoveWhere(_ => NodeTypes.IsFinalColor(_.Type) && _.Value != pass.Key);
                Passes.Add(new Pass {
                    Key = pass.Key, Graph = TranslatedMaterialGraph.Translate(passGraph)
                });
            }
        }
        public IList <Passes> GetListofActivePassesByVehicleID(string VehicleTypeIDs)
        {
            IList <Passes> passList = new List <Passes>();

            sqlhelper_obj = new SqlHelper();
            try
            {
                using (SqlConnection sqlconn_obj = new SqlConnection())
                {
                    sqlconn_obj.ConnectionString = sqlhelper_obj.GetConnectionSrting();

                    using (SqlCommand sqlcmd_getvehicleType_obj = new SqlCommand("PARK_PROC_GetActivePassesByVehicleTypeID", sqlconn_obj))
                    {
                        sqlcmd_getvehicleType_obj.CommandType    = CommandType.StoredProcedure;
                        sqlcmd_getvehicleType_obj.CommandTimeout = 0;
                        sqlcmd_getvehicleType_obj.Parameters.AddWithValue("@VehicleTypeID", VehicleTypeIDs);
                        DataSet ds;
                        using (SqlDataAdapter da = new SqlDataAdapter(sqlcmd_getvehicleType_obj))
                        {
                            ds = new DataSet();
                            da.Fill(ds);
                        }
                        DataTable dt = ds.Tables[0];

                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            Passes passobj = new Passes();
                            passobj.PassPriceID = Convert.ToInt32(dt.Rows[i]["PassPriceID"]);
                            passobj.PassName    = Convert.ToString(dt.Rows[i]["PassName"]);
                            passList.Add(passobj);
                        }
                    }
                }
                return(passList);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #29
0
        public Passes SelectPasseByID(int currentUserType, int deploymentId, int p_PassesID)
        {
            MySqlParameter[] parameters = new MySqlParameter[] {
                new MySqlParameter("p_PassId", p_PassesID)
            };
            DataTable dt      = MySQLDB.MySQLDBHelper.ExecuteSelectCommand("GetPassByID", CommandType.StoredProcedure, parameters);
            Passes    objPass = null;

            if (dt.Rows.Count > 0)
            {
                DataRow dr = dt.Rows[0];
                objPass               = new Passes();
                objPass.PassId        = Convert.ToInt32(dr["PassId"].ToString());
                objPass.PassName      = dr["PassName"].ToString();
                objPass.PassStatus    = dr["PassStatus"].ToString();
                objPass.VisitortypeId = Convert.ToInt32(dr["VisitortypeId"].ToString());
                objPass.DeploymentId  = Convert.ToInt32(dr["DeploymentId"].ToString());
            }
            dt.Clear();
            dt.Dispose();
            return(objPass);
        }
예제 #30
0
        /// <summary>
        /// Parses an instance from a stream to a CGP file
        /// </summary>
        public RetroShaderPreset(Stream stream)
        {
            var content = new StreamReader(stream).ReadToEnd();
            Dictionary <string, string> dict = new Dictionary <string, string>();

            //parse the key-value-pair format of the file
            content = content.Replace("\r", "");
            foreach (var _line in content.Split('\n'))
            {
                var line = _line.Trim();
                if (line.StartsWith("#"))
                {
                    continue;                                       //lines that are solely comments
                }
                if (line == "")
                {
                    continue;                             //empty line
                }
                int eq    = line.IndexOf('=');
                var key   = line.Substring(0, eq).Trim();
                var value = line.Substring(eq + 1).Trim();
                int quote = value.IndexOf('\"');
                if (quote != -1)
                {
                    value = value.Substring(quote + 1, value.IndexOf('\"', quote + 1) - (quote + 1));
                }
                else
                {
                    //remove comments from end of value. exclusive from above condition, since comments after quoted strings would be snipped by the quoted string extraction
                    int hash = value.IndexOf('#');
                    if (hash != -1)
                    {
                        value = value.Substring(0, hash);
                    }
                    value = value.Trim();
                }
                dict[key.ToLower()] = value;
            }

            //process the keys
            int nShaders = FetchInt(dict, "shaders", 0);

            for (int i = 0; i < nShaders; i++)
            {
                ShaderPass sp = new ShaderPass();
                sp.Index = i;
                Passes.Add(sp);

                sp.InputFilterLinear = FetchBool(dict, "filter_linear" + i, false);                 //Should this value not be defined, the filtering option is implementation defined.
                sp.OuputFloat        = FetchBool(dict, "float_framebuffer" + i, false);
                sp.FrameCountMod     = FetchInt(dict, "frame_count_mod" + i, 1);
                sp.ShaderPath        = FetchString(dict, "shader" + i, "?");          //todo - change extension to .cg for better compatibility? just change .cg to .glsl transparently at last second?

                //If no scale type is assumed, it is assumed that it is set to "source" with scaleN set to 1.0.
                //It is possible to set scale_type_xN and scale_type_yN to specialize the scaling type in either direction. scale_typeN however overrides both of these.
                sp.ScaleTypeX = (ScaleType)Enum.Parse(typeof(ScaleType), FetchString(dict, "scale_type_x" + i, "Source"), true);
                sp.ScaleTypeY = (ScaleType)Enum.Parse(typeof(ScaleType), FetchString(dict, "scale_type_y" + i, "Source"), true);
                ScaleType st = (ScaleType)Enum.Parse(typeof(ScaleType), FetchString(dict, "scale_type" + i, "NotSet"), true);
                if (st != ScaleType.NotSet)
                {
                    sp.ScaleTypeX = sp.ScaleTypeY = st;
                }

                //scaleN controls both scaling type in horizontal and vertical directions. If scaleN is defined, scale_xN and scale_yN have no effect.
                sp.Scale.X = FetchFloat(dict, "scale_x" + i, 1);
                sp.Scale.Y = FetchFloat(dict, "scale_y" + i, 1);
                float scale = FetchFloat(dict, "scale" + i, -999);
                if (scale != -999)
                {
                    sp.Scale.X = sp.Scale.Y = FetchFloat(dict, "scale" + i, 1);
                }

                //TODO - LUTs
            }
        }