/* Image bitmap                                 */
/*                                              */
/* Auteur: Nicolas JANEY                        */
/* nicolas.janey@univ-fcomte.fr                 */
/* Mars 2014                                    */

#include <stdlib.h>

#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>

#include "Image.h"
#include "Energie.h"

Image::Image(int tx,int ty) {
  this->tx = tx;
  this->ty = ty;
  this->t =(GLubyte **) calloc(ty,sizeof(GLubyte *));
  for ( int i = 0 ; i < ty ; i++ ) {
    this->t[i] =(GLubyte *) calloc(3*tx,sizeof(GLubyte)); }
}

Image::~Image(void) {
  for ( int i = 0 ; i < ty ; i++ ) {
    free(t[i]); }
  free(t);
}

void Image::affichage(void) {
  for ( int i = 0 ; i < ty ; i++ ) {
    glRasterPos2f(0,i);
    glDrawPixels(tx,1,GL_RGB,GL_UNSIGNED_BYTE,t[i]); }
}

void Image::affecteEnergieSurPixel(Energie *energie,double sensibilite,
                                   int x,int y) {
  GLubyte *p = &t[y][x*3];
  double r = energie->r*sensibilite+0.5;
  double v = energie->v*sensibilite+0.5;
  double b = energie->b*sensibilite+0.5;
  if ( r > 255.0 )
    r = 255.0;
  if ( v > 255.0 )
    v = 255.0;
  if ( b > 255.0 )
    b = 255.0;
  p[0] =(GLubyte) (r);
  p[1] =(GLubyte) (v);
  p[2] =(GLubyte) (b);
}
