void CFilesPackage::PutFile(const CMemoryBuffer &buf , const nstring & name, const nstring & ext, const nstring &grs) { TFileHeader fheader; memset(&fheader, 0, sizeof(TFileHeader)); strcpy(fheader.file_name, name.c_str()); strcpy(fheader.ext, ext.c_str()); strcpy(fheader.resource_group, grs.c_str()); if(!mIsOpened) throw NOVA_EXP("CFilesPackage::PutFile: package not opened, open package file first!", BAD_OPERATION); if(!mWritePackage) throw NOVA_EXP("CFilesPackage::PutFile: package opened for reading!", BAD_OPERATION); if(InFileList(name)) throw NOVA_EXP("CFilesPackage::PutFile: package already contains this name!", BAD_OPERATION); fheader.pos = mFile->Tell() + sizeof(TFileHeader); fheader.number = mPackageMap.size() + 1; fheader.size = buf.GetBufferSize(); mFile->Write(&fheader, sizeof(TFileHeader)); mFile->Write(buf); std::pair<nstring, TFileHeader> pf; pf.first = name; pf.second = fheader; mPackageMap.insert(pf); mFile->Flush(); }
void CMemoryBuffer::CopyTo(const CMemoryBuffer & buffer, size_t size, size_t off) const { if(buffer.GetBufferSize() < size) NOVA_EXP("CMemoryBuffer::CopyTo: unput buffer too small...", MEM_ERROR); if((off + size) > mbSize) NOVA_EXP("CMemoryBuffer::CopyTo: offset param too large", MEM_ERROR); nova::nByte *p = (nova::nByte *)mBegin + off; memcpy(buffer.GetBegin(), p, size); }
void CDevILCodec::DecodeFromBuffer(const CMemoryBuffer & input, CImage *image, CImageFormats::NovaPixelFormats format, ESaveFormats ext) { ILuint image_id; // Generate the main image name to use. ilGenImages(1, &image_id); // Bind this image name. ilBindImage(image_id); ILenum type = 0; switch(ext) { case SF_BMP: type = IL_BMP; break; case SF_ICO: type = IL_ICO; break; case SF_JPG: type = IL_JPG; break; case SF_PCX: type = IL_PCX; break; case SF_PIC: type = IL_PIC; break; case SF_PNG: type = IL_PNG; break; case SF_TGA: type = IL_TGA; break; case SF_TIF: type = IL_TIF; break; case SF_GIF: type = IL_GIF; break; case SF_DDS: type = IL_DDS; break; case SF_PIX: type = IL_PIX; break; case SF_HDR: type = IL_HDR; break; default: return; } if(!ilLoadL(type, input.GetBegin(), input.GetBufferSize())) { ILenum Error = 0; if((Error = ilGetError()) != NULL) { nstring str("CDevILCodec::DecodeFormStream: Can not load image lump - "); str.append(iluErrorString(Error)); throw NOVA_EXP(str.c_str(), BAD_OPERATION); } } image->GetImageSource().mHeight = ilGetInteger(IL_IMAGE_HEIGHT); image->GetImageSource().mWidth = ilGetInteger(IL_IMAGE_WIDTH); image->GetImageSource().mDepth = ilGetInteger(IL_IMAGE_DEPTH); //if (ilGetInteger(IL_IMAGE_ORIGIN) == IL_ORIGIN_UPPER_LEFT) // iluFlipImage(); if(format == CImageFormats::NF_DEFAULT) { CDevILFormats inf; inf.SetFormat(ilGetInteger(IL_IMAGE_FORMAT)); format = inf.GetExFormat(); } CDevILFormats informat; informat.SetExFormat(format); image->GetImageSource().mPixelFormat = format; size_t _size = image->GetWidth() * image->GetHeight() * image->GetDepth() * ilGetInteger(IL_IMAGE_BYTES_PER_PIXEL); image->GetBits().FreeBuffer(); image->GetBits().AllocBuffer(_size); ilCopyPixels(0, 0, 0, image->GetWidth(), image->GetHeight(), image->GetDepth(), informat.GetFormat(), IL_UNSIGNED_BYTE, image->GetBits().GetBegin()); ilDeleteImages(1, &image_id); ILenum Error = 0; if((Error = ilGetError()) != NULL) { nstring str("CDevILCodec::DecodeFormStream(): Can not load image file - "); str.append(iluErrorString(Error)); throw NOVA_EXP(str.c_str(), BAD_OPERATION); } }
void CDevILCodec::CodeToBuffer(CMemoryBuffer & out, const CImage &image, ESaveFormats ext) { ILuint imageid; CDevILFormats informat; informat.SetExFormat(image.GetPixelFormat()); // Generate the main image name to use. ilGenImages(1, &imageid); // Bind this image name. ilBindImage(imageid); ilTexImage(image.GetWidth(), image.GetHeight(), image.GetDepth(), informat.GetInternalChannels(), informat.GetFormat(), IL_UNSIGNED_BYTE, image.GetBitsPtr()); ILenum type = 0; switch(ext) { case SF_BMP: type = IL_BMP; break; case SF_ICO: type = IL_ICO; break; case SF_JPG: type = IL_JPG; break; case SF_PCX: type = IL_PCX; break; case SF_PIC: type = IL_PIC; break; case SF_PNG: type = IL_PNG; break; case SF_TGA: type = IL_TGA; break; case SF_TIF: type = IL_TIF; break; case SF_GIF: type = IL_GIF; break; case SF_DDS: type = IL_DDS; break; case SF_PIX: type = IL_PIX; break; case SF_HDR: type = IL_HDR; break; default: return; } out.AllocBuffer(image.GetSize()+0xff); ilSaveL(type, out.GetBegin(), out.GetBufferSize()); ilDeleteImages(1, &imageid); ILenum Error = 0; if((Error = ilGetError()) != NULL) { nstring str("CDevILCodec::CodeToStream: "); str.append(iluErrorString(Error)); throw NOVA_EXP(str.c_str(), BAD_OPERATION); } }