material editing in scene metafile
[laserbrain_demo] / src / texture.cc
index dddc0d1..c556d27 100644 (file)
@@ -1,9 +1,11 @@
 #include <math.h>
 #include <assert.h>
 #include "texture.h"
+#include "datamap.h"
 #include "image.h"
 #include "opengl.h"
 #include "imago2.h"
+#include "logger.h"
 
 static int glifmt_from_ifmt(unsigned int ifmt);
 static int glfmt_from_ifmt(unsigned int ifmt);
@@ -148,7 +150,7 @@ void Texture::bind(int tex_unit) const
 void Texture::create(int xsz, int ysz, TextureType textype, unsigned int ifmt)
 {
        if(textype == TEX_CUBE && xsz != ysz) {
-               fprintf(stderr, "trying to create cubemap with different width and height (%dx%d)\n", xsz, ysz);
+               error_log("trying to create cubemap with different width and height (%dx%d)\n", xsz, ysz);
                return;
        }
 
@@ -200,7 +202,6 @@ void Texture::create_default(TextureType type)
                                pixels += 4;
                        }
                }
-               default_img->save("/tmp/foo.png");
        }
 
        switch(type) {
@@ -321,12 +322,12 @@ bool Texture::load(const char *fname)
 {
        Image img;
        if(!img.load(fname)) {
-               fprintf(stderr, "failed to load 2D texture: %s\n", fname);
+               error_log("failed to load 2D texture: %s\n", fname);
                return false;
        }
        set_image(img);
 
-       printf("loaded 2D texture: %s\n", fname);
+       info_log("loaded 2D texture: %s\n", fname);
        return true;
 }
 
@@ -490,8 +491,17 @@ Texture *TextureSet::create_tex()
 
 bool TextureSet::load_tex(Texture *tex, const char *fname)
 {
+       char *pathbuf;
+       int nsize = datamap_path_size(fname);
+       if(nsize) {
+               pathbuf = (char*)alloca(nsize);
+               datamap_lookup(fname, pathbuf, nsize);
+       } else {
+               pathbuf = (char*)fname;
+       }
+
        Image *img = new Image;
-       if(!img->load(fname)) {
+       if(!img->load(pathbuf)) {
                delete img;
                return false;
        }