//! Constructor for usual textures COpenGLTexture::COpenGLTexture(IImage* origImage, const core::stringc& name, void* mipmapData, IVideoDriver* driver) : ITexture(name), Image(0), MipImage(0), TextureName(0), InternalFormat( GL_RGBA), PixelFormat(GL_BGRA_EXT), PixelType( GL_UNSIGNED_BYTE), HasMipMaps(false), ColorFormat( ECF_R8G8B8), Driver(driver), IsRenderTarget(false) //FIXME //AutomaticMipmapUpdate(false), //ReadOnlyLock(false), //KeepImage(true) { //TODO: refactor it //HasMipMaps = Driver->getTextureCreationFlag(ETCF_CREATE_MIP_MAPS); getImageValues(origImage); glGenTextures(1, &TextureName); if (ImageSize == TextureSize) { Image = createEmptyImage(ColorFormat, ImageSize); origImage->copyTo(Image); } else { Image = createEmptyImage(ColorFormat, TextureSize); // scale texture origImage->copyToScaling(Image); } uploadTexture(true, mipmapData); //FIXME // if (!KeepImage) // { // Image->drop(); // Image = 0; // } }
int main(int argc, char** argv) { PPMImage *image; if(argc > 1) { image = readPPM("flower.ppm"); } else { image = readStreamPPM(stdin); } AccurateImage *imageUnchanged = convertImageToNewFormat(image); // save the unchanged image from input image AccurateImage *imageBuffer = createEmptyImage(image); AccurateImage *imageSmall = createEmptyImage(image); AccurateImage *imageBig = createEmptyImage(image); PPMImage *imageOut; imageOut = (PPMImage *)malloc(sizeof(PPMImage)); imageOut->data = (PPMPixel*)malloc(image->x * image->y * sizeof(PPMPixel)); // Process the tiny case: performNewIdeaIteration(imageSmall, imageUnchanged, 2); performNewIdeaIteration(imageBuffer, imageSmall, 2); performNewIdeaIteration(imageSmall, imageBuffer, 2); performNewIdeaIteration(imageBuffer, imageSmall, 2); performNewIdeaIteration(imageSmall, imageBuffer, 2); // Process the small case: performNewIdeaIteration(imageBig, imageUnchanged,3); performNewIdeaIteration(imageBuffer, imageBig,3); performNewIdeaIteration(imageBig, imageBuffer,3); performNewIdeaIteration(imageBuffer, imageBig,3); performNewIdeaIteration(imageBig, imageBuffer,3); // save tiny case result performNewIdeaFinalization(imageSmall, imageBig, imageOut); if(argc > 1) { writePPM("flower_tiny.ppm", imageOut); } else { writeStreamPPM(stdout, imageOut); } // Process the medium case: performNewIdeaIteration(imageSmall, imageUnchanged, 5); performNewIdeaIteration(imageBuffer, imageSmall, 5); performNewIdeaIteration(imageSmall, imageBuffer, 5); performNewIdeaIteration(imageBuffer, imageSmall, 5); performNewIdeaIteration(imageSmall, imageBuffer, 5); // save small case performNewIdeaFinalization(imageBig, imageSmall,imageOut); if(argc > 1) { writePPM("flower_small.ppm", imageOut); } else { writeStreamPPM(stdout, imageOut); } // process the large case performNewIdeaIteration(imageBig, imageUnchanged, 8); performNewIdeaIteration(imageBuffer, imageBig, 8); performNewIdeaIteration(imageBig, imageBuffer, 8); performNewIdeaIteration(imageBuffer, imageBig, 8); performNewIdeaIteration(imageBig, imageBuffer, 8); // save the medium case performNewIdeaFinalization(imageSmall, imageBig, imageOut); if(argc > 1) { writePPM("flower_medium.ppm", imageOut); } else { writeStreamPPM(stdout, imageOut); } // free all memory structures freeImage(imageUnchanged); freeImage(imageBuffer); freeImage(imageSmall); freeImage(imageBig); free(imageOut->data); free(imageOut); free(image->data); free(image); return 0; }