587968dc1e4efc11f2cf1a77775b5235e68d64eb
[blender-staging.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_types.h"
21
22 CCL_NAMESPACE_BEGIN
23
24 class Device;
25 class DeviceScene;
26 class Scene;
27
28 class Integrator {
29 public:
30         int min_bounce;
31         int max_bounce;
32
33         int max_diffuse_bounce;
34         int max_glossy_bounce;
35         int max_transmission_bounce;
36         int max_volume_bounce;
37         bool probalistic_termination;
38
39         int transparent_min_bounce;
40         int transparent_max_bounce;
41         bool transparent_probalistic;
42         bool transparent_shadows;
43
44         int volume_homogeneous_sampling;
45         int volume_max_steps;
46         float volume_step_size;
47
48         bool no_caustics;
49         float filter_glossy;
50
51         int seed;
52         int layer_flag;
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         bool sample_all_lights_indirect;
67
68         enum Method {
69                 BRANCHED_PATH = 0,
70                 PATH = 1
71         };
72         
73         Method method;
74
75         SamplingPattern sampling_pattern;
76
77         bool need_update;
78
79         Integrator();
80         ~Integrator();
81
82         void device_update(Device *device, DeviceScene *dscene, Scene *scene);
83         void device_free(Device *device, DeviceScene *dscene);
84
85         bool modified(const Integrator& integrator);
86         void tag_update(Scene *scene);
87 };
88
89 CCL_NAMESPACE_END
90
91 #endif /* __INTEGRATOR_H__ */
92