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)
 
RenderPass * render_layer_add_pass (RenderResult *rr, RenderLayer *rl, int channels, const char *name, const char *viewname, const char *chan_id, const bool allocate)
 
RenderResult * render_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 void * ml_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 void * ml_addview_cb (void *base, const char *str)
 
static int order_render_passes (const void *a, const void *b)
 
RenderResult * render_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)
 
ImBuf * RE_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)
 
RenderView * RE_RenderViewGetById (RenderResult *rr, const int view_id)
 
RenderView * RE_RenderViewGetByName (RenderResult *rr, const char *viewname)
 
static RenderPass * duplicate_render_pass (RenderPass *rpass)
 
static RenderLayer * duplicate_render_layer (RenderLayer *rl)
 
static RenderView * duplicate_render_view (RenderView *rview)
 
RenderResult * RE_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().