diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-03-26 12:57:30 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-03-26 13:58:53 +0400 |
commit | 74518b28267e9b18199212fbaa3c689fa018d20c (patch) | |
tree | 71a4ea9f274f4a4301c48060984df0802af46c78 /intern/cycles/render | |
parent | 3b0832dd869b4c27f0b976e36134332cf427430c (diff) |
Fix T39420: Cycles viewport/preview flickers, when moving mouse across editors
Issue was caused by the wrong usage of OCIO GLSL binding API. To make it
work properly on pre-GLSL-1.3 drivers shader is to be enabled after the
texture is binded to the opengl context. Otherwise it wouldn't know the
proper texture size.
This is actually a regression in 2.70 and to be ported to 'a'.
Diffstat (limited to 'intern/cycles/render')
-rw-r--r-- | intern/cycles/render/buffers.cpp | 4 | ||||
-rw-r--r-- | intern/cycles/render/buffers.h | 3 | ||||
-rw-r--r-- | intern/cycles/render/session.cpp | 14 | ||||
-rw-r--r-- | intern/cycles/render/session.h | 6 |
4 files changed, 14 insertions, 13 deletions
diff --git a/intern/cycles/render/buffers.cpp b/intern/cycles/render/buffers.cpp index da1b7484b77..fc65922fc87 100644 --- a/intern/cycles/render/buffers.cpp +++ b/intern/cycles/render/buffers.cpp @@ -358,14 +358,14 @@ void DisplayBuffer::draw_set(int width, int height) draw_height = height; } -void DisplayBuffer::draw(Device *device) +void DisplayBuffer::draw(Device *device, const DeviceDrawParams& draw_params) { if(draw_width != 0 && draw_height != 0) { glPushMatrix(); glTranslatef(params.full_x, params.full_y, 0.0f); device_memory& rgba = rgba_data(); - device->draw_pixels(rgba, 0, draw_width, draw_height, 0, params.width, params.height, transparent); + device->draw_pixels(rgba, 0, draw_width, draw_height, 0, params.width, params.height, transparent, draw_params); glPopMatrix(); } diff --git a/intern/cycles/render/buffers.h b/intern/cycles/render/buffers.h index 81eaf41077f..020add6526a 100644 --- a/intern/cycles/render/buffers.h +++ b/intern/cycles/render/buffers.h @@ -31,6 +31,7 @@ CCL_NAMESPACE_BEGIN class Device; +class DeviceDrawParams; struct float4; /* Buffer Parameters @@ -114,7 +115,7 @@ public: void write(Device *device, const string& filename); void draw_set(int width, int height); - void draw(Device *device); + void draw(Device *device, const DeviceDrawParams& draw_params); bool draw_ready(); device_memory& rgba_data(); diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp index 0805a685467..2b799972a97 100644 --- a/intern/cycles/render/session.cpp +++ b/intern/cycles/render/session.cpp @@ -151,7 +151,7 @@ void Session::reset_gpu(BufferParams& buffer_params, int samples) pause_cond.notify_all(); } -bool Session::draw_gpu(BufferParams& buffer_params) +bool Session::draw_gpu(BufferParams& buffer_params, DeviceDrawParams& draw_params) { /* block for buffer access */ thread_scoped_lock display_lock(display_mutex); @@ -170,7 +170,7 @@ bool Session::draw_gpu(BufferParams& buffer_params) gpu_need_tonemap_cond.notify_all(); } - display->draw(device); + display->draw(device, draw_params); if(display_outdated && (time_dt() - reset_time) > params.text_timeout) return false; @@ -315,7 +315,7 @@ void Session::reset_cpu(BufferParams& buffer_params, int samples) pause_cond.notify_all(); } -bool Session::draw_cpu(BufferParams& buffer_params) +bool Session::draw_cpu(BufferParams& buffer_params, DeviceDrawParams& draw_params) { thread_scoped_lock display_lock(display_mutex); @@ -324,7 +324,7 @@ bool Session::draw_cpu(BufferParams& buffer_params) /* then verify the buffers have the expected size, so we don't * draw previous results in a resized window */ if(!buffer_params.modified(display->params)) { - display->draw(device); + display->draw(device, draw_params); if(display_outdated && (time_dt() - reset_time) > params.text_timeout) return false; @@ -624,12 +624,12 @@ void Session::run() progress.set_update(); } -bool Session::draw(BufferParams& buffer_params) +bool Session::draw(BufferParams& buffer_params, DeviceDrawParams &draw_params) { if(device_use_gl) - return draw_gpu(buffer_params); + return draw_gpu(buffer_params, draw_params); else - return draw_cpu(buffer_params); + return draw_cpu(buffer_params, draw_params); } void Session::reset_(BufferParams& buffer_params, int samples) diff --git a/intern/cycles/render/session.h b/intern/cycles/render/session.h index 1227edf81b6..e2a7076f250 100644 --- a/intern/cycles/render/session.h +++ b/intern/cycles/render/session.h @@ -128,7 +128,7 @@ public: ~Session(); void start(); - bool draw(BufferParams& params); + bool draw(BufferParams& params, DeviceDrawParams& draw_params); void wait(); bool ready_to_reset(); @@ -155,11 +155,11 @@ protected: void reset_(BufferParams& params, int samples); void run_cpu(); - bool draw_cpu(BufferParams& params); + bool draw_cpu(BufferParams& params, DeviceDrawParams& draw_params); void reset_cpu(BufferParams& params, int samples); void run_gpu(); - bool draw_gpu(BufferParams& params); + bool draw_gpu(BufferParams& params, DeviceDrawParams& draw_params); void reset_gpu(BufferParams& params, int samples); bool acquire_tile(Device *tile_device, RenderTile& tile); |