Blender  V3.3
Macros | Functions
render_result.c File Reference
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "MEM_guardedalloc.h"
#include "BLI_ghash.h"
#include "BLI_hash_md5.h"
#include "BLI_listbase.h"
#include "BLI_path_util.h"
#include "BLI_rect.h"
#include "BLI_string.h"
#include "BLI_string_utils.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
#include "BKE_appdir.h"
#include "BKE_camera.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_image_format.h"
#include "BKE_image_save.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "IMB_colormanagement.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
#include "IMB_openexr.h"
#include "RE_engine.h"
#include "render_result.h"
#include "render_types.h"

Go to the source code of this file.

Macros

#define RENDER_LAYER_ADD_PASS_SAFE(rr, rl, channels, name, viewname, chan_id)
 
#define CHECK_PASS(NAME)
 

Functions

static void render_result_views_free (RenderResult *rr)
 
void render_result_free (RenderResult *rr)
 
void render_result_free_list (ListBase *lb, RenderResult *rr)
 
void render_result_views_shallowcopy (RenderResult *dst, RenderResult *src)
 
void render_result_views_shallowdelete (RenderResult *rr)
 
static void render_layer_allocate_pass (RenderResult *rr, RenderPass *rp)
 
RenderPassrender_layer_add_pass (RenderResult *rr, RenderLayer *rl, int channels, const char *name, const char *viewname, const char *chan_id, const bool allocate)
 
RenderResultrender_result_new (Render *re, rcti *partrct, const char *layername, const char *viewname)
 
void render_result_passes_allocated_ensure (RenderResult *rr)
 
void render_result_clone_passes (Render *re, RenderResult *rr, const char *viewname)
 
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)
 
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)
 
static voidml_addlayer_cb (void *base, const char *str)
 
static void ml_addpass_cb (void *base, void *lay, const char *name, float *rect, int totchan, const char *chan_id, const char *view)
 
static voidml_addview_cb (void *base, const char *str)
 
static int order_render_passes (const void *a, const void *b)
 
RenderResultrender_result_new_from_exr (void *exrhandle, const char *colorspace, bool predivide, int rectx, int recty)
 
void render_result_view_new (RenderResult *rr, const char *viewname)
 
void render_result_views_new (RenderResult *rr, const RenderData *rd)
 
static void do_merge_tile (RenderResult *rr, RenderResult *rrpart, float *target, float *tile, int pixsize)
 
void render_result_merge (RenderResult *rr, RenderResult *rrpart)
 
void render_result_single_layer_begin (Render *re)
 
void render_result_single_layer_end (Render *re)
 
int render_result_exr_file_read_path (RenderResult *rr, RenderLayer *rl_single, const char *filepath)
 
static void render_result_exr_file_cache_path (Scene *sce, const char *root, char *r_path)
 
void render_result_exr_file_cache_write (Render *re)
 
bool render_result_exr_file_cache_read (Render *re)
 
ImBufRE_render_result_rect_to_ibuf (RenderResult *rr, const ImageFormatData *imf, const float dither, const int view_id)
 
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_rect_get_pixels (RenderResult *rr, unsigned int *rect, int rectx, int recty, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const int view_id)
 
bool RE_HasCombinedLayer (const RenderResult *rr)
 
bool RE_HasFloatPixels (const RenderResult *rr)
 
bool RE_RenderResult_is_stereo (const RenderResult *rr)
 
RenderViewRE_RenderViewGetById (RenderResult *rr, const int view_id)
 
RenderViewRE_RenderViewGetByName (RenderResult *rr, const char *viewname)
 
static RenderPassduplicate_render_pass (RenderPass *rpass)
 
static RenderLayerduplicate_render_layer (RenderLayer *rl)
 
static RenderViewduplicate_render_view (RenderView *rview)
 
RenderResultRE_DuplicateRenderResult (RenderResult *rr)
 

Macro Definition Documentation

◆ CHECK_PASS

#define CHECK_PASS (   NAME)
Value:
if (STREQLEN(name, RE_PASSNAME_##NAME, len)) { \
return SCE_PASS_##NAME; \
} \
((void)0)
#define STREQLEN(a, b, n)
SyclQueue void void size_t num_bytes void
int len
Definition: draw_manager.c:108

◆ RENDER_LAYER_ADD_PASS_SAFE

#define RENDER_LAYER_ADD_PASS_SAFE (   rr,
  rl,
  channels,
  name,
  viewname,
  chan_id 
)
Value:
do { \
if (render_layer_add_pass(rr, rl, channels, name, viewname, chan_id, false) == NULL) { \
render_result_free(rr); \
return NULL; \
} \
} while (false)
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
RenderPass * render_layer_add_pass(RenderResult *rr, RenderLayer *rl, int channels, const char *name, const char *viewname, const char *chan_id, const bool allocate)

Function Documentation

◆ do_merge_tile()

static void do_merge_tile ( RenderResult rr,
RenderResult rrpart,
float target,
float tile,
int  pixsize 
)
static

◆ duplicate_render_layer()

static RenderLayer* duplicate_render_layer ( RenderLayer rl)
static

◆ duplicate_render_pass()

static RenderPass* duplicate_render_pass ( RenderPass rpass)
static

◆ duplicate_render_view()

static RenderView* duplicate_render_view ( RenderView rview)
static

◆ ml_addlayer_cb()

static void* ml_addlayer_cb ( void base,
const char *  str 
)
static

◆ ml_addpass_cb()

static void ml_addpass_cb ( void base,
void lay,
const char *  name,
float rect,
int  totchan,
const char *  chan_id,
const char *  view 
)
static

◆ ml_addview_cb()

static void* ml_addview_cb ( void base,
const char *  str 
)
static

◆ order_render_passes()

static int order_render_passes ( const void a,
const void b 
)
static

◆ passtype_from_name()

static int passtype_from_name ( const char *  name)
static

Definition at line 546 of file render_result.c.

References BLI_str_partition(), CHECK_PASS, len, NORMAL, and Z.

Referenced by ml_addpass_cb(), and order_render_passes().

◆ RE_create_render_pass()

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 
)

◆ RE_DuplicateRenderResult()

RenderResult* RE_DuplicateRenderResult ( RenderResult rr)

◆ RE_HasCombinedLayer()

bool RE_HasCombinedLayer ( const RenderResult rr)

◆ RE_HasFloatPixels()

bool RE_HasFloatPixels ( const RenderResult rr)

Definition at line 1173 of file render_result.c.

References ListBase::first, and RenderResult::views.

Referenced by BKE_image_render_write(), and image_save_single().

◆ RE_render_result_full_channel_name()

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 
)

◆ RE_render_result_rect_from_ibuf()

void RE_render_result_rect_from_ibuf ( RenderResult rr,
const ImBuf ibuf,
const int  view_id 
)

◆ RE_render_result_rect_to_ibuf()

ImBuf* RE_render_result_rect_to_ibuf ( RenderResult rr,
const ImageFormatData imf,
const float  dither,
const int  view_id 
)

◆ RE_RenderResult_is_stereo()

bool RE_RenderResult_is_stereo ( const RenderResult rr)

◆ RE_RenderViewGetById()

RenderView* RE_RenderViewGetById ( RenderResult rr,
const int  view_id 
)

◆ RE_RenderViewGetByName()

RenderView* RE_RenderViewGetByName ( RenderResult rr,
const char *  viewname 
)

◆ render_layer_add_pass()

RenderPass* render_layer_add_pass ( struct RenderResult rr,
struct RenderLayer rl,
int  channels,
const char *  name,
const char *  viewname,
const char *  chan_id,
bool  allocate 
)

◆ render_layer_allocate_pass()

static void render_layer_allocate_pass ( RenderResult rr,
RenderPass rp 
)
static

◆ render_result_clone_passes()

void render_result_clone_passes ( Render re,
RenderResult rr,
const char *  viewname 
)

◆ render_result_exr_file_cache_path()

static void render_result_exr_file_cache_path ( Scene sce,
const char *  root,
char *  r_path 
)
static

◆ render_result_exr_file_cache_read()

bool render_result_exr_file_cache_read ( struct Render re)

◆ render_result_exr_file_cache_write()

void render_result_exr_file_cache_write ( Render re)

◆ render_result_exr_file_read_path()

int render_result_exr_file_read_path ( struct RenderResult rr,
struct RenderLayer rl_single,
const char *  filepath 
)

◆ render_result_free()

void render_result_free ( RenderResult rr)

◆ render_result_free_list()

void render_result_free_list ( struct ListBase lb,
struct RenderResult rr 
)

Version that's compatible with full-sample buffers.

Definition at line 114 of file render_result.c.

References BLI_remlink(), ListBase::first, RenderResult::next, and render_result_free().

Referenced by RE_engine_render().

◆ render_result_merge()

void render_result_merge ( struct RenderResult rr,
struct RenderResult rrpart 
)

Used when rendering to a full buffer, or when reading the EXR part-layer-pass file. no test happens here if it fits... we also assume layers are in sync.

Note
Is used within threads.

Definition at line 813 of file render_result.c.

References RenderPass::channels, do_merge_tile(), ListBase::first, RenderPass::fullname, RenderResult::layers, RenderLayer::name, RenderPass::next, RenderLayer::next, NULL, RenderLayer::passes, RE_GetRenderLayer(), RenderPass::rect, and STREQ.

Referenced by RE_engine_end_result(), RE_engine_update_result(), and render_result_uncrop().

◆ render_result_new()

RenderResult* render_result_new ( struct Render re,
struct rcti partrct,
const char *  layername,
const char *  viewname 
)

Called by main render as well for parts will read info from Render *re to define layers.

Note
Called in threads.

re->winx, re->winy is coordinate space of entire image, partrct the part within.

Definition at line 235 of file render_result.c.

References Render::active_view_layer, BLI_addtail(), BLI_listbase_is_empty(), BLI_rcti_cent_x(), BLI_rcti_cent_y(), BLI_rcti_size_x(), BLI_rcti_size_y(), BLI_strncpy(), Render::disprect, ListBase::first, FOREACH_VIEW_LAYER_TO_RENDER_BEGIN, FOREACH_VIEW_LAYER_TO_RENDER_END, RenderResult::layers, RenderLayer::layflag, MEM_callocN, RenderView::name, RenderLayer::name, RenderView::next, NULL, RenderResult::passes_allocated, RenderLayer::passflag, Render::r, R_BUTS_PREVIEW, RE_PASSNAME_AO, RE_PASSNAME_COMBINED, RE_PASSNAME_DIFFUSE_COLOR, RE_PASSNAME_DIFFUSE_DIRECT, RE_PASSNAME_DIFFUSE_INDIRECT, RE_PASSNAME_EMIT, RE_PASSNAME_ENVIRONMENT, RE_PASSNAME_GLOSSY_COLOR, RE_PASSNAME_GLOSSY_DIRECT, RE_PASSNAME_GLOSSY_INDIRECT, RE_PASSNAME_INDEXMA, RE_PASSNAME_INDEXOB, RE_PASSNAME_MIST, RE_PASSNAME_NORMAL, RE_PASSNAME_POSITION, RE_PASSNAME_SHADOW, RE_PASSNAME_SUBSURFACE_COLOR, RE_PASSNAME_SUBSURFACE_DIRECT, RE_PASSNAME_SUBSURFACE_INDIRECT, RE_PASSNAME_TRANSM_COLOR, RE_PASSNAME_TRANSM_DIRECT, RE_PASSNAME_TRANSM_INDIRECT, RE_PASSNAME_UV, RE_PASSNAME_VECTOR, RE_PASSNAME_Z, RenderLayer::rectx, RenderResult::rectx, RenderLayer::recty, RenderResult::recty, render_layer_add_pass(), RENDER_LAYER_ADD_PASS_SAFE, render_result_passes_allocated_ensure(), render_result_views_new(), RenderResult::renrect, SCE_LAY_FLAG_DEFAULT, SCE_PASS_AO, SCE_PASS_COMBINED, SCE_PASS_DIFFUSE_COLOR, SCE_PASS_DIFFUSE_DIRECT, SCE_PASS_DIFFUSE_INDIRECT, SCE_PASS_EMIT, SCE_PASS_ENVIRONMENT, SCE_PASS_GLOSSY_COLOR, SCE_PASS_GLOSSY_DIRECT, SCE_PASS_GLOSSY_INDIRECT, SCE_PASS_INDEXMA, SCE_PASS_INDEXOB, SCE_PASS_MIST, SCE_PASS_NORMAL, SCE_PASS_POSITION, SCE_PASS_SHADOW, SCE_PASS_SUBSURFACE_COLOR, SCE_PASS_SUBSURFACE_DIRECT, SCE_PASS_SUBSURFACE_INDIRECT, SCE_PASS_TRANSM_COLOR, SCE_PASS_TRANSM_DIRECT, SCE_PASS_TRANSM_INDIRECT, SCE_PASS_UV, SCE_PASS_VECTOR, SCE_PASS_Z, RenderData::scemode, STREQ, RenderResult::tilerect, view, RenderResult::views, Render::winx, Render::winy, rcti::xmax, rcti::xmin, RenderResult::xof, rcti::ymax, rcti::ymin, and RenderResult::yof.

Referenced by do_render_compositor(), RE_engine_begin_result(), RE_engine_render(), and render_result_uncrop().

◆ render_result_new_from_exr()

RenderResult* render_result_new_from_exr ( void exrhandle,
const char *  colorspace,
bool  predivide,
int  rectx,
int  recty 
)

◆ render_result_passes_allocated_ensure()

void render_result_passes_allocated_ensure ( RenderResult rr)

◆ render_result_rect_fill_zero()

void render_result_rect_fill_zero ( RenderResult rr,
const int  view_id 
)

◆ render_result_rect_get_pixels()

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 
)

◆ render_result_single_layer_begin()

void render_result_single_layer_begin ( Render re)

Definition at line 844 of file render_result.c.

References NULL, Render::pushedresult, RE_FreeRenderResult(), and Render::result.

Referenced by render_init_from_main().

◆ render_result_single_layer_end()

void render_result_single_layer_end ( struct Render re)

◆ render_result_view_new()

void render_result_view_new ( RenderResult rr,
const char *  viewname 
)

◆ render_result_views_free()

static void render_result_views_free ( RenderResult rr)
static

◆ render_result_views_new()

void render_result_views_new ( RenderResult rr,
const RenderData rd 
)

◆ render_result_views_shallowcopy()

void render_result_views_shallowcopy ( struct RenderResult dst,
struct RenderResult src 
)

Create a new views ListBase in rr without duplicating the memory pointers.

Definition at line 131 of file render_result.c.

References BLI_addtail(), BLI_strncpy(), MEM_mallocN, RenderView::name, RenderView::next, NULL, RenderView::rect32, RenderView::rectf, RenderView::rectz, src, and RenderResult::views.

Referenced by RE_AcquireResultImageViews().

◆ render_result_views_shallowdelete()

void render_result_views_shallowdelete ( struct RenderResult rr)

Free the views created temporarily.

Definition at line 152 of file render_result.c.

References BLI_remlink(), ListBase::first, MEM_freeN, NULL, and RenderResult::views.

Referenced by RE_ReleaseResultImageViews().