bool synfig::Target_Tile::call_renderer(Context &context, const etl::handle<rendering::SurfaceSW> &surfacesw, int quality, const RendDesc &renddesc, ProgressCallback *cb) { surfacesw->set_size(renddesc.get_w(), renddesc.get_h()); if (get_engine().empty()) { if(!context.accelerated_render(&surfacesw->get_surface(),quality,renddesc,0)) { // For some reason, the accelerated renderer failed. if(cb)cb->error(_("Accelerated Renderer Failure")); return false; } } else { rendering::Task::Handle task = context.build_rendering_task(); if (task) { rendering::Renderer::Handle renderer = rendering::Renderer::get_renderer(get_engine()); if (!renderer) throw "Renderer '" + get_engine() + "' not found"; task->target_surface = surfacesw; task->target_surface->create(); task->init_target_rect(RectInt(VectorInt::zero(), surfacesw->get_size()), renddesc.get_tl(), renddesc.get_br()); rendering::Task::List list; list.push_back(task); renderer->run(list); } } return true; }