diff options
Diffstat (limited to 'menu_demo/bitmap.c')
-rw-r--r-- | menu_demo/bitmap.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/menu_demo/bitmap.c b/menu_demo/bitmap.c new file mode 100644 index 0000000..9a59d12 --- /dev/null +++ b/menu_demo/bitmap.c @@ -0,0 +1,51 @@ +#include <windows.h> +#include <gl/gl.h> +#include <gl/glu.h> +#include <stdio.h> + +#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); + } +} |