nuclear@8: #include nuclear@8: #include nuclear@8: #include nuclear@8: #include nuclear@8: #include "opengl.h" nuclear@8: #include "texman.h" nuclear@8: nuclear@8: static std::string find_datafile(const std::string &fname); nuclear@8: nuclear@8: static std::map textures; nuclear@8: static const char *paths[] = { nuclear@8: "data", nuclear@8: 0 nuclear@8: }; nuclear@8: nuclear@8: unsigned int get_texture(const char *fname) nuclear@8: { nuclear@8: unsigned int tex; nuclear@8: nuclear@8: if(!fname || !*fname) { nuclear@8: return 0; nuclear@8: } nuclear@8: nuclear@8: std::map::const_iterator it = textures.find(fname); nuclear@8: if(it != textures.end()) { nuclear@8: tex = it->second; nuclear@8: } else { nuclear@8: if(!(tex = img_gltexture_load(find_datafile(fname).c_str()))) { nuclear@8: fprintf(stderr, "failed to load image: %s\n", fname); nuclear@8: } else { nuclear@8: textures[fname] = tex; nuclear@8: } nuclear@8: } nuclear@8: nuclear@8: return tex; nuclear@8: } nuclear@8: nuclear@8: static std::string find_datafile(const std::string &fname) nuclear@8: { nuclear@8: FILE *fp; nuclear@8: nuclear@8: for(int i=0; paths[i]; i++) { nuclear@8: std::string path = paths[i] + std::string("/") + fname; nuclear@8: if((fp = fopen(path.c_str(), "rb"))) { nuclear@8: fclose(fp); nuclear@8: return path; nuclear@8: } nuclear@8: } nuclear@8: nuclear@8: return fname; nuclear@8: }