internal void Read(ParameterReader paramReader)
        {
            while (paramReader.Read())
            {
                switch (paramReader.HeadToken)
                {
                case "type":
                    Type = ( FogType )paramReader.ReadInt32();
                    break;

                case "density":
                    Density = paramReader.ReadSingle();
                    break;

                case "linear":
                    Start = paramReader.ReadSingle();
                    End   = paramReader.ReadSingle();
                    break;

                case "color":
                    Color = paramReader.ReadVector4();
                    break;

                case "group_start":
                    throw new InvalidDataException("Expected group end before group start");

                case "group_end":
                    if (paramReader.ReadUInt32() != Id)
                    {
                        throw new InvalidDataException($"Expected group end with id {Id}");
                    }

                    return;
                }
            }
        }
        internal void Read(ParameterReader paramReader)
        {
            while (paramReader.Read())
            {
                switch (paramReader.HeadToken)
                {
                case "type":
                    Type = ( LightType )paramReader.ReadInt32();
                    break;

                case "ambient":
                    Ambient = paramReader.ReadVector4();
                    break;

                case "diffuse":
                    Diffuse = paramReader.ReadVector4();
                    break;

                case "specular":
                    Specular = paramReader.ReadVector4();
                    break;

                case "position":
                    Position = paramReader.ReadVector4();
                    break;

                case "spot_direction":
                    SpotDirection = paramReader.ReadVector3();
                    break;

                case "spot_exponent":
                    SpotExponent = paramReader.ReadSingle();
                    break;

                case "spot_cutoff":
                    SpotCutoff = paramReader.ReadSingle();
                    break;

                case "attenuation":
                    SpotAttenuationConstant  = paramReader.ReadSingle();
                    SpotAttenuationLinear    = paramReader.ReadSingle();
                    SpotAttenuationQuadratic = paramReader.ReadSingle();
                    break;

                case "clipplane":
                    ClipPlane = paramReader.ReadVector4();
                    break;

                case "tonecurve":
                    ToneCurve = paramReader.ReadVector3();
                    break;

                case "id_end":
                    if (paramReader.ReadInt32() != ( int )Id)
                    {
                        throw new InvalidDataException($"Expected id end with id {( int ) Id}");
                    }

                    return;
                }
            }
        }