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