Example #1
0
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();
}
Example #2
0
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;
}
Example #3
0
void Texture::load(const Common::UString &name) {
	_image = loadImage(name, &_type);
	_name  = name;

	loadTXI(ResMan.getResource(name, ::Aurora::kFileTypeTXI));
	loadImage();
}
Example #4
0
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);
}
Example #5
0
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());
}
Example #6
0
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);
}