Integrator XMLReader::LoadIntegrator(QXmlStreamReader &xml_reader)
{
    Integrator result;

    //First check what type of integrator we're supposed to load
    QXmlStreamAttributes attribs(xml_reader.attributes());
    QStringRef type = attribs.value(QString(), QString("type"));
    bool is_mesh = false;

    while(!xml_reader.isEndElement() || QStringRef::compare(xml_reader.name(), QString("integrator")) != 0)
    {
        xml_reader.readNext();

        QString tag(xml_reader.name().toString());
        if(is_mesh && QString::compare(tag, QString("maxDepth")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result.SetDepth(xml_reader.text().toInt());
            }
            xml_reader.readNext();
        }
    }
    return result;
}
Integrator* XMLReader::LoadIntegrator(QXmlStreamReader &xml_reader)
{
    Integrator* result = NULL;

    QXmlStreamAttributes attribs(xml_reader.attributes());
    QStringRef type = attribs.value(QString(), QString("type"));

    if(QStringRef::compare(type, QString("directLighting")) == 0) // directlightingintegrator
    {
        result = new DirectLightingIntegrator();
    }
    else if(QStringRef::compare(type, QString("raytrace")) == 0) // raytrace integrator
    {
        //for this assignment, all trace ray integrator will be directLighting
        result = new DirectLightingIntegrator();
    }
    else if(QStringRef::compare(type, QString("indirectLighting")) == 0)
    {
        result = new Integrator();
    }

    int LightNumber = 1;
    int BRDFNumber = 1;
    while(!xml_reader.isEndElement() || QStringRef::compare(xml_reader.name(), QString("integrator")) != 0)
    {
        xml_reader.readNext();
        QString tag(xml_reader.name().toString());
        if(QString::compare(tag, QString("maxDepth")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result->SetDepth(xml_reader.text().toInt());
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("lightSampleNumber")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                LightNumber = xml_reader.text().toInt();
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("BRDFSampleNumber")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                BRDFNumber = xml_reader.text().toInt();
            }
            xml_reader.readNext();
        }
    }
    result->Number_Light = LightNumber;
    result->Number_BRDF = BRDFNumber;

    return result;
}