glTexImage & .pgm

Yes! I’m using a .pgm .ie, each 8 bit set contains a joint color value of RGB, so 255 = black and 0 = white.

Having trouble figuring out what Parameters I shud specify for glTextImage. in the format and internalformat fields

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureWidth, textureHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, myTexture);

Ok I have just specified GL_RED in the 3rd to last field. Seems to work. I also want to make all the white pixels i.e 0 in the pgm file, transperant, I have setup this:

glEnable(GL_BLEND);
glEnable(GL_ALPHA_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glAlphaFunc(GL_GREATER, 0.9f);

Not sure how I set the alpha value to zero in the pgm for each pixel with a color of 0. Its kind of hard of course because each pixel has only an 8bit field.

If I understand you well, you read a monochrome image and you want only shade of red. To gain alpha what I would do is to convert the the image R => RGBA.

Example:
If your image data have 4 pixels

0 => 0,0,0,0
100 => 100,0,0,255
125 => 125,0,0,255
200 => 200,0,0,255

You waste a little video memory but I think you can now use GL_DECAL for GL_TEXTURE_ENV_MODE.

hope it help.

Hey thanks, I can’t load the image using glTexImage as RGBA as it has a runtime error. I also want a shade of black not red.

Thanks for your help.

Ok, my example is now

0 => 0,0,0,0
100 => 100,100,100,255
125 => 125,125,125,255
200 => 200,200,200,255

original size new size
4 bytes <=> 16 bytes

You have a runtime error because you still feed glTexImage2D with
the original array of pixel with GL_RGBA so a buffer overflow occur.

Look at my inner loop for reading a pgm file


//allocate image data for 
//glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,image_width,image_height,0,GL_RGBA,GL_UNSIGNED_BYTE,data); data = new unsigned char[image_width*image_height*4];//GL_RGBA format
	  unsigned char pgm_pixel_data;

	  int i,data_indice;
	  for(i = 0 ,data_indice = 0  ; i < image_width*image_height ; i++)
	{
	  read>>pgm_pixel_data;
	//  cout<<pgm_pixel_data<<endl;
	  if(pgm_pixel_data!=0)//pixel is opaque (grey scale)
	    {
	      data[data_indice++] = pgm_pixel_data; //R
	      data[data_indice++] = pgm_pixel_data; //G
	      data[data_indice++] = pgm_pixel_data; //B
	      data[data_indice++] = 255; //A
	    }
	  else//pixel is transparent
	    {
	      data[data_indice++] = 0; //R
	      data[data_indice++] = 0; //G
	      data[data_indice++] = 0; //B
              data[data_indice++] = 0; //A
	    }
	}

This work well. (no runtime error)

hey, I implemented it at it worked beautifully. This is a real help to me as I am just coming to terms with all of the main features of open gl. so thanks ALOT for your time!!