void Texture::load(const Common::UString &name) { Common::SeekableReadStream *img = ResMan.getResource(::Aurora::kResourceImage, name, &_type); if (!img) throw Common::Exception("No such image resource \"%s\"", name.c_str()); _name = name; // Loading the different image formats if (_type == ::Aurora::kFileTypeTGA) _image = new TGA(*img); else if (_type == ::Aurora::kFileTypeDDS) _image = new DDS(*img); else if (_type == ::Aurora::kFileTypeTPC) _image = new TPC(*img); else if (_type == ::Aurora::kFileTypeTXB) _image = new TXB(*img); else if (_type == ::Aurora::kFileTypeSBM) _image = new SBM(*img); else { delete img; throw Common::Exception("Unsupported image resource type %d", (int) _type); } delete img; loadTXI(ResMan.getResource(name, ::Aurora::kFileTypeTXI)); loadImage(); }
bool Texture::reload() { if (_name.empty()) return false; ::Aurora::FileType type = ::Aurora::kFileTypeNone; ImageDecoder *image = 0; TXI *txi = 0; try { txi = loadTXI (_name); image = loadImage(_name, type, txi); } catch (Common::Exception &e) { delete txi; e.add("Failed to reload texture \"%s\" (%d)", _name.c_str(), type); throw; } removeFromQueues(); set(_name, image, type, txi); addToQueues(); return true; }
void Texture::load(const Common::UString &name) { _image = loadImage(name, &_type); _name = name; loadTXI(ResMan.getResource(name, ::Aurora::kFileTypeTXI)); loadImage(); }
Texture *Texture::create(const Common::UString &name) { ::Aurora::FileType type = ::Aurora::kFileTypeNone; ImageDecoder *image = 0; ImageDecoder *layers[6] = { 0, 0, 0, 0, 0, 0 }; TXI *txi = 0; try { txi = loadTXI(name); const bool isFileCubeMap = txi && txi->getFeatures().cube && (txi->getFeatures().fileRange == 6); if (isFileCubeMap) { // A cube map with each side a separate image file for (size_t i = 0; i < 6; i++) { const Common::UString side = name + Common::composeString(i); Common::SeekableReadStream *imageStream = ResMan.getResource(::Aurora::kResourceImage, side, &type); if (!imageStream) throw Common::Exception("No such cube side image resource \"%s\"", side.c_str()); layers[i] = loadImage(imageStream, type, txi); } image = new CubeMapCombiner(layers); } else { Common::SeekableReadStream *imageStream = ResMan.getResource(::Aurora::kResourceImage, name, &type); if (!imageStream) throw Common::Exception("No such image resource \"%s\"", name.c_str()); // PLT needs extra handling, since they're their own Texture class if (type == ::Aurora::kFileTypePLT) { delete txi; return createPLT(name, imageStream); } image = loadImage(imageStream, type, txi); } } catch (Common::Exception &e) { delete txi; delete image; for (size_t i = 0; i < ARRAYSIZE(layers); i++) delete layers[i]; e.add("Failed to create texture \"%s\" (%d)", name.c_str(), type); throw; } return new Texture(name, image, type, txi); }
void Texture::loadImage() { if (!_image) { _width = 0; _height = 0; return; } if (_image->getMipMapCount() < 1) throw Common::Exception("Texture has no images"); // Decompress if (GfxMan.needManualDeS3TC()) _image->decompress(); // Set dimensions _width = _image->getMipMap(0).width; _height = _image->getMipMap(0).height; // If we've still got no TXI, look if the image provides TXI data loadTXI(_image->getTXI()); }
Texture *Texture::create(const Common::UString &name) { ::Aurora::FileType type = ::Aurora::kFileTypeNone; ImageDecoder *image = 0; TXI *txi = 0; try { Common::SeekableReadStream *imageStream = ResMan.getResource(::Aurora::kResourceImage, name, &type); if (!imageStream) throw Common::Exception("No such image resource \"%s\"", name.c_str()); // PLT needs extra handling, since they're their own Texture class if (type == ::Aurora::kFileTypePLT) return createPLT(name, imageStream); image = loadImage(imageStream, type); txi = loadTXI(name); } catch (Common::Exception &e) { e.add("Failed to create texture \"%s\" (%d)", name.c_str(), type); throw; } return new Texture(name, image, type, txi); }