Merge branch 'master' into blender2.8
[blender.git] / intern / cycles / render / integrator.h
1 /*
2  * Copyright 2011-2013 Blender Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef __INTEGRATOR_H__
18 #define __INTEGRATOR_H__
19
20 #include "kernel/kernel_types.h"
21
22 #include "graph/node.h"
23
24 CCL_NAMESPACE_BEGIN
25
26 class Device;
27 class DeviceScene;
28 class Scene;
29
30 class Integrator : public Node {
31 public:
32         NODE_DECLARE
33
34         int max_bounce;
35
36         int max_diffuse_bounce;
37         int max_glossy_bounce;
38         int max_transmission_bounce;
39         int max_volume_bounce;
40
41         int transparent_max_bounce;
42
43         int ao_bounces;
44
45         int volume_max_steps;
46         float volume_step_size;
47
48         bool caustics_reflective;
49         bool caustics_refractive;
50         float filter_glossy;
51
52         int seed;
53
54         float sample_clamp_direct;
55         float sample_clamp_indirect;
56         bool motion_blur;
57
58         int aa_samples;
59         int diffuse_samples;
60         int glossy_samples;
61         int transmission_samples;
62         int ao_samples;
63         int mesh_light_samples;
64         int subsurface_samples;
65         int volume_samples;
66         int start_sample;
67
68         bool sample_all_lights_direct;
69         bool sample_all_lights_indirect;
70         float light_sampling_threshold;
71
72         enum Method {
73                 BRANCHED_PATH = 0,
74                 PATH = 1,
75
76                 NUM_METHODS,
77         };
78
79         Method method;
80
81         SamplingPattern sampling_pattern;
82
83         bool need_update;
84
85         Integrator();
86         ~Integrator();
87
88         void device_update(Device *device, DeviceScene *dscene, Scene *scene);
89         void device_free(Device *device, DeviceScene *dscene);
90
91         bool modified(const Integrator& integrator);
92         void tag_update(Scene *scene);
93 };
94
95 CCL_NAMESPACE_END
96
97 #endif  /* __INTEGRATOR_H__ */