summaryrefslogtreecommitdiffstats
path: root/menu_demo/bitmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'menu_demo/bitmap.c')
-rw-r--r--menu_demo/bitmap.c51
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);
+ }
+}