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.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/menu_demo/bitmap.c b/menu_demo/bitmap.c
index edb981d..83aacda 100644
--- a/menu_demo/bitmap.c
+++ b/menu_demo/bitmap.c
@@ -1,7 +1,8 @@
#ifdef G_OS_WIN32
#define WIN32_LEAN_AND_MEAN 1
#include <windows.h>
- #define GL_BGR 0x80E0
+ #define GL_BGR 0x80E0
+ #define GL_BGRA 0x80E1
#endif
#include <GL/gl.h>
@@ -16,7 +17,8 @@
#define BITMAP_HEADERSIZE 0x0e
#define BITMAP_WIDTH 0x12
#define BITMAP_HEIGHT 0x16
-
+#define BITMAP_DEPTH 0x1c
+#define BITMAP_IMAGE_SIZE 0x22
struct ImageStruct BitmapLoad(char *filename)
@@ -31,7 +33,8 @@ struct ImageStruct BitmapLoad(char *filename)
// does the bitmap exist?
if (bitmap > 0)
{
- unsigned int dataoffset, filesize;
+ unsigned int dataoffset, filesize, imagesize;
+ short depth;
GLsizei width, height;
unsigned char *imagedata;
@@ -42,17 +45,30 @@ struct ImageStruct BitmapLoad(char *filename)
fseek(bitmap, BITMAP_WIDTH, SEEK_SET);
fread(&width, 4, 1, bitmap);
fread(&height, 4, 1, bitmap);
+ fseek(bitmap, BITMAP_DEPTH, SEEK_SET);
+ fread(&depth, 2, 1, bitmap);
+ fseek(bitmap, BITMAP_IMAGE_SIZE, SEEK_SET);
+ fread(&imagesize, 4, 1, bitmap);
- imagedata = (unsigned char *)malloc((size_t)(filesize -dataoffset));
+ imagedata = (unsigned char *)malloc((size_t)imagesize);
fseek(bitmap, dataoffset, SEEK_SET);
- fread(imagedata, (size_t)(filesize -dataoffset), 1, bitmap);
+ fread(imagedata, (size_t)imagesize, 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);
+
+ if (depth == 24) // 24 bits
+ {
+ gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, width, height, GL_BGR, GL_UNSIGNED_BYTE, imagedata);
+ }
+ else // depth == 32 bits
+ {
+ gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, width, height, GL_BGRA, GL_UNSIGNED_BYTE, imagedata);
+ }
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
l_sImage.m_iImageId = texture;
l_sImage.m_iWidth = width;