/******************************************************************
 *
 */
#include <GL/glut.h>
#include <stdlib.h>
#include <readJPEG.h>
extern int LoadJPEGTexture(const char *filename, int *outWidth, int *outHeight);

int LoadJPEGTexture(const char *filename, int *outWidth, int *outHeight)
{
  int width, height;
  unsigned char *rgb;
  int doMask = 1;
  int format = GL_RGB;
  int internal = GL_RGB8;

  *outWidth = 0;
  rgb = readJPEG((char *)filename, &width, &height);
  if (!rgb)
    return 0;

  if (doMask)
    {
      int i;
      unsigned char *rgb2 = malloc(width*height*4);

      for (i = 0; i < width*height; i++)
	{
	  rgb2[i*4] = rgb[i*3];
	  rgb2[i*4+1] = rgb[i*3+1];
	  rgb2[i*4+2] = rgb[i*3+2];
	  rgb2[i*4+3] = 255 - rgb[i*3];
	}

      free(rgb);
      rgb = rgb2;
      format = GL_RGBA;
      internal = GL_RGBA8;
    }

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

  /*
   * Define the 2D texture image.
   */

  glPixelStorei(GL_UNPACK_ALIGNMENT, 4);	/* Force 4-byte alignment */
  glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
  glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
  glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);

  glTexImage2D(GL_TEXTURE_2D, 0, internal, width, height, 0,
	       format, GL_UNSIGNED_BYTE, rgb);
  free(rgb);

  *outWidth = width;
  *outHeight = height;
  return width;
}

