Cycles Bake
[blender-staging.git] / intern / cycles / blender / blender_session.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 __BLENDER_SESSION_H__
18 #define __BLENDER_SESSION_H__
19
20 #include "device.h"
21 #include "scene.h"
22 #include "session.h"
23 #include "bake.h"
24
25 #include "util_vector.h"
26
27 CCL_NAMESPACE_BEGIN
28
29 class Scene;
30 class Session;
31 class RenderBuffers;
32 class RenderTile;
33
34 class BlenderSession {
35 public:
36         BlenderSession(BL::RenderEngine b_engine, BL::UserPreferences b_userpref,
37                 BL::BlendData b_data, BL::Scene b_scene);
38         BlenderSession(BL::RenderEngine b_engine, BL::UserPreferences b_userpref,
39                 BL::BlendData b_data, BL::Scene b_scene,
40                 BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, int width, int height);
41
42         ~BlenderSession();
43
44         void create();
45
46         /* session */
47         void create_session();
48         void free_session();
49
50         void reset_session(BL::BlendData b_data, BL::Scene b_scene);
51
52         /* offline render */
53         void render();
54
55         void bake(BL::Object b_object, const string& pass_type, BL::BakePixel pixel_array, int num_pixels, int depth, float pixels[]);
56
57         void write_render_result(BL::RenderResult b_rr, BL::RenderLayer b_rlay, RenderTile& rtile);
58         void write_render_tile(RenderTile& rtile);
59
60         /* update functions are used to update display buffer only after sample was rendered
61          * only needed for better visual feedback */
62         void update_render_result(BL::RenderResult b_rr, BL::RenderLayer b_rlay, RenderTile& rtile);
63         void update_render_tile(RenderTile& rtile);
64
65         /* interactive updates */
66         void synchronize();
67
68         /* drawing */
69         bool draw(int w, int h);
70         void tag_redraw();
71         void tag_update();
72         void get_status(string& status, string& substatus);
73         void get_progress(float& progress, double& total_time);
74         void test_cancel();
75         void update_status_progress();
76
77         bool background;
78         Session *session;
79         Scene *scene;
80         BlenderSync *sync;
81         double last_redraw_time;
82
83         BL::RenderEngine b_engine;
84         BL::UserPreferences b_userpref;
85         BL::BlendData b_data;
86         BL::RenderSettings b_render;
87         BL::Scene b_scene;
88         BL::SpaceView3D b_v3d;
89         BL::RegionView3D b_rv3d;
90         string b_rlay_name;
91
92         string last_status;
93         float last_progress;
94
95         int width, height;
96         double start_resize_time;
97
98         void *python_thread_state;
99
100 protected:
101         void do_write_update_render_result(BL::RenderResult b_rr, BL::RenderLayer b_rlay, RenderTile& rtile, bool do_update_only);
102         void do_write_update_render_tile(RenderTile& rtile, bool do_update_only);
103
104         int builtin_image_frame(const string &builtin_name);
105         void builtin_image_info(const string &builtin_name, void *builtin_data, bool &is_float, int &width, int &height, int &depth, int &channels);
106         bool builtin_image_pixels(const string &builtin_name, void *builtin_data, unsigned char *pixels);
107         bool builtin_image_float_pixels(const string &builtin_name, void *builtin_data, float *pixels);
108 };
109
110 CCL_NAMESPACE_END
111
112 #endif /* __BLENDER_SESSION_H__ */