118 for (; rr; rr = rrnext) {
121 if (lb && lb->
first) {
139 for (rview =
src->views.first; rview; rview = rview->
next) {
178 float *rect = rp->
rect;
179 for (
int x = rectsize - 1;
x >= 0;
x--) {
184 float *rect = rp->
rect;
185 for (
int x = rectsize - 1;
x >= 0;
x--) {
195 const char *viewname,
237 const char *layername,
238 const char *viewname)
248 if (rectx <= 0 || recty <= 0) {
270 if (layername && layername[0]) {
271 if (!
STREQ(view_layer->name, layername)) {
280 rl->
layflag = view_layer->layflag;
282 rl->
passflag = view_layer->passflag;
290 if (viewname && viewname[0]) {
296 #define RENDER_LAYER_ADD_PASS_SAFE(rr, rl, channels, name, viewname, chan_id) \
298 if (render_layer_add_pass(rr, rl, channels, name, viewname, chan_id, false) == NULL) { \
299 render_result_free(rr); \
379 #undef RENDER_LAYER_ADD_PASS_SAFE
395 if (viewname && viewname[0]) {
458 for (main_rp = main_rl->
passes.
first; main_rp; main_rp = main_rp->
next) {
459 if (viewname && viewname[0] && !
STREQ(main_rp->
view, viewname)) {
478 const char *layername,
479 const char *viewname,
487 if (layername && layername[0] && !
STREQ(rl->
name, layername)) {
494 if (viewname && viewname[0] && !
STREQ(
view, viewname)) {
518 const char *passname,
519 const char *viewname,
524 const char *strings[4];
527 if (layname && layname[0]) {
528 strings[strings_len++] = layname;
530 if (passname && passname[0]) {
531 strings[strings_len++] = passname;
533 if (viewname && viewname[0]) {
534 strings[strings_len++] = viewname;
540 strings[strings_len++] = token;
548 const char delim[] = {
'.',
'\0'};
549 const char *sep, *suf;
552 #define CHECK_PASS(NAME) \
553 if (STREQLEN(name, RE_PASSNAME_##NAME, len)) { \
554 return SCE_PASS_##NAME; \
624 if (
view[0] !=
'\0') {
650 if (left_rv ==
NULL) {
673 if (passtype_b && !passtype_a) {
676 if (passtype_a && !passtype_b) {
680 if (passtype_a && passtype_b) {
681 if (passtype_a > passtype_b) {
684 if (passtype_a < passtype_b) {
720 void *exrhandle,
const char *colorspace,
bool predivide,
int rectx,
int recty)
740 rpass->
rectx = rectx;
741 rpass->
recty = recty;
796 copylen = tilex = rrpart->
rectx;
797 tiley = rrpart->
recty;
800 target += pixsize * ofs;
802 copylen *=
sizeof(
float) * pixsize;
804 ofs = pixsize * rr->
rectx;
806 for (
y = 0;
y < tiley;
y++) {
807 memcpy(target,
tile, copylen);
823 rpass = rpass->
next) {
836 rpassp = rpassp->
next;
863 printf(
"pop render result error; no current result!\n");
881 view_layer = view_layer->
next, nr++) {
901 const char *filepath)
909 printf(
"failed being read %s\n", filepath);
916 printf(
"error in reading render result: dimensions don't match\n");
919 printf(
"error in reading render result: NULL result pointer\n");
926 if (rl_single && rl_single != rl) {
932 const int xstride = rpass->
channels;
936 for (
a = 0;
a < xstride;
a++) {
940 exrhandle, rl->
name, fullname, xstride, xstride * rectx, rpass->
rect +
a);
957 char path_digest[16] = {0};
958 char path_hexdigest[33];
962 if (blendfile_path[0] !=
'\0') {
969 BLI_strncpy(filename,
"UNSAVED",
sizeof(filename));
979 sizeof(filename_full),
980 "cached_RR_%s_%s_%s.exr",
991 char *root =
U.render_cachedir;
996 printf(
"Caching exr file, %dx%d, %s\n", rr->
rectx, rr->
recty,
str);
1005 char *root =
U.render_cachedir;
1008 printf(
"read exr cache file: %s\n", filepath);
1015 printf(
"cannot read: %s\n", filepath);
1099 else if (ibuf->
rect) {
1141 else if (rv && rv->
rectf) {
1153 memset(rect, 0,
sizeof(
int) * rectx * recty);
1176 if (rview->rect32 && !rview->rectf) {
1214 *new_rpass = *rpass;
1239 *new_rview = *rview;
typedef float(TangentPoint)[2]
const char * BKE_tempdir_base(void)
Camera data-block and utility functions.
void BKE_stamp_data_free(struct StampData *stamp_data)
struct StampData * BKE_stamp_data_copy(const struct StampData *stamp_data)
bool BKE_image_render_write_exr(struct ReportList *reports, const struct RenderResult *rr, const char *filepath, const struct ImageFormatData *imf, const bool save_as_render, const char *view, int layer)
const char * BKE_main_blendfile_path_from_global(void)
bool BKE_scene_multiview_is_render_view_active(const struct RenderData *rd, const struct SceneRenderView *srv)
void * BLI_hash_md5_buffer(const char *buffer, size_t len, void *resblock)
char * BLI_hash_md5_to_hexdigest(void *resblock, char r_hex_digest[33])
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
int BLI_listbase_count_at_most(const struct ListBase *listbase, int count_max) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void void BLI_listbase_sort(struct ListBase *listbase, int(*cmp)(const void *, const void *)) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findstringindex(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_split_dirfile(const char *string, char *dir, char *file, size_t dirlen, size_t filelen)
void BLI_make_file_string(const char *relabase, char *string, const char *dir, const char *file)
bool BLI_path_extension_replace(char *path, size_t maxlen, const char *ext) ATTR_NONNULL()
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
BLI_INLINE int BLI_rcti_cent_y(const struct rcti *rct)
BLI_INLINE int BLI_rcti_cent_x(const struct rcti *rct)
size_t BLI_str_partition(const char *str, const char delim[], const char **sep, const char **suf) ATTR_NONNULL()
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
char * BLI_string_join_array_by_sep_char(char *result, size_t result_len, char sep, const char *strings[], uint strings_len) ATTR_NONNULL()
#define ARRAY_SET_ITEMS(...)
const char * dirname(char *path)
#define RE_PASSNAME_COMBINED
#define RE_PASSNAME_DIFFUSE_INDIRECT
#define RE_PASSNAME_INDEXMA
#define RE_PASSNAME_SUBSURFACE_DIRECT
#define RE_PASSNAME_NORMAL
#define RE_PASSNAME_TRANSM_DIRECT
#define RE_PASSNAME_VECTOR
#define RE_PASSNAME_TRANSM_COLOR
#define RE_PASSNAME_SUBSURFACE_INDIRECT
#define RE_PASSNAME_GLOSSY_COLOR
#define RE_PASSNAME_SUBSURFACE_COLOR
#define RE_PASSNAME_TRANSM_INDIRECT
#define RE_PASSNAME_GLOSSY_DIRECT
#define RE_PASSNAME_SHADOW
#define RE_PASSNAME_ENVIRONMENT
#define RE_PASSNAME_POSITION
#define RE_PASSNAME_DIFFUSE_COLOR
#define SCE_LAY_FLAG_DEFAULT
#define RE_PASSNAME_GLOSSY_INDIRECT
#define STEREO_RIGHT_NAME
#define RE_PASSNAME_DIFFUSE_DIRECT
#define RE_PASSNAME_INDEXOB
@ SCE_PASS_SUBSURFACE_INDIRECT
@ SCE_PASS_SUBSURFACE_COLOR
@ SCE_PASS_DIFFUSE_DIRECT
@ SCE_PASS_GLOSSY_INDIRECT
@ SCE_PASS_TRANSM_INDIRECT
@ SCE_PASS_DIFFUSE_INDIRECT
@ SCE_PASS_SUBSURFACE_DIRECT
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
void IMB_display_buffer_transform_apply(unsigned char *display_buffer, float *linear_buffer, int width, int height, int channels, const struct ColorManagedViewSettings *view_settings, const struct ColorManagedDisplaySettings *display_settings, bool predivide)
@ COLOR_ROLE_SCENE_LINEAR
const char * IMB_colormanagement_role_colorspace_name_get(int role)
void IMB_colormanagement_transform(float *buffer, int width, int height, int channels, const char *from_colorspace, const char *to_colorspace, bool predivide)
void IMB_float_from_rect(struct ImBuf *ibuf)
void IMB_color_to_bw(struct ImBuf *ibuf)
struct ImBuf * IMB_allocImBuf(unsigned int x, unsigned int y, unsigned char planes, unsigned int flags)
struct ImBuf * IMB_dupImBuf(const struct ImBuf *ibuf1)
Contains defines and structs used throughout the imbuf module.
void IMB_exr_add_channel(void *handle, const char *layname, const char *passname, const char *view, int xstride, int ystride, float *rect, bool use_half_float)
void IMB_exr_close(void *handle)
bool IMB_exr_begin_read(void *handle, const char *filepath, int *width, int *height, bool parse_channels)
void IMB_exr_read_channels(void *handle)
void IMB_exr_set_channel(void *handle, const char *layname, const char *passname, int xstride, int ystride, float *rect)
void * IMB_exr_get_handle(void)
void IMB_exr_multilayer_convert(void *handle, void *base, void *(*addview)(void *base, const char *str), void *(*addlayer)(void *base, const char *str), void(*addpass)(void *base, void *lay, const char *str, float *rect, int totchan, const char *chan_id, const char *view))
Read Guarded memory(de)allocation.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value NORMAL
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a producing a negative Combine Generate a color from its and blue channels(Deprecated)") DefNode(ShaderNode
SyclQueue void void * src
void IMB_freeImBuf(ImBuf *UNUSED(ibuf))
ccl_global const KernelWorkTile * tile
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
void RE_FreeRenderResult(RenderResult *rr)
RenderLayer * RE_GetRenderLayer(RenderResult *rr, const char *name)
static int order_render_passes(const void *a, const void *b)
static void render_result_views_free(RenderResult *rr)
void render_result_single_layer_end(Render *re)
void render_result_exr_file_cache_write(Render *re)
RenderView * RE_RenderViewGetById(RenderResult *rr, const int view_id)
static void * ml_addview_cb(void *base, const char *str)
bool RE_HasFloatPixels(const RenderResult *rr)
bool render_result_exr_file_cache_read(Render *re)
void RE_render_result_rect_from_ibuf(RenderResult *rr, const ImBuf *ibuf, const int view_id)
void render_result_rect_fill_zero(RenderResult *rr, const int view_id)
void render_result_views_shallowdelete(RenderResult *rr)
void render_result_views_new(RenderResult *rr, const RenderData *rd)
static void * ml_addlayer_cb(void *base, const char *str)
RenderPass * render_layer_add_pass(RenderResult *rr, RenderLayer *rl, int channels, const char *name, const char *viewname, const char *chan_id, const bool allocate)
bool RE_RenderResult_is_stereo(const RenderResult *rr)
void render_result_merge(RenderResult *rr, RenderResult *rrpart)
int render_result_exr_file_read_path(RenderResult *rr, RenderLayer *rl_single, const char *filepath)
void render_result_view_new(RenderResult *rr, const char *viewname)
bool RE_HasCombinedLayer(const RenderResult *rr)
RenderResult * render_result_new_from_exr(void *exrhandle, const char *colorspace, bool predivide, int rectx, int recty)
void render_result_passes_allocated_ensure(RenderResult *rr)
static void render_layer_allocate_pass(RenderResult *rr, RenderPass *rp)
void render_result_free(RenderResult *rr)
void render_result_rect_get_pixels(RenderResult *rr, unsigned int *rect, int rectx, int recty, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const int view_id)
RenderResult * render_result_new(Render *re, rcti *partrct, const char *layername, const char *viewname)
void render_result_clone_passes(Render *re, RenderResult *rr, const char *viewname)
ImBuf * RE_render_result_rect_to_ibuf(RenderResult *rr, const ImageFormatData *imf, const float dither, const int view_id)
RenderView * RE_RenderViewGetByName(RenderResult *rr, const char *viewname)
void render_result_free_list(ListBase *lb, RenderResult *rr)
void RE_render_result_full_channel_name(char *fullname, const char *layname, const char *passname, const char *viewname, const char *chan_id, const int channel)
static int passtype_from_name(const char *name)
void render_result_single_layer_begin(Render *re)
static void ml_addpass_cb(void *base, void *lay, const char *name, float *rect, int totchan, const char *chan_id, const char *view)
static RenderPass * duplicate_render_pass(RenderPass *rpass)
static RenderLayer * duplicate_render_layer(RenderLayer *rl)
static RenderView * duplicate_render_view(RenderView *rview)
void RE_create_render_pass(RenderResult *rr, const char *name, int channels, const char *chan_id, const char *layername, const char *viewname, const bool allocate)
#define RENDER_LAYER_ADD_PASS_SAFE(rr, rl, channels, name, viewname, chan_id)
RenderResult * RE_DuplicateRenderResult(RenderResult *rr)
static void render_result_exr_file_cache_path(Scene *sce, const char *root, char *r_path)
static void do_merge_tile(RenderResult *rr, RenderResult *rrpart, float *target, float *tile, int pixsize)
void render_result_views_shallowcopy(RenderResult *dst, RenderResult *src)
#define FOREACH_VIEW_LAYER_TO_RENDER_END
#define FOREACH_VIEW_LAYER_TO_RENDER_BEGIN(re_, iter_)
struct RenderLayer * next
struct RenderLayer * prev
struct RenderResult * next
struct RenderResult * prev
struct StampData * stamp_data
RenderResult * pushedresult
struct SceneRenderView * next