7 map<string,Texture> Texture::textures;
9 extern TGAImageRec texture;
10 extern bool trilinear;
14 glDeleteTextures(1,&id);
17 void Texture::load() {
22 LOG(std::string("Loading texture...") + fileName);
24 unsigned char fileNamep[256];
25 CopyCStringToPascal(ConvertFileName(fileName.c_str()), fileNamep);
27 upload_image( fileNamep ,hasalpha);
30 if ( texture.bpp == 24 )
35 glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
38 glGenTextures( 1, &id );
39 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
41 glBindTexture( GL_TEXTURE_2D, id);
42 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
44 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (trilinear?GL_LINEAR_MIPMAP_LINEAR:GL_LINEAR_MIPMAP_NEAREST) );
46 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
48 skinsize=texture.sizeX;
52 int nb = (texture.sizeY*texture.sizeX*(texture.bpp/8));
53 array = (GLubyte*)malloc(nb*sizeof(GLubyte));
54 for(int i=0;i<nb;i++) {
55 if((i+1)%4||type==GL_RGB) {
56 array[tempnum]=texture.data[i];
62 gluBuild2DMipmaps( GL_TEXTURE_2D, type, texture.sizeX, texture.sizeY, GL_RGB, GL_UNSIGNED_BYTE, array );
64 gluBuild2DMipmaps( GL_TEXTURE_2D, type, texture.sizeX, texture.sizeY, type, GL_UNSIGNED_BYTE, texture.data );
68 GLuint Texture::Load(const string& fileName, bool mipmap, bool hasalpha) {
69 map<string,Texture>::iterator it = textures.find(fileName);
70 if(it==textures.end()) {
71 textures.insert(make_pair(fileName,Texture(fileName,mipmap,hasalpha)));
72 textures[fileName].load();
73 return textures[fileName].getId();
75 return it->second.getId();
79 GLuint Texture::Load(const string& fileName, bool mipmap, bool hasalpha, GLubyte* array, int* skinsize) {
80 map<string,Texture>::iterator it = textures.find(fileName);
81 if(it==textures.end()) {
82 textures.insert(make_pair(fileName,Texture(fileName,mipmap,hasalpha,true)));
83 textures[fileName].load();
84 *skinsize = textures[fileName].skinsize;
85 for(int i=0;i<textures[fileName].arraySize;i++) {
86 array[i] = textures[fileName].array[i];
88 return textures[fileName].getId();
90 *skinsize = it->second.skinsize;
91 for(int i=0;i<it->second.arraySize;i++) {
92 array[i] = it->second.array[i];
94 return it->second.getId();