Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
m---------release/datafiles/locale0
m---------release/scripts/addons0
m---------release/scripts/addons_contrib0
m---------scons0
-rw-r--r--source/blender/compositor/operations/COM_SunBeamsOperation.cpp27
5 files changed, 17 insertions, 10 deletions
diff --git a/release/datafiles/locale b/release/datafiles/locale
-Subproject 5ea1456cf5bf9caa32d4988284cc0b75637dd45
+Subproject 18bf273c38b0d52429274159f1d4d4d00be59e3
diff --git a/release/scripts/addons b/release/scripts/addons
-Subproject 59ff66fa7aca6a56dfa516ee4a456428516d2c6
+Subproject 655cd369b4b34e2969a3b167394e00caf0fde4b
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
-Subproject 9c1b7252bb510cc527c4ef2fd5aa3b586d095e9
+Subproject 8f33ffcebed445755d3453b8f486306bcf2b142
diff --git a/scons b/scons
-Subproject 1ec93106c40fab0c339d09c7ed9897c85ddf3da
+Subproject 625d446ae8996ff1b3d660c44e2827fc832cf12
diff --git a/source/blender/compositor/operations/COM_SunBeamsOperation.cpp b/source/blender/compositor/operations/COM_SunBeamsOperation.cpp
index 5caaff7d975..bcef652a8b5 100644
--- a/source/blender/compositor/operations/COM_SunBeamsOperation.cpp
+++ b/source/blender/compositor/operations/COM_SunBeamsOperation.cpp
@@ -138,6 +138,7 @@ struct BufferLineAccumulator {
int x, y, num;
float v, dv;
float falloff_factor;
+ float border[4];
if ((int)pt_ofs[0] == 0 && (int)pt_ofs[1] == 0) {
copy_v4_v4(output, input->getBuffer() + COM_NUMBER_OF_CHANNELS * ((int)source[0] + input->getWidth() * (int)source[1]));
@@ -146,19 +147,26 @@ struct BufferLineAccumulator {
/* initialise the iteration variables */
float *buffer = init_buffer_iterator(input, source, pt_ofs, dist_min, dist_max, x, y, num, v, dv, falloff_factor);
-
- int tot = 0;
+ zero_v3(border);
+ border[3] = 1.0f;
/* v_local keeps track of when to decrement v (see below) */
float v_local = v - floorf(v);
for (int i = 0; i < num; i++) {
- /* range check, abort when running beyond the image border */
- if (x < rect.xmin || x >= rect.xmax || y < rect.ymin || y >= rect.ymax)
- break;
-
- float f = 1.0f - (float)i * falloff_factor;
- madd_v4_v4fl(output, buffer, buffer[3] * f * f);
+ float weight = 1.0f - (float)i * falloff_factor;
+ weight *= weight;
+
+ /* range check, use last valid color when running beyond the image border */
+ if (x >= rect.xmin && x < rect.xmax && y >= rect.ymin && y < rect.ymax) {
+ madd_v4_v4fl(output, buffer, buffer[3] * weight);
+ /* use as border color in case subsequent pixels are out of bounds */
+ copy_v4_v4(border, buffer);
+ }
+ else {
+ madd_v4_v4fl(output, border, border[3] * weight);
+ }
+
/* TODO implement proper filtering here, see
* http://en.wikipedia.org/wiki/Lanczos_resampling
* http://en.wikipedia.org/wiki/Sinc_function
@@ -166,9 +174,8 @@ struct BufferLineAccumulator {
* using lanczos with x = distance from the line segment,
* normalized to a == 0.5f, could give a good result
*
- * for now just count samples and divide equally at the end ...
+ * for now just divide equally at the end ...
*/
- tot++;
/* decrement u */
x -= fxx;