DFBResult dfb_surface_init_palette( CoreDFB *core, CoreSurface *surface ) { DFBResult ret; CorePalette *palette; ret = dfb_palette_create( core, 1 << DFB_COLOR_BITS_PER_PIXEL( surface->config.format ), &palette ); if (ret) { D_DERROR( ret, "Core/Surface: Error creating palette!\n" ); return ret; } switch (surface->config.format) { case DSPF_LUT8: dfb_palette_generate_rgb332_map( palette ); break; case DSPF_ALUT44: dfb_palette_generate_rgb121_map( palette ); break; default: break; } dfb_surface_set_palette( surface, palette ); dfb_palette_unref( palette ); return DFB_OK; }
DFBResult ICore_Real::CreatePalette( u32 size, CorePalette **ret_palette ) { D_DEBUG_AT( DirectFB_CoreDFB, "ICore_Real::%s( %p )\n", __FUNCTION__, core ); D_MAGIC_ASSERT( obj, CoreDFB ); D_ASSERT( ret_palette != NULL ); return dfb_palette_create( obj, size, ret_palette ); }
static DFBResult primaryReallocateSurface( CoreLayer *layer, void *driver_data, void *layer_data, void *region_data, CoreLayerRegionConfig *config, CoreSurface *surface ) { DFBResult ret; CoreSurfaceConfig conf; conf.flags = CSCONF_SIZE | CSCONF_FORMAT | CSCONF_CAPS; conf.size.w = config->width; conf.size.h = config->height; conf.format = config->format; conf.caps = DSCAPS_SYSTEMONLY; if (config->buffermode != DLBM_FRONTONLY) conf.caps |= DSCAPS_DOUBLE; ret = dfb_surface_reconfig( surface, &conf ); if (ret) return ret; if (DFB_PIXELFORMAT_IS_INDEXED(config->format) && !surface->palette) { DFBResult ret; CorePalette *palette; ret = dfb_palette_create( NULL, /* FIXME */ 1 << DFB_COLOR_BITS_PER_PIXEL( config->format ), &palette ); if (ret) return ret; if (config->format == DSPF_LUT8) dfb_palette_generate_rgb332_map( palette ); dfb_surface_set_palette( surface, palette ); dfb_palette_unref( palette ); } return DFB_OK; }