Blender V4.3
engine.cc File Reference
#include <cstddef>
#include <cstdlib>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "BLI_ghash.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 "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)
 
bool RE_engine_supports_alembic_procedural (const RenderEngineType *render_type, Scene *scene)
 
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 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}
 

Function Documentation

◆ engine_depsgraph_exit()

static void engine_depsgraph_exit ( RenderEngine * engine)
static

◆ engine_depsgraph_free()

◆ engine_depsgraph_init()

◆ engine_keep_depsgraph()

◆ engine_render_add_result_pass_cb()

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

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

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

Referenced by engine_render_create_result().

◆ engine_render_create_result()

◆ engine_render_view_layer()

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

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

References RenderData::engine, Render::r, and RE_engines_find().

Referenced by blender::ed::object::bake().

◆ RE_engine_active_view_get()

const char * RE_engine_active_view_get ( RenderEngine * engine)

Definition at line 580 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 586 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 400 of file intern/engine.cc.

References 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 render() callback.

Definition at line 1196 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 1226 of file intern/engine.cc.

References BLI_mutex_unlock(), and BaseRender::engine_draw_mutex.

Referenced by external_draw_scene_do_image().

◆ 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 1186 of file intern/engine.cc.

References BaseRender::engine.

Referenced by external_draw_scene_do_image().

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

◆ RE_engine_report()

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

◆ RE_engine_set_error_message()

void RE_engine_set_error_message ( RenderEngine * engine,
const char * msg )

◆ RE_engine_supports_alembic_procedural()

bool RE_engine_supports_alembic_procedural ( const RenderEngineType * render_type,
Scene * scene )

Return true if the RenderEngineType has native support for direct loading of Alembic data. For Cycles, this also checks that the experimental feature set is enabled.

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

References BKE_scene_uses_cycles(), BKE_scene_uses_cycles_experimental_features(), RenderEngineType::flag, and RE_USE_ALEMBIC_PROCEDURAL.

Referenced by BKE_cache_file_uses_render_procedural(), and uiTemplateCacheFileProcedural().

◆ RE_engine_test_break()

◆ RE_engine_tile_highlight_clear_all()

void RE_engine_tile_highlight_clear_all ( RenderEngine * engine)

◆ RE_engine_tile_highlight_set()

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

void RE_engines_exit ( void )

◆ RE_engines_find()

◆ RE_engines_init()

void RE_engines_init ( void )

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

References DRW_engines_register().

Referenced by main(), blender::bke::tests::TEST(), and blender::bke::tests::TEST().

◆ RE_engines_register()

void RE_engines_register ( RenderEngineType * render_type)

◆ 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

◆ R_engines