diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index ef57849..2d48e64 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -96,8 +96,13 @@ void BlenderSession::create_session() /* create session */ session = new Session(session_params); session->scene = scene; +#if defined( _MSC_VER ) && (_MSC_VER >= 1800) + session->progress.set_update_callback(std::bind(&BlenderSession::tag_redraw, this)); + session->progress.set_cancel_callback(std::bind(&BlenderSession::test_cancel, this)); +#else session->progress.set_update_callback(function_bind(&BlenderSession::tag_redraw, this)); session->progress.set_cancel_callback(function_bind(&BlenderSession::test_cancel, this)); +#endif session->set_pause(BlenderSync::get_session_pause(b_scene, background)); /* create sync */ @@ -123,9 +128,15 @@ void BlenderSession::create_session() b_engine.use_highlight_tiles(session_params.progressive_refine == false); /* setup callbacks for builtin image support */ +#if defined( _MSC_VER ) && (_MSC_VER >= 1800) + scene->image_manager->builtin_image_info_cb = std::bind(&BlenderSession::builtin_image_info, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6); + scene->image_manager->builtin_image_pixels_cb = std::bind(&BlenderSession::builtin_image_pixels, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); + scene->image_manager->builtin_image_float_pixels_cb = std::bind(&BlenderSession::builtin_image_float_pixels, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); +#else scene->image_manager->builtin_image_info_cb = function_bind(&BlenderSession::builtin_image_info, this, _1, _2, _3, _4, _5, _6); scene->image_manager->builtin_image_pixels_cb = function_bind(&BlenderSession::builtin_image_pixels, this, _1, _2, _3); scene->image_manager->builtin_image_float_pixels_cb = function_bind(&BlenderSession::builtin_image_float_pixels, this, _1, _2, _3); +#endif } void BlenderSession::reset_session(BL::BlendData b_data_, BL::Scene b_scene_) @@ -334,8 +345,13 @@ void BlenderSession::update_render_tile(RenderTile& rtile) void BlenderSession::render() { /* set callback to write out render results */ +#if defined( _MSC_VER ) && (_MSC_VER >= 1800) + session->write_render_tile_cb = std::bind(&BlenderSession::write_render_tile, this, std::placeholders::_1); + session->update_render_tile_cb = std::bind(&BlenderSession::update_render_tile, this, std::placeholders::_1); +#else session->write_render_tile_cb = function_bind(&BlenderSession::write_render_tile, this, _1); session->update_render_tile_cb = function_bind(&BlenderSession::update_render_tile, this, _1); +#endif /* get buffer parameters */ SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background); @@ -412,8 +428,13 @@ void BlenderSession::render() } /* clear callback */ +#if defined( _MSC_VER ) && (_MSC_VER >= 1800) + session->write_render_tile_cb = std::function{}; + session->update_render_tile_cb = std::function{}; +#else session->write_render_tile_cb = NULL; session->update_render_tile_cb = NULL; +#endif /* free all memory used (host and device), so we wouldn't leave render * engine with extra memory allocated diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h index 85b6b51..126969d 100644 --- a/intern/cycles/render/image.h +++ b/intern/cycles/render/image.h @@ -63,9 +63,16 @@ public: bool need_update; +#if defined( _MSC_VER ) && (_MSC_VER >= 1800) + std::function builtin_image_info_cb; + std::function builtin_image_pixels_cb; + std::function builtin_image_float_pixels_cb; +#else boost::function builtin_image_info_cb; boost::function builtin_image_pixels_cb; boost::function builtin_image_float_pixels_cb; +#endif + private: int tex_num_images; int tex_num_float_images; diff --git a/intern/cycles/render/session.h b/intern/cycles/render/session.h index 1227edf..cdcf6d6 100644 --- a/intern/cycles/render/session.h +++ b/intern/cycles/render/session.h @@ -121,8 +121,13 @@ public: TileManager tile_manager; Stats stats; +#if defined( _MSC_VER ) && (_MSC_VER >= 1800) + std::function write_render_tile_cb; + std::function update_render_tile_cb; +#else boost::function write_render_tile_cb; boost::function update_render_tile_cb; +#endif Session(const SessionParams& params); ~Session(); diff --git a/intern/cycles/util/util_progress.h b/intern/cycles/util/util_progress.h index 5d1219b..07fc7d1 100644 --- a/intern/cycles/util/util_progress.h +++ b/intern/cycles/util/util_progress.h @@ -102,8 +102,11 @@ public: thread_scoped_lock lock(progress_mutex); return cancel_message; } - +#if defined( _MSC_VER ) && (_MSC_VER >= 1800) + void set_cancel_callback(std::function function) +#else void set_cancel_callback(boost::function function) +#endif { cancel_cb = function; } @@ -227,7 +230,11 @@ public: } } +#if defined( _MSC_VER ) && (_MSC_VER >= 1800) + void set_update_callback(std::function function) +#else void set_update_callback(boost::function function) +#endif { update_cb = function; } diff --git a/intern/cycles/util/util_task.cpp b/intern/cycles/util/util_task.cpp index 420cc54..afa1577 100644 --- a/intern/cycles/util/util_task.cpp +++ b/intern/cycles/util/util_task.cpp @@ -192,7 +192,11 @@ void TaskScheduler::init(int num_threads) threads.resize(num_threads); for(size_t i = 0; i < threads.size(); i++) +#if defined( _MSC_VER ) && (_MSC_VER >= 1800) + threads[i] = new thread(&TaskScheduler::thread_run, i); +#else threads[i] = new thread(function_bind(&TaskScheduler::thread_run, i)); +#endif } users++; diff --git a/intern/cycles/util/util_task.h b/intern/cycles/util/util_task.h index 42a1e2f..0bbed92 100644 --- a/intern/cycles/util/util_task.h +++ b/intern/cycles/util/util_task.h @@ -27,7 +27,12 @@ class Task; class TaskPool; class TaskScheduler; + +#if defined( _MSC_VER ) && (_MSC_VER >= 1800) +typedef std::function TaskRunFunction; +#else typedef boost::function TaskRunFunction; +#endif /* Task * diff --git a/intern/cycles/util/util_thread.h b/intern/cycles/util/util_thread.h index 62abe35..8a45026 100644 --- a/intern/cycles/util/util_thread.h +++ b/intern/cycles/util/util_thread.h @@ -26,8 +26,6 @@ #include #include -#include "util_function.h" - CCL_NAMESPACE_BEGIN /* use std for mutexes and thread */