Esempio n. 1
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);
}
Esempio n. 2
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);
}