Cycles-Bake: displacement support (fix T40068)
[blender-staging.git] / intern / cycles / render / bake.h
1 /*
2  * Copyright 2011-2014 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 __BAKE_H__
18 #define __BAKE_H__
19
20 #include "util_vector.h"
21 #include "device.h"
22 #include "scene.h"
23 #include "session.h"
24
25 CCL_NAMESPACE_BEGIN
26
27 class BakeData {
28 public:
29         BakeData(const int object, const int tri_offset, const int num_pixels);
30         ~BakeData();
31
32         void set(int i, int prim, float uv[2], float dudx, float dudy, float dvdx, float dvdy);
33         int object();
34         int size();
35         uint4 data(int i);
36         uint4 differentials(int i);
37         bool is_valid(int i);
38
39 private:
40         int m_object;
41         int m_tri_offset;
42         int m_num_pixels;
43         vector<int>m_primitive;
44         vector<float>m_u;
45         vector<float>m_v;
46         vector<float>m_dudx;
47         vector<float>m_dudy;
48         vector<float>m_dvdx;
49         vector<float>m_dvdy;
50 };
51
52 class BakeManager {
53 public:
54         BakeManager();
55         ~BakeManager();
56
57         bool get_baking();
58         void set_baking(const bool value);
59
60         BakeData *init(const int object, const int tri_offset, const int num_pixels);
61
62         bool bake(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress, ShaderEvalType shader_type, BakeData *bake_data, float result[]);
63
64         void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress);
65         void device_free(Device *device, DeviceScene *dscene);
66
67         bool need_update;
68
69 private:
70         BakeData *m_bake_data;
71         bool m_is_baking;
72 };
73
74 CCL_NAMESPACE_END
75
76 #endif /* __BAKE_H__ */
77