]> git.tdb.fi Git - libs/gl.git/blobdiff - source/ilwrap.cpp
Unbind vertex buffer after updating array data
[libs/gl.git] / source / ilwrap.cpp
index be8442bee741a325199a4f45865a86bbbcea549c..b9fb4998adb39687efe7e4217439718077244ee4 100644 (file)
@@ -5,15 +5,22 @@ Copyright © 2007  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 
+#ifdef WITH_DEVIL
 #include <IL/il.h>
+#endif
 #include <msp/core/except.h>
 #include "ilwrap.h"
 
+using namespace std;
+
 namespace Msp {
 namespace GL {
 
 Image::Image()
 {
+#ifdef WITH_DEVIL
+       static bool init_done=false;
+
        if(!init_done)
        {
                ilInit();
@@ -23,22 +30,43 @@ Image::Image()
        }
 
        ilGenImages(1, &id);
+#else
+       throw Exception("DevIL support not compiled in");
+#endif
 }
 
 Image::~Image()
 {
+#ifdef WITH_DEVIL
        ilDeleteImages(1, &id);
+#endif
 }
 
-void Image::load(const std::string &fn)
+void Image::load_file(const string &fn)
 {
+#ifdef WITH_DEVIL
        ilBindImage(id);
        if(!ilLoadImage(const_cast<char *>(fn.c_str())))
                throw Exception("Error loading image "+fn);
+#else
+       (void)fn;
+#endif
+}
+
+void Image::load_lump(const void *data, unsigned size)
+{
+#ifdef WITH_DEVIL
+       ilBindImage(id);
+       if(!ilLoadL(IL_TYPE_UNKNOWN, const_cast<void *>(data), size))
+               throw Exception("Error loading image from lump");
+#else
+       (void)data; (void)size;
+#endif
 }
 
 PixelFormat Image::get_format() const
 {
+#ifdef WITH_DEVIL
        switch(ilGetInteger(IL_IMAGE_FORMAT))
        {
        case IL_COLOR_INDEX: return COLOR_INDEX;
@@ -50,24 +78,37 @@ PixelFormat Image::get_format() const
        case IL_BGRA: return BGRA;
        default: throw InvalidParameterValue("Unknown pixel format in image");
        }
+#else
+       return RGB;
+#endif
 }
 
 unsigned Image::get_width() const
 {
+#ifdef WITH_DEVIL
        return ilGetInteger(IL_IMAGE_WIDTH);
+#else
+       return 0;
+#endif
 }
 
 unsigned Image::get_height() const
 {
+#ifdef WITH_DEVIL
        return ilGetInteger(IL_IMAGE_HEIGHT);
+#else
+       return 0;
+#endif
 }
 
 const void *Image::get_data() const
 {
+#ifdef WITH_DEVIL
        return ilGetData();
+#else
+       return 0;
+#endif
 }
 
-bool Image::init_done=false;
-
 } // namespace GL
 } // namespace Msp