#include "llum.h"

Llum::Llum()
{

    posicio = vec4(128,128,128.0,1.0);
    direccio = vec3(0.6,0.6,0.6);
    intensitat_ambient = vec4(0.3,0.3,0.3,1);
    intensitat_difusa = vec4(0.8,0.8,0.8,1);
    intensitat_especular = vec4(1,1,1,1);

    angle = 30;

    coef_a = 0.2;
    coef_b = 0.25;
    coef_c = 0.2;

}



void Llum::toGPU(QGLShaderProgram *program)
{

    struct {
        GLuint pos;
        GLuint dir;
        GLuint int_ambient;
        GLuint int_difusa;
        GLuint int_especular;

        float ang;
    } llum;

    GLuint a = program->uniformLocation("a");
    GLuint b = program->uniformLocation("b");
    GLuint c = program->uniformLocation("c");

    llum.pos = program->uniformLocation("Lpos");
    llum.dir = program->uniformLocation("Ldir");
    llum.int_ambient = program->uniformLocation("Lint_ambient");
    llum.int_difusa = program->uniformLocation("Lint_difusa");
    llum.int_especular = program->uniformLocation("Lint_especular");
    llum.ang = program->uniformLocation("Lang");

    glUniform4fv(llum.pos, 1, posicio); //posicioLlum és un vec4
    glUniform3fv(llum.dir, 1, direccio ); // ambient és un vec3
    glUniform4fv(llum.int_ambient, 1,intensitat_ambient);
    glUniform4fv(llum.int_difusa, 1,intensitat_difusa); //posicioLlum és un vec4
    glUniform4fv(llum.int_especular,1, intensitat_especular); //posicioLlum és un vec4
    glUniform1f(llum.ang, angle); //
    glUniform1f(a, coef_a);
    glUniform1f(b, coef_b);
    glUniform1f(c, coef_c);

}

vec4 Llum::getPosicio(){
    return posicio;
}
vec4 Llum::getAmbient(){
    return intensitat_ambient;
}
vec4 Llum::getDifusa(){
    return intensitat_difusa;
}
vec4 Llum::getEspecular(){
    return intensitat_especular;
}
