diff options
Diffstat (limited to 'menu_demo/bitmap.c')
-rw-r--r-- | menu_demo/bitmap.c | 121 |
1 files changed, 69 insertions, 52 deletions
diff --git a/menu_demo/bitmap.c b/menu_demo/bitmap.c index 1a32f68..edb981d 100644 --- a/menu_demo/bitmap.c +++ b/menu_demo/bitmap.c @@ -2,55 +2,72 @@ #define WIN32_LEAN_AND_MEAN 1
#include <windows.h>
#define GL_BGR 0x80E0
-#endif - -#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 BitmapLoad(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_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); - - free(imagedata); - fclose(bitmap); - } -} +#endif
+
+#include <GL/gl.h>
+#include <GL/glu.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#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);
+ }
+}
+
+
|