SCanvas::SCanvas(bool onscreen, int width, int height, uint32_t format, RedWindow *win, PixmapCache& pixmap_cache, PaletteCache& palette_cache, GlzDecoderWindow &glz_decoder_window, CSurfaces& csurfaces) : Canvas (pixmap_cache, palette_cache, glz_decoder_window, csurfaces) , _pixmap (0) { if (onscreen) { _pixmap = new RedPixmapSw(width, height, RedDrawable::format_from_surface(format), true, win); _canvas = canvas_create_for_data(width, height, format, _pixmap->get_data(), _pixmap->get_stride(), &pixmap_cache.base, &palette_cache.base, &csurfaces.base, &glz_decoder(), &jpeg_decoder(), &zlib_decoder()); } else { _canvas = canvas_create(width, height, format, &pixmap_cache.base, &palette_cache.base, &csurfaces.base, &glz_decoder(), &jpeg_decoder(), &zlib_decoder()); } if (_canvas == NULL) { THROW("create canvas failed"); } }
GCanvas::GCanvas(int width, int height, uint32_t format, RedWindow *win, RenderType rendertype, PixmapCache& pixmap_cache, PaletteCache& palette_cache, GlzDecoderWindow &glz_decoder_window, SurfacesCache &csurfaces) : Canvas(pixmap_cache, palette_cache, glz_decoder_window, csurfaces) , _pixmap (0) , _textures_lost (false) { _pixmap = new RedPixmapGL(width, height, RedDrawable::format_from_surface(format), true, win, rendertype); if (!(_canvas = gl_canvas_create(width, height, SPICE_SURFACE_FMT_DEPTH(format), &pixmap_cache.base, &palette_cache.base, &csurfaces, &glz_decoder(), &jpeg_decoder(), &zlib_decoder()))) { THROW("create canvas failed"); } }