#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
{
- typename std::map<std::string, Texture*>::const_iterator iter = data.find(name);
+ std::map<std::string, Texture*>::const_iterator iter = data.find(name);
if(iter != data.end()) {
return iter->second;
}
Texture *res = create();
+ data[name] = res;
res->create_default(type);
resman_lookup(rman, name, res);
return res;
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;
}