+ auto frame = layer.receive(format_desc); \r
+ auto frame1 = frame;\r
+ frame1.transform() *= tween.fetch_and_tick(1);\r
+\r
+ if(format_desc.field_mode != core::field_mode::progressive)\r
+ { \r
+ auto frame2 = frame;\r
+ frame2.transform() *= tween.fetch_and_tick(1);\r
+ frame1 = core::draw_frame::interlace(frame1, frame2, format_desc.field_mode);\r
+ }\r
+\r
+ frames[index] = frame1;\r
+ }\r
+\r
+ layer& get_layer(int index)\r
+ {\r
+ auto it = layers_.find(index);\r
+ if(it == std::end(layers_))\r
+ {\r
+ it = layers_.insert(std::make_pair(index, layer(index))).first;\r
+ it->second.subscribe(event_subject_);\r
+ }\r
+ return it->second;\r
+ }\r
+ \r
+ boost::unique_future<void> apply_transforms(const std::vector<std::tuple<int, stage::transform_func_t, unsigned int, tweener>>& transforms)\r
+ {\r
+ return executor_.begin_invoke([=]\r
+ {\r
+ BOOST_FOREACH(auto& transform, transforms)\r
+ {\r
+ auto src = tweens_[std::get<0>(transform)].fetch();\r
+ auto dst = std::get<1>(transform)(src);\r
+ tweens_[std::get<0>(transform)] = tweened_transform(src, dst, std::get<2>(transform), std::get<3>(transform));\r
+ }\r
+ }, task_priority::high_priority);\r
+ }\r
+ \r
+ boost::unique_future<void> apply_transform(int index, const stage::transform_func_t& transform, unsigned int mix_duration, const tweener& tween)\r
+ {\r
+ return executor_.begin_invoke([=]\r
+ {\r
+ auto src = tweens_[index].fetch();\r
+ auto dst = transform(src);\r
+ tweens_[index] = tweened_transform(src, dst, mix_duration, tween);\r
+ }, task_priority::high_priority);\r
+ }\r
+\r
+ boost::unique_future<void> clear_transforms(int index)\r
+ {\r
+ return executor_.begin_invoke([=]\r
+ {\r
+ tweens_.erase(index);\r
+ }, task_priority::high_priority);\r
+ }\r
+\r
+ boost::unique_future<void> clear_transforms()\r