Example #1
0
	void Load(const std::string& p_file_name) {
		FILE* file;
		file = fopen(p_file_name.c_str(), "rb");
		
		if (file) {
			unsigned long size;
			fseek(file, 0, SEEK_END);
			size = ftell(file);
			fseek(file, 0, SEEK_SET);
			
			r2::Byte* buffer = new r2::Byte[size];
			try {
				fread(buffer, 1, size, file);
				
				r2::SerialLoader loader(buffer, size);
				
				Serialize(loader);
			} catch (...) {
				delete [] buffer;
				throw;
			}
			delete [] buffer;
			
			fclose(file);
		} else {
			throw r2ExceptionIOM(std::string("Could not open file: ") + p_file_name);
		}
		
		
	}
Example #2
0
	void Save(const std::string& p_file_name) {
		r2::SerialSizer sizer;
		
		Serialize(sizer);
		
		r2::Byte* buffer = new r2::Byte[sizer.GetSize()];
		try {
			r2::SerialSaver saver(buffer, sizer.GetSize());
		
			Serialize(saver);
		
			FILE* file;
			file = fopen(p_file_name.c_str(), "w+b");
			if (file) {
				fwrite(buffer, 1, sizer.GetSize(), file); 
				fclose(file);
			} else {
				throw r2ExceptionIOM(std::string("Could not create/open file: ") + p_file_name);
			}
		} catch (...) {
			delete [] buffer;
			throw;
		}
		
		delete [] buffer;
	}
Example #3
0
std::shared_ptr<Texture> Texture::loadTexture(const std::string& filename) {
    std::shared_ptr<Texture> texture(new Texture);
    
    ILuint imageName;
    ilGenImages(1, &imageName);
    ilBindImage(imageName);
    if (!ilLoadImage(filename.c_str())) {
		throw r2ExceptionIOM("Failed to load texture image: " + filename);
    }

    GLCheck(glBindTexture(GL_TEXTURE_2D, texture->getId()));

    ILuint imageWidth = ilGetInteger(IL_IMAGE_WIDTH);
    ILuint imageHeight = ilGetInteger(IL_IMAGE_HEIGHT);
    ILuint imageBpp = ilGetInteger(IL_IMAGE_BPP);
    ILubyte* imageData = ilGetData();
    GLenum format = (imageBpp == 3) ? GL_RGB : GL_RGBA;

    if (imageBpp != 3 && imageBpp != 4) {
		std::stringstream ss;
		ss << "Texture image in bad format (bytes per pixel = " << imageBpp << "): " << filename;

		throw r2ExceptionIOM(ss.str());
    }

    GLCheck(glTexImage2D(GL_TEXTURE_2D,
                0,
                format,
                imageWidth,
                imageHeight,
                0,
                format,
                GL_UNSIGNED_BYTE,
                (const GLvoid*)imageData));

    ilBindImage(0);
    ilDeleteImages(1, &imageName);

    return texture;
}