void RawImage::initFromFile(std::string filename)
{
    if (filename.empty())
    {
        SiegeThrow(Exception, "No filename provided for RawImage::initFromFile()!");
    }

    std::ifstream file;
    if (!utils::filesys::tryOpen(file, filename, std::ifstream::binary))
    {
        SiegeThrow(Exception, "Failed to open RAW image file \""
                   << filename << "\": '" << utils::filesys::getLastFileError() << "'.");
    }

    size_t fileSizeBytes = 0;
    utils::filesys::queryFileSize(filename, fileSizeBytes);
    if (fileSizeBytes == 0)
    {
        SiegeWarn("RAW image file \"" << filename << "\" appears to be empty! Making an empty image...");

        // Make this an empty image. NOTE: Should this be changed?
        dispose();
        srcFileName = std::move(filename);
        return;
    }

    ByteArray fileContents(fileSizeBytes);
    if (!file.read(reinterpret_cast<char *>(fileContents.data()), fileContents.size()))
    {
        SiegeThrow(Exception, "Failed to read " << utils::formatMemoryUnit(fileContents.size())
                   << " from RAW image file \"" << filename << "\"!");
    }

    initFromMemory(std::move(fileContents), std::move(filename));
}
void TextureResource::reload(std::shared_ptr<ResourceManager>& rm)
{
	if(!mPath.empty())
	{
		const ResourceData& data = rm->getFileData(mPath);
		initFromMemory((const char*)data.ptr.get(), data.length);
	}
}
void AspModel::initFromFile(std::string filename, const uint32_t importFlags)
{
	if (filename.empty())
	{
		SiegeThrow(Exception, "No filename provided for AspModel::initFromFile()!");
	}

	std::ifstream file;
	if (!utils::filesys::tryOpen(file, filename, std::ifstream::binary))
	{
		SiegeThrow(Exception, "Failed to open ASP file \""
				<< filename << "\": '" << utils::filesys::getLastFileError() << "'.");
	}

	size_t fileSizeBytes = 0;
	utils::filesys::queryFileSize(filename, fileSizeBytes);
	if (fileSizeBytes == 0)
	{
		SiegeWarn("ASP file \"" << filename << "\" appears to be empty...");

		// Make this an empty model.
		// NOTE: Should this be changed to an error instead?
		dispose();
		srcFileName = std::move(filename);
		return;
	}

	ByteArray fileContents(fileSizeBytes);
	if (!file.read(reinterpret_cast<char *>(fileContents.data()), fileContents.size()))
	{
		SiegeThrow(Exception, "Failed to read " << utils::formatMemoryUnit(fileContents.size())
				<< " from ASP mode file \"" << filename << "\"!");
	}

	initFromMemory(std::move(fileContents), importFlags, std::move(filename));
}
RawImage::RawImage(ByteArray fileContents, std::string filename)
    : RawImage()
{
    initFromMemory(std::move(fileContents), std::move(filename));
}
AspModel::AspModel(ByteArray fileContents, const uint32_t importFlags, std::string filename)
{
	initFromMemory(std::move(fileContents), importFlags, std::move(filename));
}