1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2007 Blender Foundation.
17  * All rights reserved.
18  */
19 
20 /** \file
21  * \ingroup render
22  */
23 
24 #pragma once
25 
26 #define PASS_VECTOR_MAX 10000.0f
27 
28 #define RR_USE_MEM 0
29 #define RR_USE_EXR 1
30 
31 #define RR_ALL_LAYERS NULL
32 #define RR_ALL_VIEWS NULL
33 
34 struct ColorManagedDisplaySettings;
35 struct ColorManagedViewSettings;
36 struct ImBuf;
37 struct ListBase;
38 struct Render;
39 struct RenderData;
40 struct RenderEngine;
41 struct RenderLayer;
42 struct RenderResult;
43 struct Scene;
44 struct rcti;
45 
46 #ifdef __cplusplus
47 extern "C" {
48 #endif
49 
50 /* New */
51 
52 struct RenderResult *render_result_new(struct Render *re,
53                                        struct rcti *partrct,
54                                        int crop,
55                                        int savebuffers,
56                                        const char *layername,
57                                        const char *viewname);
58 
59 struct RenderResult *render_result_new_from_exr(
60     void *exrhandle, const char *colorspace, bool predivide, int rectx, int recty);
61 
62 void render_result_view_new(struct RenderResult *rr, const char *viewname);
63 void render_result_views_new(struct RenderResult *rr, const struct RenderData *rd);
64 
65 /* Merge */
66 
67 void render_result_merge(struct RenderResult *rr, struct RenderResult *rrpart);
68 
69 /* Add Passes */
70 
71 void render_result_clone_passes(struct Render *re, struct RenderResult *rr, const char *viewname);
72 
73 /* Free */
74 
75 void render_result_free(struct RenderResult *rr);
76 void render_result_free_list(struct ListBase *lb, struct RenderResult *rr);
77 
78 /* Single Layer Render */
79 
80 void render_result_single_layer_begin(struct Render *re);
81 void render_result_single_layer_end(struct Render *re);
82 
83 /* EXR Tile File Render */
84 
85 void render_result_save_empty_result_tiles(struct Render *re);
86 void render_result_exr_file_begin(struct Render *re, struct RenderEngine *engine);
87 void render_result_exr_file_end(struct Render *re, struct RenderEngine *engine);
88 
89 /* render pass wrapper for gpencil */
90 struct RenderPass *render_layer_add_pass(struct RenderResult *rr,
91                                          struct RenderLayer *rl,
92                                          int channels,
93                                          const char *name,
94                                          const char *viewname,
95                                          const char *chan_id);
96 
97 void render_result_exr_file_merge(struct RenderResult *rr,
98                                   struct RenderResult *rrpart,
99                                   const char *viewname);
100 
101 void render_result_exr_file_path(struct Scene *scene,
102                                  const char *layname,
103                                  int sample,
104                                  char *filepath);
105 int render_result_exr_file_read_path(struct RenderResult *rr,
106                                      struct RenderLayer *rl_single,
107                                      const char *filepath);
108 
109 /* EXR cache */
110 
111 void render_result_exr_file_cache_write(struct Render *re);
112 bool render_result_exr_file_cache_read(struct Render *re);
113 
114 /* Combined Pixel Rect */
115 
116 struct ImBuf *render_result_rect_to_ibuf(struct RenderResult *rr,
117                                          const struct RenderData *rd,
118                                          const int view_id);
119 
120 void render_result_rect_fill_zero(struct RenderResult *rr, const int view_id);
121 void render_result_rect_get_pixels(struct RenderResult *rr,
122                                    unsigned int *rect,
123                                    int rectx,
124                                    int recty,
125                                    const struct ColorManagedViewSettings *view_settings,
126                                    const struct ColorManagedDisplaySettings *display_settings,
127                                    const int view_id);
128 
129 void render_result_views_shallowcopy(struct RenderResult *dst, struct RenderResult *src);
130 void render_result_views_shallowdelete(struct RenderResult *rr);
131 bool render_result_has_views(struct RenderResult *rr);
132 
133 #define FOREACH_VIEW_LAYER_TO_RENDER_BEGIN(re_, iter_) \
134   { \
135     int nr_; \
136     ViewLayer *iter_; \
137     for (nr_ = 0, iter_ = (re_)->view_layers.first; iter_ != NULL; iter_ = iter_->next, nr_++) { \
138       if (!G.background && (re_)->r.scemode & R_SINGLE_LAYER) { \
139         if (nr_ != re->active_view_layer) { \
140           continue; \
141         } \
142       } \
143       else { \
144         if ((iter_->flag & VIEW_LAYER_RENDER) == 0) { \
145           continue; \
146         } \
147       }
148 
149 #define FOREACH_VIEW_LAYER_TO_RENDER_END \
150   } \
151   } \
152   ((void)0)
153 
154 #ifdef __cplusplus
155 }
156 #endif
157