summaryrefslogtreecommitdiff
path: root/DevIL/src-ILUT/src/ilut_allegro.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'DevIL/src-ILUT/src/ilut_allegro.cpp')
-rw-r--r--DevIL/src-ILUT/src/ilut_allegro.cpp127
1 files changed, 127 insertions, 0 deletions
diff --git a/DevIL/src-ILUT/src/ilut_allegro.cpp b/DevIL/src-ILUT/src/ilut_allegro.cpp
new file mode 100644
index 00000000..97e1dd1c
--- /dev/null
+++ b/DevIL/src-ILUT/src/ilut_allegro.cpp
@@ -0,0 +1,127 @@
+//-----------------------------------------------------------------------------
+//
+// ImageLib Sources
+// Copyright (C) 2000 by Denton Woods
+// Last modified: 11/23/2000 <--Y2K Compliant! =]
+//
+// Filename: openilut/allegro.c
+//
+// Description: Allegro functions for images
+//
+//-----------------------------------------------------------------------------
+
+#ifdef ILUT_USE_ALLEGRO
+#include "ilut_allegro.h"
+#endif
+
+#include "ilut_internal.h"
+
+#ifdef ILUT_USE_ALLEGRO
+
+ILboolean ilConvertPal(ILenum DestFormat);
+
+// Does not account for converting luminance...
+BITMAP* ILAPIENTRY ilutConvertToAlleg(PALETTE Pal)
+{
+ BITMAP *Bitmap;
+ ILimage *TempImage;
+ ILuint i = 0, j = 0;
+
+ ilutCurImage = ilGetCurImage();
+
+ if (ilutCurImage == NULL) {
+ ilSetError(ILUT_ILLEGAL_OPERATION);
+ return NULL;
+ }
+
+ // Should be IL_BGR(A), but Djgpp screws up somewhere along the line.
+ if (ilutCurImage->Format == IL_RGB || ilutCurImage->Format == IL_RGBA) {
+ iluSwapColours();
+ }
+
+ if (ilutCurImage->Origin == IL_ORIGIN_LOWER_LEFT)
+ iluFlipImage();
+ if (ilutCurImage->Type > IL_UNSIGNED_BYTE) {} // Can't do anything about this right now...
+ if (ilutCurImage->Type == IL_BYTE) {} // Can't do anything about this right now...
+
+ Bitmap = create_bitmap_ex(ilutCurImage->Bpp * 8, ilutCurImage->Width, ilutCurImage->Height);
+ if (Bitmap == NULL) {
+ return IL_FALSE;
+ }
+ memcpy(Bitmap->dat, ilutCurImage->Data, ilutCurImage->SizeOfData);
+
+ // Should we make this toggleable?
+ if (ilutCurImage->Bpp == 8 && ilutCurImage->Pal.PalType != IL_PAL_NONE) {
+ // Use the image's palette if there is one
+
+ // ilConvertPal is destructive to the original image
+ // @TODO: Use new ilCopyPal!!!
+ TempImage = ilNewImage(ilutCurImage->Width, ilutCurImage->Height, ilutCurImage->Depth, ilutCurImage->Bpp, 1);
+ ilCopyImageAttr(TempImage, ilutCurImage);
+ ilSetCurImage(TempImage);
+
+ if (!ilConvertPal(IL_PAL_RGB24)) {
+ destroy_bitmap(Bitmap);
+ ilSetError(ILUT_ILLEGAL_OPERATION);
+ return NULL;
+ }
+
+ for (; i < ilutCurImage->Pal.PalSize && i < 768; i += 3, j++) {
+ Pal[j].r = TempImage->Pal.Palette[i+0];
+ Pal[j].g = TempImage->Pal.Palette[i+1];
+ Pal[j].b = TempImage->Pal.Palette[i+2];
+ Pal[j].filler = 255;
+ }
+
+ ilCloseImage(TempImage);
+ ilSetCurImage(ilutCurImage);
+ }
+
+ return Bitmap;
+}
+
+
+#ifndef _WIN32_WCE
+BITMAP* ILAPIENTRY ilutAllegLoadImage(ILstring FileName)
+{
+ ILuint ImgId;
+ PALETTE Pal;
+
+ ilGenImages(1, &ImgId);
+ ilBindImage(ImgId);
+ if (!ilLoadImage(FileName)) {
+ ilDeleteImages(1, &ImgId);
+ return 0;
+ }
+
+ ilDeleteImages(1, &ImgId);
+
+ return ilutConvertToAlleg(Pal);
+}
+#endif//_WIN32_WCE
+
+
+// Unfinished
+ILboolean ILAPIENTRY ilutAllegFromBitmap(BITMAP *Bitmap)
+{
+ ilutCurImage = ilGetCurImage();
+ if (ilutCurImage == NULL) {
+ ilSetError(ILUT_ILLEGAL_OPERATION);
+ return IL_FALSE;
+ }
+
+ if (Bitmap == NULL || Bitmap->w == 0 || Bitmap->h == 0) {
+ ilSetError(ILUT_INVALID_PARAM);
+ return IL_FALSE;
+ }
+
+ if (!ilTexImage(Bitmap->w, Bitmap->h, 1, 3, IL_RGB, IL_UNSIGNED_BYTE, NULL))
+ return IL_FALSE;
+
+ ilutCurImage->Origin = IL_ORIGIN_LOWER_LEFT; // I have no idea.
+
+ return IL_TRUE;
+}
+
+#endif//ILUT_USE_ALLEGRO
+