#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);
} else {
glActiveTexture(GL_TEXTURE0 + tunit);
glBindTexture(cur_target[tunit], 0);
+ assert(glGetError() == GL_NO_ERROR);
glActiveTexture(GL_TEXTURE0);
}
}
}
glBindTexture(target, id);
+ assert(glGetError() == GL_NO_ERROR);
glTexParameteri(target, GL_TEXTURE_WRAP_S, wrap);
glTexParameteri(target, GL_TEXTURE_WRAP_T, wrap);
glTexParameteri(target, GL_TEXTURE_WRAP_R, wrap);
void Texture::set_filtering(unsigned int min_filt, unsigned int mag_filt)
{
glBindTexture(target, id);
+ assert(glGetError() == GL_NO_ERROR);
glTexParameteri(target, GL_TEXTURE_MIN_FILTER, min_filt);
glTexParameteri(target, GL_TEXTURE_MAG_FILTER, mag_filt);
}
{
glActiveTexture(GL_TEXTURE0 + tex_unit);
glBindTexture(target, id);
+ assert(glGetError() == GL_NO_ERROR);
glActiveTexture(GL_TEXTURE0);
cur_target[tex_unit] = target;
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;
}
target = type_to_target(textype);
glBindTexture(target, id);
+ assert(glGetError() == GL_NO_ERROR);
glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
pixels[1] = 64;
pixels[2] = chess ? 32 : 255;
pixels[3] = 255;
+ pixels += 4;
}
}
}
target = GL_TEXTURE_2D;
glBindTexture(target, id);
+ assert(glGetError() == GL_NO_ERROR);
glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_REPEAT);
target = GL_TEXTURE_CUBE_MAP;
glBindTexture(target, id);
+ assert(glGetError() == GL_NO_ERROR);
glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
{
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;
}
{
}
-Texture *TextureSet::get_texture(const char *name, TextureType type) const
+Texture *TextureSet::get_texture(const char *name, TextureType type, const DataMap *dmap) const
{
- typename std::map<std::string, Texture*>::const_iterator iter = data.find(name);
+ char *fname;
+ int nsize = dmap ? dmap->path_size(name) : 0;
+ if(nsize) {
+ fname = (char*)alloca(nsize);
+ dmap->lookup(name, fname, nsize);
+ } else {
+ fname = (char*)name;
+ }
+
+ std::map<std::string, Texture*>::const_iterator iter = data.find(fname);
if(iter != data.end()) {
return iter->second;
}
Texture *res = create();
+ data[fname] = res;
res->create_default(type);
- resman_lookup(rman, name, res);
+ resman_lookup(rman, fname, res);
return res;
}