Original Post
🔒 Locked
Loading A Bitmap
Advertisement
Ok, here we go again 
Use this code. (if you use it in some demo, it would be nice to give em some credit, BTW)
As for screttching it to the window size, go into the 2D mode, and do something like this:
Height Map Editor
Use this code. (if you use it in some demo, it would be nice to give em some credit, BTW)
//load a bmp texture, with the specified global alpha
GLuint load_bmp8_fixed_alpha(char * FileName, Uint8 a)
{
int i,x,y,x_padding,x_size,y_size,colors_no,r,g,b,current_pallete_entry;
Uint8 * file_mem;
Uint8 * file_mem_start;
Uint8 * texture_mem;
Uint8 * read_buffer;
Uint8 * color_pallete;
FILE *f = NULL;
int file_lenght;
GLuint texture;
f = fopen (FileName, "rb");
if (!f) return;
file_mem = (Uint8 *) calloc ( 20000, sizeof(Uint8));
file_mem_start=file_mem;
fread (file_mem, 1, 50, f);//header only
//now, check to see if our bmp file is indeed a bmp file, and if it is 8 bits, uncompressed
if(*((short *) file_mem)!=19778)//BM (the identifier)
{
free(file_mem_start);
fclose (f);
return -1;
}
file_mem+=18;
x_size=*((int *) file_mem);
file_mem+=4;
y_size=*((int *) file_mem);
file_mem+=6;
if(*((short *)file_mem)!=8)//8 bit/pixel?
{
free(file_mem_start);
fclose (f);
return -1;
}
file_mem+=2;
if(*((int *)file_mem)!=0)//any compression?
{
free(file_mem_start);
fclose (f);
return -1;
}
file_mem+=16;
colors_no=*((int *)file_mem);
if(!colors_no)colors_no=256;
file_mem+=8;//here comes the pallete
color_pallete=file_mem+4;
fread (file_mem, 1, colors_no*4+4, f);//header only
file_mem+=colors_no*4;
x_padding=x_size%4;
if(x_padding)x_padding=4-x_padding;
//now, allocate the memory for the file
texture_mem = (Uint8 *) calloc ( x_size*y_size*4, sizeof(Uint8));
read_buffer = (Uint8 *) calloc ( 2000, sizeof(Uint8));
for(y=0;y{
//fread (texture_mem+y*x_size, 1, x_size-x_padding, f);
fread (read_buffer, 1, x_size-x_padding, f);
for(x=0;x{
current_pallete_entry=*(read_buffer+x);
b=*(color_pallete+current_pallete_entry*4);
g=*(color_pallete+current_pallete_entry*4+1);
r=*(color_pallete+current_pallete_entry*4+2);
*(texture_mem+(y*x_size+x)*4)=r;
*(texture_mem+(y*x_size+x)*4+1)=g;
*(texture_mem+(y*x_size+x)*4+2)=b;
*(texture_mem+(y*x_size+x)*4+3)=a;
}
}
free(file_mem_start);
free(read_buffer);
fclose (f);
//ok, now, hopefully, the file is loaded and converted...
//so, assign the texture, and such
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
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_LINEAR);
glTexImage2D(GL_TEXTURE_2D,
0,
GL_RGBA,
x_size, y_size,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
texture_mem);
free(texture_mem);
return texture;
}
As for screttching it to the window size, go into the 2D mode, and do something like this:
void Enter2DMode()
{
glPushAttrib(GL_LIGHTING_BIT|GL_DEPTH_BUFFER_BIT);
glDisable(GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
//glEnable(GL_BLEND);
//glBlendFunc(GL_DST_ALPHA,GL_SRC_ALPHA);
glViewport(0, 0, window_width, window_height);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0.0, (GLdouble)window_width, (GLdouble)window_height, 0.0, 0.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
}
void Leave2DMode()
{
//glDisable(GL_BLEND);
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopAttrib();
}
void draw_console_pic(int which_texture)
{
glBindTexture(GL_TEXTURE_2D, texture_id);
//texture_id is obtained by a call to GLuint load_bmp8_fixed_alpha(char * FileName, Uint8 a)
glColor3f(1.0f,1.0f,1.0f);
glBegin(GL_QUADS);
//draw the texture
glTexCoord2f(0.0f,1.0f);
glVertex3i(0,0,0);
glTexCoord2f(0.0f,0.0f);
glVertex3i(0,window_height,0);
glTexCoord2f(1.0f,0.0f);
glVertex3i(window_width,window_height,0);
glTexCoord2f(1.0f,1.0f);
glVertex3i(window_width,0,0);
glEnd();
}
Height Map Editor
Topic Locked
This topic has been locked by a moderator. New replies are not allowed.
Sign in to reply to this topic.
Advertisement