Blender V4.3
adaptive_sampling.cpp
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
6
7#include "util/math.h"
8
10
12
13int AdaptiveSampling::align_samples(int start_sample, int num_samples) const
14{
15 if (!use) {
16 return num_samples;
17 }
18
19 /*
20 * The naive implementation goes as following:
21 *
22 * int count = 1;
23 * while (!need_filter(start_sample + count - 1) && count < num_samples) {
24 * ++count;
25 * }
26 * return count;
27 */
28
29 /* 0-based sample index at which first filtering will happen. */
30 const int first_filter_sample = (min_samples + 1) | (adaptive_step - 1);
31
32 /* Allow as many samples as possible until the first filter sample. */
33 if (start_sample + num_samples <= first_filter_sample) {
34 return num_samples;
35 }
36
37 const int next_filter_sample = max(first_filter_sample, start_sample | (adaptive_step - 1));
38
39 const int num_samples_until_filter = next_filter_sample - start_sample + 1;
40
41 return min(num_samples_until_filter, num_samples);
42}
43
45{
46 if (!use) {
47 return false;
48 }
49
50 if (sample <= min_samples) {
51 return false;
52 }
53
54 return (sample & (adaptive_step - 1)) == (adaptive_step - 1);
55}
56
bool need_filter(int sample) const
int align_samples(int start_sample, int num_samples) const
#define CCL_NAMESPACE_END
#define min(a, b)
Definition sort.c:32
float max