Cycles Bake
[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]);
33         int object();
34         int size();
35         uint4 data(int i);
36         bool is_valid(int i);
37
38 private:
39         int m_object;
40         int m_tri_offset;
41         int m_num_pixels;
42         vector<int>m_primitive;
43         vector<float>m_u;
44         vector<float>m_v;
45 };
46
47 class BakeManager {
48 public:
49         BakeManager();
50         ~BakeManager();
51
52         bool get_baking();
53         void set_baking(const bool value);
54
55         BakeData *init(const int object, const int tri_offset, const int num_pixels);
56
57         bool bake(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress, ShaderEvalType shader_type, BakeData *bake_data, float result[]);
58
59         void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress);
60         void device_free(Device *device, DeviceScene *dscene);
61
62         bool need_update;
63
64 private:
65         BakeData *m_bake_data;
66         bool m_is_baking;
67 };
68
69 CCL_NAMESPACE_END
70
71 #endif /* __BAKE_H__ */
72