#include #include #include #include #include "bitmap.h" #define BITMAP_FILESIZE 0x02 #define BITMAP_OFFSET 0x0a #define BITMAP_HEADERSIZE 0x0e #define BITMAP_WIDTH 0x12 #define BITMAP_HEIGHT 0x16 void load_image(char *filename) { GLuint texture; FILE *bitmap; // try to open the file bitmap = fopen(filename, "rb"); // does the bitmap exist? if (bitmap > 0) { unsigned int dataoffset, filesize; GLsizei width, height; unsigned char *imagedata; fseek(bitmap, BITMAP_FILESIZE, SEEK_SET); fread(&filesize, 4, 1, bitmap); fseek(bitmap, BITMAP_OFFSET, SEEK_SET); fread(&dataoffset, 4, 1, bitmap); fseek(bitmap, BITMAP_WIDTH, SEEK_SET); fread(&width, 4, 1, bitmap); fread(&height, 4, 1, bitmap); imagedata = (unsigned char *)malloc((size_t)(filesize -dataoffset)); fseek(bitmap, dataoffset, SEEK_SET); fread(imagedata, (size_t)(filesize -dataoffset), 1, bitmap); glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, width, height, GL_RGB, GL_UNSIGNED_BYTE, imagedata); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); free(imagedata); fclose(bitmap); } }