diff options
author | Lukas Toenne <lukas.toenne@googlemail.com> | 2013-09-13 20:01:41 +0400 |
---|---|---|
committer | Lukas Toenne <lukas.toenne@googlemail.com> | 2013-09-13 20:01:41 +0400 |
commit | eac7c19b046c53bc41dd523f97c786bb13e373ea (patch) | |
tree | 9297eff586bf7e7b07273e64c38132d1730f75c0 | |
parent | 13263541ec2ccc6aa86e255a235e28099af5c127 (diff) |
Fix for #36720 and #36721.
This was own error in r60049 which fixed chunk number calculation. This was mixing int and unsigned int values from ExecutionGroup, which leads to huge chunk numbers which are then skipped.
-rw-r--r-- | source/blender/compositor/intern/COM_ExecutionGroup.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/source/blender/compositor/intern/COM_ExecutionGroup.cpp b/source/blender/compositor/intern/COM_ExecutionGroup.cpp index 50434e1a2a4..a4ff1ce7a19 100644 --- a/source/blender/compositor/intern/COM_ExecutionGroup.cpp +++ b/source/blender/compositor/intern/COM_ExecutionGroup.cpp @@ -525,14 +525,18 @@ bool ExecutionGroup::scheduleAreaWhenPossible(ExecutionSystem *graph, rcti *area // determine minxchunk, minychunk, maxxchunk, maxychunk where x and y are chunknumbers int indexx, indexy; - int minxchunk = (area->xmin - m_viewerBorder.xmin) / m_chunkSize; - int maxxchunk = (area->xmax + m_chunkSize - 1) / m_chunkSize; - int minychunk = (area->ymin - m_viewerBorder.ymin) / m_chunkSize; - int maxychunk = (area->ymax + m_chunkSize - 1) / m_chunkSize; + int minx = max_ii(area->xmin - m_viewerBorder.xmin, 0); + int maxx = min_ii(area->xmax - m_viewerBorder.xmin, m_viewerBorder.xmax - m_viewerBorder.xmin); + int miny = max_ii(area->ymin - m_viewerBorder.ymin, 0); + int maxy = min_ii(area->ymax - m_viewerBorder.ymin, m_viewerBorder.ymax - m_viewerBorder.ymin); + int minxchunk = minx / (int)m_chunkSize; + int maxxchunk = (maxx + (int)m_chunkSize - 1) / (int)m_chunkSize; + int minychunk = miny / (int)m_chunkSize; + int maxychunk = (maxy + (int)m_chunkSize - 1) / (int)m_chunkSize; minxchunk = max_ii(minxchunk, 0); minychunk = max_ii(minychunk, 0); - maxxchunk = min_ii(maxxchunk, m_numberOfXChunks); - maxychunk = min_ii(maxychunk, m_numberOfYChunks); + maxxchunk = min_ii(maxxchunk, (int)m_numberOfXChunks); + maxychunk = min_ii(maxychunk, (int)m_numberOfYChunks); bool result = true; for (indexx = minxchunk; indexx < maxxchunk; indexx++) { |