#ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include #define GL_BGR 0x80E0 #endif #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 struct ImageStruct BitmapLoad(char *filename) { struct ImageStruct l_sImage; GLuint texture; FILE *bitmap; // try to open the file bitmap = fopen(filename, "r"); // 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_BGR, GL_UNSIGNED_BYTE, imagedata); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); l_sImage.m_iImageId = texture; l_sImage.m_iWidth = width; l_sImage.m_iHeight = height; free(imagedata); fclose(bitmap); return l_sImage; } else { // couldn't find bitmap exit(0); } }