Blender V5.0
engine.cc File Reference
#include <cstddef>
#include <cstdlib>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "BLI_listbase.h"
#include "BLI_math_bits.h"
#include "BLI_string.h"
#include "BLI_utildefines.h"
#include "DNA_object_types.h"
#include "BKE_camera.h"
#include "BKE_global.hh"
#include "BKE_node.hh"
#include "BKE_report.hh"
#include "BKE_scene.hh"
#include "DEG_depsgraph.hh"
#include "DEG_depsgraph_debug.hh"
#include "DEG_depsgraph_query.hh"
#include "GPU_context.hh"
#include "IMB_imbuf_types.hh"
#include "RE_bake.h"
#include "RE_engine.h"
#include "RE_pipeline.h"
#include "DRW_engine.hh"
#include "WM_api.hh"
#include "CLG_log.h"
#include "pipeline.hh"
#include "render_result.h"
#include "render_types.h"

Go to the source code of this file.

Functions

void RE_engines_init ()
void RE_engines_exit ()
void RE_engines_register (RenderEngineType *render_type)
RenderEngineTypeRE_engines_find (const char *idname)
bool RE_engine_is_external (const Render *re)
RenderEngineRE_engine_create (RenderEngineType *type)
static void engine_depsgraph_free (RenderEngine *engine)
void RE_engine_free (RenderEngine *engine)
static RenderResultrender_result_from_bake (RenderEngine *engine, int x, int y, int w, int h, const char *layername)
static void render_result_to_bake (RenderEngine *engine, RenderResult *rr)
RenderResultRE_engine_begin_result (RenderEngine *engine, int x, int y, int w, int h, const char *layername, const char *viewname)
static void re_ensure_passes_allocated_thread_safe (Render *re)
void RE_engine_update_result (RenderEngine *engine, RenderResult *result)
void RE_engine_add_pass (RenderEngine *engine, const char *name, int channels, const char *chan_id, const char *layername)
void RE_engine_end_result (RenderEngine *engine, RenderResult *result, bool cancel, bool highlight, bool merge_results)
RenderResultRE_engine_get_result (RenderEngine *engine)
bool RE_engine_test_break (RenderEngine *engine)
void RE_engine_update_stats (RenderEngine *engine, const char *stats, const char *info)
void RE_engine_update_progress (RenderEngine *engine, float progress)
void RE_engine_update_memory_stats (RenderEngine *engine, float mem_used, float mem_peak)
void RE_engine_report (RenderEngine *engine, int type, const char *msg)
void RE_engine_set_error_message (RenderEngine *engine, const char *msg)
RenderPassRE_engine_pass_by_index_get (RenderEngine *engine, const char *layer_name, int index)
const char * RE_engine_active_view_get (RenderEngine *engine)
void RE_engine_active_view_set (RenderEngine *engine, const char *viewname)
float RE_engine_get_camera_shift_x (RenderEngine *engine, Object *camera, bool use_spherical_stereo)
void RE_engine_get_camera_model_matrix (RenderEngine *engine, Object *camera, bool use_spherical_stereo, float r_modelmat[16])
bool RE_engine_get_spherical_stereo (RenderEngine *engine, Object *camera)
const rctiRE_engine_get_current_tiles (Render *re, int *r_total_tiles)
RenderDataRE_engine_get_render_data (Render *re)
bool RE_engine_use_persistent_data (RenderEngine *engine)
static bool engine_keep_depsgraph (RenderEngine *engine)
static void engine_depsgraph_init (RenderEngine *engine, ViewLayer *view_layer)
static void engine_depsgraph_exit (RenderEngine *engine)
void RE_engine_frame_set (RenderEngine *engine, int frame, float subframe)
void RE_bake_engine_set_engine_parameters (Render *re, Main *bmain, Scene *scene)
bool RE_bake_has_engine (const Render *re)
bool RE_bake_engine (Render *re, Depsgraph *depsgraph, Object *object, const int object_id, const BakePixel pixel_array[], const BakeTargets *targets, const eScenePassType pass_type, const int pass_filter, float result[])
static bool possibly_using_gpu_compositor (const Render *re)
static void engine_render_view_layer (Render *re, RenderEngine *engine, ViewLayer *view_layer_iter, const bool use_engine, const bool use_grease_pencil)
static void engine_render_add_result_pass_cb (void *user_data, Scene *, ViewLayer *view_layer, const char *name, int channels, const char *chanid, eNodeSocketDatatype)
static RenderResultengine_render_create_result (Render *re)
bool RE_engine_render (Render *re, bool do_all)
void RE_engine_update_render_passes (RenderEngine *engine, Scene *scene, ViewLayer *view_layer, update_render_passes_cb_t callback, void *callback_data)
void RE_engine_register_pass (RenderEngine *engine, Scene *scene, ViewLayer *view_layer, const char *name, int channels, const char *chanid, eNodeSocketDatatype type)
void RE_engine_free_blender_memory (RenderEngine *engine)
RenderEngineRE_engine_get (const Render *re)
RenderEngineRE_view_engine_get (const ViewRender *view_render)
bool RE_engine_draw_acquire (Render *re)
void RE_engine_draw_release (Render *re)
void RE_engine_tile_highlight_set (RenderEngine *engine, int x, int y, int width, int height, bool highlight)
void RE_engine_tile_highlight_clear_all (RenderEngine *engine)
GPU context manipulation.

GPU context for engine to create and update GPU resources in its own thread, without blocking the main thread. Used by Cycles' display driver to create display textures.

bool RE_engine_gpu_context_create (RenderEngine *engine)
void RE_engine_gpu_context_destroy (RenderEngine *engine)
bool RE_engine_gpu_context_enable (RenderEngine *engine)
void RE_engine_gpu_context_disable (RenderEngine *engine)
void RE_engine_gpu_context_lock (RenderEngine *engine)
void RE_engine_gpu_context_unlock (RenderEngine *engine)

Variables

ListBase R_engines = {nullptr, nullptr}
static CLG_LogRef LOG = {"render"}

Function Documentation

◆ engine_depsgraph_exit()

void engine_depsgraph_exit ( RenderEngine * engine)
static

◆ engine_depsgraph_free()

◆ engine_depsgraph_init()

◆ engine_keep_depsgraph()

◆ engine_render_add_result_pass_cb()

void engine_render_add_result_pass_cb ( void * user_data,
Scene * ,
ViewLayer * view_layer,
const char * name,
int channels,
const char * chanid,
eNodeSocketDatatype  )
static

Definition at line 957 of file intern/engine.cc.

References name, ViewLayer::name, RE_create_render_pass(), and RR_ALL_VIEWS.

Referenced by engine_render_create_result().

◆ engine_render_create_result()

◆ engine_render_view_layer()

◆ possibly_using_gpu_compositor()

◆ RE_bake_engine()

◆ RE_bake_engine_set_engine_parameters()

void RE_bake_engine_set_engine_parameters ( Render * re,
Main * bmain,
Scene * scene )

◆ RE_bake_has_engine()

bool RE_bake_has_engine ( const Render * re)

◆ RE_engine_active_view_get()

const char * RE_engine_active_view_get ( RenderEngine * engine)

Definition at line 577 of file intern/engine.cc.

References RenderEngine::re, and RE_GetActiveRenderView().

◆ RE_engine_active_view_set()

void RE_engine_active_view_set ( RenderEngine * engine,
const char * viewname )

Definition at line 583 of file intern/engine.cc.

References RenderEngine::re, and RE_SetActiveRenderView().

◆ RE_engine_add_pass()

void RE_engine_add_pass ( RenderEngine * engine,
const char * name,
int channels,
const char * chan_id,
const char * layername )

Definition at line 397 of file intern/engine.cc.

References name, RenderEngine::re, RE_create_render_pass(), and BaseRender::result.

◆ RE_engine_begin_result()

◆ RE_engine_create()

◆ RE_engine_draw_acquire()

bool RE_engine_draw_acquire ( struct Render * re)

Acquire render engine for drawing via its draw() callback.

If drawing is not possible false is returned. If drawing is possible then the engine is "acquired" so that it can not be freed by the render pipeline.

Drawing is possible if the engine has the draw() callback and it is in its Rendering callback.

Definition at line 1215 of file intern/engine.cc.

References BLI_mutex_lock(), BLI_mutex_unlock(), RenderEngineType::draw, BaseRender::engine, BaseRender::engine_draw_mutex, RenderEngine::flag, RE_ENGINE_CAN_DRAW, and RenderEngine::type.

Referenced by DRW_engine_external_acquire_for_image_editor().

◆ RE_engine_draw_release()

void RE_engine_draw_release ( Render * re)

Definition at line 1245 of file intern/engine.cc.

References BLI_mutex_unlock(), and BaseRender::engine_draw_mutex.

◆ RE_engine_end_result()

◆ RE_engine_frame_set()

◆ RE_engine_free()

◆ RE_engine_free_blender_memory()

void RE_engine_free_blender_memory ( RenderEngine * engine)

◆ RE_engine_get()

RenderEngine * RE_engine_get ( const Render * re)

Definition at line 1205 of file intern/engine.cc.

References BaseRender::engine.

◆ RE_engine_get_camera_model_matrix()

void RE_engine_get_camera_model_matrix ( RenderEngine * engine,
Object * camera,
bool use_spherical_stereo,
float r_modelmat[16] )

◆ RE_engine_get_camera_shift_x()

float RE_engine_get_camera_shift_x ( RenderEngine * engine,
Object * camera,
bool use_spherical_stereo )

◆ RE_engine_get_current_tiles()

const rcti * RE_engine_get_current_tiles ( Render * re,
int * r_total_tiles )

◆ RE_engine_get_render_data()

RenderData * RE_engine_get_render_data ( Render * re)

Definition at line 637 of file intern/engine.cc.

References Render::r.

Referenced by render_border_exec().

◆ RE_engine_get_result()

RenderResult * RE_engine_get_result ( RenderEngine * engine)

◆ RE_engine_get_spherical_stereo()

bool RE_engine_get_spherical_stereo ( RenderEngine * engine,
Object * camera )

◆ RE_engine_gpu_context_create()

bool RE_engine_gpu_context_create ( struct RenderEngine * engine)

◆ RE_engine_gpu_context_destroy()

◆ RE_engine_gpu_context_disable()

◆ RE_engine_gpu_context_enable()

◆ RE_engine_gpu_context_lock()

◆ RE_engine_gpu_context_unlock()

◆ RE_engine_is_external()

bool RE_engine_is_external ( const Render * re)

◆ RE_engine_pass_by_index_get()

RenderPass * RE_engine_pass_by_index_get ( RenderEngine * engine,
const char * layer_name,
int index )

◆ RE_engine_register_pass()

void RE_engine_register_pass ( RenderEngine * engine,
Scene * scene,
ViewLayer * view_layer,
const char * name,
int channels,
const char * chanid,
eNodeSocketDatatype type )

◆ RE_engine_render()

bool RE_engine_render ( Render * re,
bool do_all )

Definition at line 990 of file intern/engine.cc.

References BKE_report(), BKE_reports_contain(), BLI_rw_mutex_lock(), BLI_rw_mutex_unlock(), Render::camera_override, RenderEngine::camera_override, RenderData::cfra, RenderStats::cfra, CLOG_INFO, BaseRender::display, BaseRender::engine, RenderData::engine, engine_depsgraph_free(), engine_keep_depsgraph(), engine_render_create_result(), engine_render_view_layer(), ListBase::first, Render::flag, RenderEngine::flag, RenderEngineType::flag, FOREACH_VIEW_LAYER_TO_RENDER_BEGIN, FOREACH_VIEW_LAYER_TO_RENDER_END, RenderEngine::fullresult, G, GPU_backend_supported(), RenderEngine::has_grease_pencil, Render::i, Scene::id, LOG, RenderData::mode, ID::name, RenderEngineType::name, RenderResult::passes_allocated, Render::r, Scene::r, R_ANIMATION, R_BUTS_PREVIEW, R_EDGE_FRS, R_EXR_CACHE_FILE, RenderEngine::re, RE_ENGINE_ANIMATION, RE_engine_create(), RE_engine_free(), RE_ENGINE_PREVIEW, RE_ENGINE_RENDERING, RE_engine_test_break(), RE_engines_find(), RE_USE_GPU_CONTEXT, RE_USE_POSTPROCESS, RE_USE_PREVIEW, RenderEngineType::render, RenderEngineType::render_frame_finish, render_result_exr_file_cache_write(), render_result_free(), render_result_free_list(), Render::reports, RenderEngine::resolution_x, RenderEngine::resolution_y, BaseRender::result, BaseRender::resultmutex, RPT_ERROR, SCE_LAY_GREASE_PENCIL, RenderData::scemode, Render::scene, RenderStats::scene_name, STRNCPY(), THREAD_LOCK_WRITE, RenderEngine::type, Render::winx, and Render::winy.

Referenced by do_render_engine(), do_render_full_pipeline(), and RE_PreviewRender().

◆ RE_engine_report()

void RE_engine_report ( RenderEngine * engine,
int type,
const char * msg )

◆ RE_engine_set_error_message()

◆ RE_engine_test_break()

◆ RE_engine_tile_highlight_clear_all()

void RE_engine_tile_highlight_clear_all ( RenderEngine * engine)

◆ RE_engine_tile_highlight_set()

void RE_engine_tile_highlight_set ( RenderEngine * engine,
int x,
int y,
int width,
int height,
bool highlight )

◆ RE_engine_update_memory_stats()

void RE_engine_update_memory_stats ( RenderEngine * engine,
float mem_used,
float mem_peak )

◆ RE_engine_update_progress()

void RE_engine_update_progress ( RenderEngine * engine,
float progress )

◆ RE_engine_update_render_passes()

◆ RE_engine_update_result()

◆ RE_engine_update_stats()

◆ RE_engine_use_persistent_data()

bool RE_engine_use_persistent_data ( RenderEngine * engine)

◆ RE_engines_exit()

◆ RE_engines_find()

◆ RE_engines_init()

void RE_engines_init ( void )

◆ RE_engines_register()

void RE_engines_register ( RenderEngineType * render_type)

Definition at line 94 of file intern/engine.cc.

References BLI_addtail(), and R_engines.

Referenced by DRW_engines_register().

◆ re_ensure_passes_allocated_thread_safe()

◆ RE_view_engine_get()

RenderEngine * RE_view_engine_get ( const ViewRender * view_render)

◆ render_result_from_bake()

◆ render_result_to_bake()

Variable Documentation

◆ LOG

CLG_LogRef LOG = {"render"}
static

Definition at line 58 of file intern/engine.cc.

◆ R_engines