diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-04-09 16:54:13 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-04-10 15:49:49 +0400 |
commit | f93bc7693a530632455d3ec7acc4bce54a1f85bc (patch) | |
tree | d0e067438cbc547875b3cb77e53904c5ea2a537d /intern/cycles/device | |
parent | 19e627cab34a04a3d01b2e3a868b7bf91d56e8f9 (diff) |
Backport revisions for the 2.70a releasev2.70a
d2660a0, 6e99fb0, 58c22d8, 83f2012 + ff21f6a, a7ed1db. cc6b106
7997e38, 9d4b54b, efb48fc, 3fc293c, 29f359c, 77c1d17, 92a539e,
c626462, f48828b, 6452d9f, 765d077, 74518b2, af16d46, 8da4936,
6babbf5, f0106d2, f88776b, ee72cba, 467596d, e21a7b3, eed3974,
71a2ff1, ccf9afd, 44d6c68, 30fdfc3, b69809c, b0a8e4c, bd57ec6,
3b0832d, 2a25676, 3977b76, fb25a86, 9bbb30b, 51abc2b, 0ebade5,
2c0e32f, 3deaf7d, ea01b24, c61eb64, f3db038, a6fb670, eedde31,
b66a954, 7ff123c, f5b79df, 7148c97, 54a8753, fcaa018, 4c73001,
7a21330, 07578be, e9a64e2, fd3de8b, ae792e9, b7712a7 + 3600622,
d9557d0, 6d973b8, 688257d, 4acb57a, 95ac6bc,
Also backported openmp changes to sculpt making it so number
of real CPU cores is used as a number of threads here.
Diffstat (limited to 'intern/cycles/device')
-rw-r--r-- | intern/cycles/device/device.cpp | 11 | ||||
-rw-r--r-- | intern/cycles/device/device.h | 8 | ||||
-rw-r--r-- | intern/cycles/device/device_cuda.cpp | 13 | ||||
-rw-r--r-- | intern/cycles/device/device_multi.cpp | 5 |
4 files changed, 31 insertions, 6 deletions
diff --git a/intern/cycles/device/device.cpp b/intern/cycles/device/device.cpp index a3264f0c516..7fd1b79f6bc 100644 --- a/intern/cycles/device/device.cpp +++ b/intern/cycles/device/device.cpp @@ -53,7 +53,8 @@ void Device::pixels_free(device_memory& mem) mem_free(mem); } -void Device::draw_pixels(device_memory& rgba, int y, int w, int h, int dy, int width, int height, bool transparent) +void Device::draw_pixels(device_memory& rgba, int y, int w, int h, int dy, int width, int height, bool transparent, + const DeviceDrawParams &draw_params) { pixels_copy_from(rgba, y, w, h); @@ -80,6 +81,10 @@ void Device::draw_pixels(device_memory& rgba, int y, int w, int h, int dy, int w glEnable(GL_TEXTURE_2D); + if(draw_params.bind_display_space_shader_cb) { + draw_params.bind_display_space_shader_cb(); + } + glPushMatrix(); glTranslatef(0.0f, (float)dy, 0.0f); @@ -98,6 +103,10 @@ void Device::draw_pixels(device_memory& rgba, int y, int w, int h, int dy, int w glPopMatrix(); + if(draw_params.unbind_display_space_shader_cb) { + draw_params.unbind_display_space_shader_cb(); + } + glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_TEXTURE_2D); glDeleteTextures(1, &texid); diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h index bd309e35788..fba44485810 100644 --- a/intern/cycles/device/device.h +++ b/intern/cycles/device/device.h @@ -69,6 +69,11 @@ public: /* Device */ +struct DeviceDrawParams { + boost::function<void(void)> bind_display_space_shader_cb; + boost::function<void(void)> unbind_display_space_shader_cb; +}; + class Device { protected: Device(DeviceInfo& info_, Stats &stats_, bool background) : background(background), info(info_), stats(stats_) {} @@ -121,7 +126,8 @@ public: /* opengl drawing */ virtual void draw_pixels(device_memory& mem, int y, int w, int h, - int dy, int width, int height, bool transparent); + int dy, int width, int height, bool transparent, + const DeviceDrawParams &draw_params); #ifdef WITH_NETWORK /* networking */ diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp index 0fbb48cf431..029293d2a04 100644 --- a/intern/cycles/device/device_cuda.cpp +++ b/intern/cycles/device/device_cuda.cpp @@ -892,7 +892,8 @@ public: } } - void draw_pixels(device_memory& mem, int y, int w, int h, int dy, int width, int height, bool transparent) + void draw_pixels(device_memory& mem, int y, int w, int h, int dy, int width, int height, bool transparent, + const DeviceDrawParams &draw_params) { if(!background) { PixelMem pmem = pixel_mem_map[mem.device_pointer]; @@ -925,6 +926,10 @@ public: glColor3f(1.0f, 1.0f, 1.0f); + if(draw_params.bind_display_space_shader_cb) { + draw_params.bind_display_space_shader_cb(); + } + glPushMatrix(); glTranslatef(0.0f, (float)dy, 0.0f); @@ -943,6 +948,10 @@ public: glPopMatrix(); + if(draw_params.unbind_display_space_shader_cb) { + draw_params.unbind_display_space_shader_cb(); + } + if(transparent) glDisable(GL_BLEND); @@ -954,7 +963,7 @@ public: return; } - Device::draw_pixels(mem, y, w, h, dy, width, height, transparent); + Device::draw_pixels(mem, y, w, h, dy, width, height, transparent, draw_params); } void thread_run(DeviceTask *task) diff --git a/intern/cycles/device/device_multi.cpp b/intern/cycles/device/device_multi.cpp index 27b9de0769e..5cb1069d244 100644 --- a/intern/cycles/device/device_multi.cpp +++ b/intern/cycles/device/device_multi.cpp @@ -233,7 +233,8 @@ public: mem.device_pointer = tmp; } - void draw_pixels(device_memory& rgba, int y, int w, int h, int dy, int width, int height, bool transparent) + void draw_pixels(device_memory& rgba, int y, int w, int h, int dy, int width, int height, bool transparent, + const DeviceDrawParams &draw_params) { device_ptr tmp = rgba.device_pointer; int i = 0, sub_h = h/devices.size(); @@ -247,7 +248,7 @@ public: /* adjust math for w/width */ rgba.device_pointer = sub.ptr_map[tmp]; - sub.device->draw_pixels(rgba, sy, w, sh, sdy, width, sheight, transparent); + sub.device->draw_pixels(rgba, sy, w, sh, sdy, width, sheight, transparent, draw_params); i++; } |