void Renderer_gl2::loadShader() { cleanShader(); //090705 qDebug(" Renderer_gl2::loadShader"); makeCurrent(); //ensure right context when multiple views animation or mouse drop try { qDebug("+++++++++ shader for Surface Object"); linkGLShader(SMgr, shaderObj, //0,0); //0, Q_CSTR(resourceTextFile(":/shader/lighting.txt") + resourceTextFile(":/shader/color_vertex.txt")), //Q_CSTR(resourceTextFile(":/shader/vertex_normal.txt")), //0); Q_CSTR(resourceTextFile(":/shader/lighting.txt") + resourceTextFile(":/shader/obj_fragment.txt"))); #ifdef TEX_LOD QString deftexlod = "#define TEX_LOD \n"; #else QString deftexlod = "#undef TEX_LOD \n"; #endif qDebug("+++++++++ shader for Volume texture2D"); linkGLShader(SMgr, shaderTex2D, 0, //Q_CSTR(resourceTextFile(":/shader/color_vertex.txt")), Q_CSTR(QString("#undef TEX3D \n") + deftexlod + resourceTextFile(":/shader/tex_fragment.txt"))); qDebug("+++++++++ shader for Volume texture3D"); linkGLShader(SMgr, shaderTex3D, 0, //Q_CSTR(resourceTextFile(":/shader/color_vertex.txt")), Q_CSTR(QString("#define TEX3D \n") + deftexlod + resourceTextFile(":/shader/tex_fragment.txt"))); } CATCH_handler("Renderer_gl2::initialze"); qDebug("+++++++++ GLSL shader setup finished."); glGenTextures(1, &texColormap); initColormap(); }
Rgb2Pseudo* initRgb2Pseudo ( JNIEnv* env, jclass clazz, Toolkit* Tlk ) { Colormap dcm; int i, j, k; XColor xclr; Rgb2Pseudo *map; dcm = DefaultColormapOfScreen( DefaultScreenOfDisplay( Tlk->dsp)); map = (Rgb2Pseudo*) AWT_MALLOC( sizeof(Rgb2Pseudo)); xclr.flags = DoRed | DoGreen | DoBlue; for ( i=0; i<8; i++ ){ for ( j=0; j<8; j++ ) { for ( k=0; k<8; k++ ) map->pix[i][j][k] = 0; } } initColormap( env, Tlk, dcm, map); Tlk->colorMode = CM_PSEUDO_256; return map; }
int main(int argc,char **argv) { int option ; const char *unzipper = NULL ; const char *infile = NULL ; setlocale(LC_ALL,""); progname = argv[0] ; nls_init(); if( argc <= 1 ) gpl_blurb() ; init_flatspec(&flatspec) ; while( (option=getopt_long(argc,argv,"-"OPTSTRING,longopts,NULL)) >= 0 ) switch(option) { #define OPTION(char,long,desc,man) case char: #include "options.i" case 1: if( infile ) add_layer_request(&flatspec,optarg); else infile = optarg ; break ; case '?': usage(stderr); default: FatalUnexpected("Getopt(_long) unexpectedly returned '%c'",option); } if( infile == NULL ) { usage(stderr); } read_or_mmap_xcf(infile,unzipper); getBasicXcfInfo() ; initColormap(); complete_flatspec(&flatspec,guessIndexed); if( flatspec.process_in_memory ) { rgba **allPixels = flattenAll(&flatspec); analyse_colormode(&flatspec,allPixels,guessIndexed); /* See if we can do alpha compaction. */ if( flatspec.partial_transparency_mode != ALLOW_PARTIAL_TRANSPARENCY && !FULLALPHA(flatspec.default_pixel) && flatspec.out_color_mode != COLOR_INDEXED ) { rgba unused = findUnusedColor(allPixels, flatspec.dim.width, flatspec.dim.height); if( unused && (flatspec.out_color_mode == COLOR_RGB || degrayPixel(unused) >= 0) ) { unsigned x,y ; unused = NEWALPHA(unused,0) ; for( y=0; y<flatspec.dim.height; y++) for( x=0; x<flatspec.dim.width; x++) if( allPixels[y][x] == 0 ) allPixels[y][x] = unused ; flatspec.default_pixel = unused ; } } shipoutWithCallback(&flatspec,allPixels,selectCallback()); } else { flattenIncrementally(&flatspec,selectCallback()); } if( libpng ) { png_write_end(libpng,libpng2); png_destroy_write_struct(&libpng,&libpng2); } if( outfile ) { closeout(outfile,flatspec.output_filename); } return 0 ; }
KisImportExportFilter::ConversionStatus KisXCFImport::loadFromDevice(QIODevice* device, KisDocument* doc) { dbgFile << "Start decoding file"; // Read the file into memory device->open(QIODevice::ReadOnly); QByteArray data = device->readAll(); xcf_file = (uint8_t*)data.data(); xcf_length = data.size(); device->close(); // Decode the data getBasicXcfInfo() ; initColormap(); dbgFile << XCF.version << "width = " << XCF.width << "height = " << XCF.height << "layers = " << XCF.numLayers; // Create the image KisImageSP image = new KisImage(doc->createUndoStore(), XCF.width, XCF.height, KoColorSpaceRegistry::instance()->rgb8(), "built image"); QVector<Layer> layers; uint maxDepth = 0; // Read layers for (int i = 0; i < XCF.numLayers; ++i) { Layer layer; xcfLayer& xcflayer = XCF.layers[i]; dbgFile << i << " name = " << xcflayer.name << " opacity = " << xcflayer.opacity << "group:" << xcflayer.isGroup << xcflayer.pathLength; dbgFile << ppVar(xcflayer.dim.width) << ppVar(xcflayer.dim.height) << ppVar(xcflayer.dim.tilesx) << ppVar(xcflayer.dim.tilesy) << ppVar(xcflayer.dim.ntiles) << ppVar(xcflayer.dim.c.t) << ppVar(xcflayer.dim.c.l) << ppVar(xcflayer.dim.c.r) << ppVar(xcflayer.dim.c.b); maxDepth = qMax(maxDepth, xcflayer.pathLength); bool isRgbA = false; // Select the color space const KoColorSpace* colorSpace = 0; switch (xcflayer.type) { case GIMP_INDEXED_IMAGE: case GIMP_INDEXEDA_IMAGE: case GIMP_RGB_IMAGE: case GIMP_RGBA_IMAGE: colorSpace = KoColorSpaceRegistry::instance()->rgb8(); isRgbA = true; break; case GIMP_GRAY_IMAGE: case GIMP_GRAYA_IMAGE: colorSpace = KoColorSpaceRegistry::instance()->colorSpace(GrayAColorModelID.id(), Integer8BitsColorDepthID.id(), ""); isRgbA = false; break; } // Create the layer KisLayerSP kisLayer; if (xcflayer.isGroup) { kisLayer = new KisGroupLayer(image, QString::fromUtf8(xcflayer.name), xcflayer.opacity); } else { kisLayer = new KisPaintLayer(image, QString::fromUtf8(xcflayer.name), xcflayer.opacity, colorSpace); } // Set some properties kisLayer->setCompositeOpId(layerModeG2K(xcflayer.mode)); kisLayer->setVisible(xcflayer.isVisible); kisLayer->disableAlphaChannel(xcflayer.mode != GIMP_NORMAL_MODE); layer.layer = kisLayer; layer.depth = xcflayer.pathLength; // Copy the data in the image initLayer(&xcflayer); int left = xcflayer.dim.c.l; int top = xcflayer.dim.c.t; if (!xcflayer.isGroup) { // Copy the data; for (unsigned int x = 0; x < xcflayer.dim.width; x += TILE_WIDTH) { for (unsigned int y = 0; y < xcflayer.dim.height; y += TILE_HEIGHT) { rect want; want.l = x + left; want.t = y + top; want.b = want.t + TILE_HEIGHT; want.r = want.l + TILE_WIDTH; Tile* tile = getMaskOrLayerTile(&xcflayer.dim, &xcflayer.pixels, want); KisHLineIteratorSP it = kisLayer->paintDevice()->createHLineIteratorNG(x, y, TILE_WIDTH); rgba* data = tile->pixels; for (int v = 0; v < TILE_HEIGHT; ++v) { if (isRgbA) { // RGB image do { KoBgrTraits<quint8>::setRed(it->rawData(), GET_RED(*data)); KoBgrTraits<quint8>::setGreen(it->rawData(), GET_GREEN(*data)); KoBgrTraits<quint8>::setBlue(it->rawData(), GET_BLUE(*data)); KoBgrTraits<quint8>::setOpacity(it->rawData(), quint8(GET_ALPHA(*data)), 1); ++data; } while (it->nextPixel()); } else { // Grayscale image do { it->rawData()[0] = GET_RED(*data); it->rawData()[1] = GET_ALPHA(*data); ++data; } while (it->nextPixel()); } it->nextRow(); } } } // Move the layer to its position kisLayer->paintDevice()->setX(left); kisLayer->paintDevice()->setY(top); } // Create the mask if (xcflayer.hasMask) { KisTransparencyMaskSP mask = new KisTransparencyMask(); layer.mask = mask; mask->initSelection(kisLayer); for (unsigned int x = 0; x < xcflayer.dim.width; x += TILE_WIDTH) { for (unsigned int y = 0; y < xcflayer.dim.height; y += TILE_HEIGHT) { rect want; want.l = x + left; want.t = y + top; want.b = want.t + TILE_HEIGHT; want.r = want.l + TILE_WIDTH; Tile* tile = getMaskOrLayerTile(&xcflayer.dim, &xcflayer.mask, want); KisHLineIteratorSP it = mask->paintDevice()->createHLineIteratorNG(x, y, TILE_WIDTH); rgba* data = tile->pixels; for (int v = 0; v < TILE_HEIGHT; ++v) { do { it->rawData()[0] = GET_ALPHA(*data); ++data; } while (it->nextPixel()); it->nextRow(); } } } mask->paintDevice()->setX(left); mask->paintDevice()->setY(top); image->addNode(mask, kisLayer); } dbgFile << xcflayer.pixels.tileptrs; layers.append(layer); } for (int i = 0; i <= maxDepth; ++i) { addLayers(layers, image, i); } doc->setCurrentImage(image); return KisImportExportFilter::OK; }
int main(int argc,char **argv) { int option ; const char *unzipper = NULL ; const char *infile = NULL ; setlocale(LC_ALL,""); progname = argv[0] ; nls_init(); if( argc <= 1 ) gpl_blurb() ; init_flatspec(&flatspec) ; flatspec.out_color_mode = COLOR_BY_FILENAME ; while( (option=getopt_long(argc,argv,"-@#"OPTSTRING,longopts,NULL)) >= 0 ) switch(option) { #define OPTION(char,long,desc,man) case char: #include "options.i" case 1: if( infile ) add_layer_request(&flatspec,optarg); else infile = optarg ; break ; case '?': usage(stderr); case '@': /* Non-documented option for build-time test */ suppress_byline = 1 ; break ; case '#': /* Non-documented option for xcfview */ flatspec.default_pixel = CHECKERED_BACKGROUND ; break ; default: FatalUnexpected("Getopt(_long) unexpectedly returned '%c'",option); } if( infile == NULL ) { usage(stderr); } if( flatspec.out_color_mode == COLOR_BY_FILENAME && strlen(flatspec.output_filename) > 4 && flatspec.output_filename[strlen(flatspec.output_filename)-4] == '.' ) flatspec.out_color_mode = guess_color_mode(flatspec.output_filename); /* If the output filename was not enough cue, see if we're running * through a symlink/hardlink that gives the required output format */ if( flatspec.out_color_mode == COLOR_BY_FILENAME && strlen(progname) > 3 ) flatspec.out_color_mode = guess_color_mode(progname); if( flatspec.out_color_mode == COLOR_BY_FILENAME ) flatspec.out_color_mode = COLOR_BY_CONTENTS ; read_or_mmap_xcf(infile,unzipper); getBasicXcfInfo() ; initColormap(); complete_flatspec(&flatspec,NULL); if( flatspec.process_in_memory ) { rgba **allPixels = flattenAll(&flatspec); analyse_colormode(&flatspec,allPixels,NULL); shipoutWithCallback(&flatspec,allPixels,selectCallback()); } else { flattenIncrementally(&flatspec,selectCallback()); } closeout(outfile,flatspec.output_filename) ; closeout(transfile,flatspec.transmap_filename) ; return 0 ; }