\r
boost::unique_future<spl::shared_ptr<texture>> copy_async(const array<std::uint8_t>& source, int width, int height, int stride)\r
{\r
- //auto buf = source.storage<spl::shared_ptr<buffer>>();\r
- auto buf = create_buffer(source.size(), buffer::usage::write_only);\r
- tbb::parallel_for(tbb::blocked_range<std::size_t>(0, source.size()), [&](const tbb::blocked_range<std::size_t>& r)\r
+ std::shared_ptr<buffer> buf;\r
+\r
+ try\r
{\r
- A_memcpy(buf->data() + r.begin(), source.data() + r.begin(), r.size());\r
- });\r
+ buf = source.storage<spl::shared_ptr<buffer>>();\r
+ }\r
+ catch(boost::bad_any_cast&)\r
+ { \r
+ buf = create_buffer(source.size(), buffer::usage::write_only);\r
+ tbb::parallel_for(tbb::blocked_range<std::size_t>(0, source.size()), [&](const tbb::blocked_range<std::size_t>& r)\r
+ {\r
+ A_memcpy(buf->data() + r.begin(), source.data() + r.begin(), r.size());\r
+ });\r
+ }\r
\r
return render_executor_.begin_invoke([=]() -> spl::shared_ptr<texture>\r
{\r