Blender V4.3
render_result.cc File Reference
#include <cerrno>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "BLI_hash_md5.hh"
#include "BLI_listbase.h"
#include "BLI_path_utils.hh"
#include "BLI_rect.h"
#include "BLI_string.h"
#include "BLI_string_utils.hh"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
#include "BKE_appdir.hh"
#include "BKE_global.hh"
#include "BKE_image.hh"
#include "BKE_image_format.hh"
#include "BKE_image_save.hh"
#include "BKE_main.hh"
#include "BKE_report.hh"
#include "BKE_scene.hh"
#include "IMB_colormanagement.hh"
#include "IMB_imbuf.hh"
#include "IMB_imbuf_types.hh"
#include "IMB_openexr.hh"
#include "GPU_texture.hh"
#include "render_result.h"
#include "render_types.h"

Go to the source code of this file.

Macros

#define CHECK_PASS(NAME)
 

Functions

Free
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_free_gpu_texture_caches (RenderResult *rr)
 
Multi-View
void render_result_views_shallowcopy (RenderResult *dst, RenderResult *src)
 
void render_result_views_shallowdelete (RenderResult *rr)
 
New
static int get_num_planes_for_pass_ibuf (const RenderPass &render_pass)
 
static void assign_render_pass_ibuf_colorspace (RenderPass &render_pass)
 
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, const 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_pass_set_buffer_data (RenderPass *pass, float *data)
 
GPUTexture * RE_pass_ensure_gpu_texture_cache (Render *re, RenderPass *rpass)
 
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)
 
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)
 
Merge
static void do_merge_tile (RenderResult *rr, RenderResult *rrpart, float *target, float *tile, int pixsize)
 
void render_result_merge (RenderResult *rr, RenderResult *rrpart)
 
Combined Pixel Rect
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, uint *rect, int rectx, int recty, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const int view_id)
 
Multi-View Functions
bool RE_HasCombinedLayer (const RenderResult *result)
 
bool RE_HasFloatPixels (const RenderResult *result)
 
bool RE_RenderResult_is_stereo (const RenderResult *result)
 
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)
 
ImBufRE_RenderPassEnsureImBuf (RenderPass *render_pass)
 
ImBufRE_RenderViewEnsureImBuf (const RenderResult *render_result, RenderView *render_view)
 
bool RE_RenderPassIsColor (const RenderPass *render_pass)
 

Single Layer Rendering

#define FILE_CACHE_MAX   (FILE_MAXDIR + FILE_MAXFILE + MAX_ID_NAME + 100)
 
void render_result_single_layer_begin (Render *re)
 
void render_result_single_layer_end (Render *re)
 
bool render_result_exr_file_read_path (RenderResult *rr, RenderLayer *rl_single, ReportList *reports, const char *filepath)
 
static void render_result_exr_file_cache_path (Scene *sce, const char *root, char r_path[FILE_CACHE_MAX])
 
void render_result_exr_file_cache_write (Render *re)
 
bool render_result_exr_file_cache_read (Render *re)
 

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)
int len

Referenced by passtype_from_name().

◆ FILE_CACHE_MAX

Function Documentation

◆ assign_render_pass_ibuf_colorspace()

◆ do_merge_tile()

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

◆ duplicate_render_layer()

◆ duplicate_render_pass()

static RenderPass * duplicate_render_pass ( RenderPass * rpass)
static

◆ duplicate_render_view()

static RenderView * duplicate_render_view ( RenderView * rview)
static

Definition at line 1317 of file render_result.cc.

References RenderView::ibuf, and IMB_dupImBuf().

Referenced by RE_DuplicateRenderResult().

◆ get_num_planes_for_pass_ibuf()

static int get_num_planes_for_pass_ibuf ( const RenderPass & render_pass)
static

◆ ml_addlayer_cb()

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

◆ ml_addpass_cb()

◆ 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 532 of file render_result.cc.

References BLI_str_partition(), CHECK_PASS, and len.

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()

◆ RE_HasCombinedLayer()

bool RE_HasCombinedLayer ( const RenderResult * result)

◆ RE_HasFloatPixels()

bool RE_HasFloatPixels ( const RenderResult * result)

◆ RE_pass_ensure_gpu_texture_cache()

GPUTexture * RE_pass_ensure_gpu_texture_cache ( struct Render * re,
struct RenderPass * rpass )

◆ RE_pass_set_buffer_data()

void RE_pass_set_buffer_data ( struct RenderPass * pass,
float * data )

Set the buffer data of the render pass. The pass takes ownership of the data, and creates an implicit sharing handle to allow its sharing with other users.

Definition at line 455 of file render_result.cc.

References IB_TAKE_OWNERSHIP, IMB_assign_float_buffer(), and RE_RenderPassEnsureImBuf().

Referenced by ml_addpass_cb().

◆ 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()

◆ RE_render_result_rect_to_ibuf()

◆ RE_RenderPassEnsureImBuf()

◆ RE_RenderPassIsColor()

bool RE_RenderPassIsColor ( const RenderPass * render_pass)

◆ RE_RenderResult_is_stereo()

bool RE_RenderResult_is_stereo ( const RenderResult * result)

◆ RE_RenderViewEnsureImBuf()

◆ RE_RenderViewGetById()

◆ RE_RenderViewGetByName()

◆ render_layer_add_pass()

◆ render_layer_allocate_pass()

◆ render_result_clone_passes()

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

◆ render_result_exr_file_cache_path()

◆ render_result_exr_file_cache_read()

◆ render_result_exr_file_cache_write()

◆ render_result_exr_file_read_path()

bool render_result_exr_file_read_path ( struct RenderResult * rr,
struct RenderLayer * rl_single,
struct ReportList * reports,
const char * filepath )

◆ render_result_free()

◆ render_result_free_gpu_texture_caches()

void render_result_free_gpu_texture_caches ( struct RenderResult * rr)

Free GPU texture caches to reduce memory usage.

Definition at line 122 of file render_result.cc.

References IMB_free_gpu_textures(), RenderResult::layers, and LISTBASE_FOREACH.

Referenced by re_gpu_texture_caches_free().

◆ 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 107 of file render_result.cc.

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 805 of file render_result.cc.

References ImBufFloatBuffer::data, do_merge_tile(), ListBase::first, ImBuf::float_buffer, RenderResult::ibuf, RenderResult::layers, LISTBASE_FOREACH, RenderLayer::passes, RE_GetRenderLayer(), and STREQ.

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

◆ render_result_new()

◆ 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()

◆ render_result_rect_fill_zero()

◆ render_result_rect_get_pixels()

void render_result_rect_get_pixels ( RenderResult * rr,
uint * 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 850 of file render_result.cc.

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

Referenced by render_init_from_main().

◆ render_result_single_layer_end()

◆ render_result_view_new()

void render_result_view_new ( RenderResult * rr,
const char * viewname )

Definition at line 748 of file render_result.cc.

References BLI_addtail(), RenderView::name, STRNCPY, and RenderResult::views.

Referenced by RE_InitState(), and render_result_views_new().

◆ render_result_views_free()

static void render_result_views_free ( RenderResult * rr)
static

◆ render_result_views_new()

◆ 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 137 of file render_result.cc.

References BLI_addtail(), RenderView::ibuf, LISTBASE_FOREACH, RenderView::name, STRNCPY, 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 155 of file render_result.cc.

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

Referenced by RE_ReleaseResultImageViews().