Blender  V3.3
Functions | Variables
engine.c File Reference
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include "MEM_guardedalloc.h"
#include "BLT_translation.h"
#include "BLI_ghash.h"
#include "BLI_listbase.h"
#include "BLI_math_bits.h"
#include "BLI_rect.h"
#include "BLI_string.h"
#include "BLI_utildefines.h"
#include "DNA_object_types.h"
#include "BKE_camera.h"
#include "BKE_colortools.h"
#include "BKE_global.h"
#include "BKE_layer.h"
#include "BKE_node.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_debug.h"
#include "DEG_depsgraph_query.h"
#include "RNA_access.h"
#include "RE_bake.h"
#include "RE_engine.h"
#include "RE_pipeline.h"
#include "DRW_engine.h"
#include "GPU_context.h"
#include "pipeline.h"
#include "render_result.h"
#include "render_types.h"

Go to the source code of this file.

Functions

void RE_engines_init (void)
 
void RE_engines_init_experimental ()
 
void RE_engines_exit (void)
 
void RE_engines_register (RenderEngineType *render_type)
 
RenderEngineType * RE_engines_find (const char *idname)
 
bool RE_engine_is_external (const Render *re)
 
bool RE_engine_is_opengl (RenderEngineType *render_type)
 
bool RE_engine_supports_alembic_procedural (const RenderEngineType *render_type, Scene *scene)
 
RenderEngine * RE_engine_create (RenderEngineType *type)
 
static void engine_depsgraph_free (RenderEngine *engine)
 
void RE_engine_free (RenderEngine *engine)
 
static RenderResult * render_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)
 
static HighlightedTile highlighted_tile_from_result_get (Render *UNUSED(re), RenderResult *result)
 
static void engine_tile_highlight_set (RenderEngine *engine, const HighlightedTile *tile, bool highlight)
 
RenderResult * RE_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)
 
RenderResult * RE_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)
 
RenderPass * RE_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)
 
rcti * RE_engine_get_current_tiles (Render *re, int *r_total_tiles, bool *r_needs_free)
 
RenderData * RE_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)
 
bool RE_engine_render (Render *re, bool do_all)
 
void RE_engine_update_render_passes (struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer, update_render_passes_cb_t callback, void *callback_data)
 
void RE_engine_register_pass (struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer, const char *name, int channels, const char *chanid, eNodeSocketDatatype type)
 
void RE_engine_free_blender_memory (RenderEngine *engine)
 
struct RenderEngine * RE_engine_get (const Render *re)
 
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)
 
OpenGL context manipulation.

NOTE: Only used for Cycles's BLenderGPUDisplay integration with the draw manager. A subject for re-consideration. Do not use this functionality.

bool RE_engine_has_render_context (RenderEngine *engine)
 
void RE_engine_render_context_enable (RenderEngine *engine)
 
void RE_engine_render_context_disable (RenderEngine *engine)
 

Variables

ListBase R_engines = {NULL, NULL}
 

Function Documentation

◆ engine_depsgraph_exit()

static void engine_depsgraph_exit ( RenderEngine *  engine)
static

◆ engine_depsgraph_free()

static void engine_depsgraph_free ( RenderEngine *  engine)
static

◆ engine_depsgraph_init()

static void engine_depsgraph_init ( RenderEngine *  engine,
ViewLayer *  view_layer 
)
static

◆ engine_keep_depsgraph()

static bool engine_keep_depsgraph ( RenderEngine *  engine)
static

◆ engine_render_view_layer()

static void engine_render_view_layer ( Render *  re,
RenderEngine *  engine,
ViewLayer *  view_layer_iter,
const bool  use_engine,
const bool  use_grease_pencil 
)
static

◆ engine_tile_highlight_set()

static void engine_tile_highlight_set ( RenderEngine *  engine,
const HighlightedTile *  tile,
bool  highlight 
)
static

◆ highlighted_tile_from_result_get()

static HighlightedTile highlighted_tile_from_result_get ( Render *  UNUSEDre,
RenderResult *  result 
)
static

Definition at line 305 of file engine.c.

References result, and tile.

Referenced by RE_engine_end_result().

◆ RE_bake_engine()

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[] 
)

◆ RE_bake_engine_set_engine_parameters()

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

Definition at line 806 of file engine.c.

References Render::main, Scene::r, Render::r, render_copy_renderdata(), scene, and Render::scene.

Referenced by bake().

◆ RE_bake_has_engine()

bool RE_bake_has_engine ( const Render *  re)

Definition at line 813 of file engine.c.

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

Referenced by bake().

◆ RE_engine_active_view_get()

const char* RE_engine_active_view_get ( RenderEngine *  engine)

Definition at line 596 of file engine.c.

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 602 of file engine.c.

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 
)

◆ RE_engine_begin_result()

RenderResult* RE_engine_begin_result ( RenderEngine *  engine,
int  x,
int  y,
int  w,
int  h,
const char *  layername,
const char *  viewname 
)

◆ RE_engine_create()

RenderEngine* RE_engine_create ( RenderEngineType *  type)

◆ RE_engine_draw_acquire()

bool RE_engine_draw_acquire ( Render *  re)

◆ RE_engine_draw_release()

void RE_engine_draw_release ( Render *  re)

Definition at line 1218 of file engine.c.

References BLI_mutex_unlock(), Render::engine_draw_mutex, and RenderEngine::re.

Referenced by external_draw_scene_do_image().

◆ RE_engine_end_result()

void RE_engine_end_result ( RenderEngine *  engine,
RenderResult *  result,
bool  cancel,
bool  highlight,
bool  merge_results 
)

◆ RE_engine_frame_set()

void RE_engine_frame_set ( RenderEngine *  engine,
int  frame,
float  subframe 
)

◆ RE_engine_free()

void RE_engine_free ( RenderEngine *  engine)

◆ RE_engine_free_blender_memory()

void RE_engine_free_blender_memory ( RenderEngine *  engine)

◆ RE_engine_get()

struct RenderEngine* RE_engine_get ( const Render *  re)

Definition at line 1199 of file engine.c.

References Render::engine, and RenderEngine::re.

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

rcti* RE_engine_get_current_tiles ( Render *  re,
int *  r_total_tiles,
bool *  r_needs_free 
)

◆ RE_engine_get_render_data()

RenderData* RE_engine_get_render_data ( Render *  re)

Definition at line 690 of file engine.c.

References Render::r.

Referenced by render_border_exec().

◆ RE_engine_get_result()

RenderResult* RE_engine_get_result ( RenderEngine *  engine)

Definition at line 481 of file engine.c.

References RenderEngine::re, and Render::result.

Referenced by DRW_render_gpencil(), and DRW_render_to_image().

◆ RE_engine_get_spherical_stereo()

bool RE_engine_get_spherical_stereo ( RenderEngine *  engine,
Object *  camera 
)

◆ RE_engine_has_render_context()

bool RE_engine_has_render_context ( RenderEngine *  engine)

Definition at line 1256 of file engine.c.

References NULL, RenderEngine::re, and RE_gl_context_get().

Referenced by BlenderDisplayDriver::gl_context_create().

◆ RE_engine_is_external()

bool RE_engine_is_external ( const Render *  re)

Definition at line 110 of file engine.c.

References Render::engine, RenderEngineType::render, and RenderEngine::type.

◆ RE_engine_is_opengl()

bool RE_engine_is_opengl ( RenderEngineType *  render_type)

Definition at line 115 of file engine.c.

References RenderEngineType::draw_engine, DRW_engine_render_support(), and NULL.

Referenced by wm_draw_region_bind().

◆ 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 ( struct RenderEngine *  engine,
struct Scene *  scene,
struct 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 988 of file engine.c.

References BKE_report(), BKE_reports_contain(), BLI_rw_mutex_lock(), BLI_rw_mutex_unlock(), BLI_strncpy(), Render::camera_override, RenderEngine::camera_override, RenderData::cfra, RenderStats::cfra, Render::disprect, Render::dlh, Render::draw_lock, RenderData::engine, Render::engine, engine_depsgraph_free(), engine_keep_depsgraph(), engine_render_view_layer(), ListBase::first, Render::flag, RenderEngine::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, RenderData::mode, ID::name, NULL, RenderResult::passes_allocated, Scene::r, Render::r, R_ANIMATION, R_BUTS_PREVIEW, R_EDGE_FRS, R_EXR_CACHE_FILE, R_NO_FRAME_UPDATE, 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, render_result_exr_file_cache_write(), render_result_free(), render_result_free_list(), render_result_new(), render_update_anim_renderdata(), Render::reports, RenderEngine::resolution_x, RenderEngine::resolution_y, Render::result, Render::resultmutex, RPT_ERROR, RR_ALL_LAYERS, RR_ALL_VIEWS, RenderData::scemode, Render::scene, RenderStats::scene_name, THREAD_LOCK_WRITE, type, Scene::view_layers, Render::winx, and Render::winy.

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

◆ RE_engine_render_context_disable()

void RE_engine_render_context_disable ( RenderEngine *  engine)

Definition at line 1270 of file engine.c.

References DRW_render_context_disable(), and RenderEngine::re.

Referenced by BlenderDisplayDriver::gl_context_disable().

◆ RE_engine_render_context_enable()

void RE_engine_render_context_enable ( RenderEngine *  engine)

Definition at line 1265 of file engine.c.

References DRW_render_context_enable(), and RenderEngine::re.

Referenced by BlenderDisplayDriver::gl_context_enable().

◆ RE_engine_report()

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

Definition at line 548 of file engine.c.

References BKE_report(), RenderEngine::re, Render::reports, RenderEngine::reports, and type.

Referenced by workbench_render().

◆ 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 121 of file engine.c.

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

Referenced by BKE_cache_file_uses_render_procedural(), and uiTemplateCacheFileProcedural().

◆ RE_engine_test_break()

bool RE_engine_test_break ( RenderEngine *  engine)

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

Definition at line 1223 of file engine.c.

References BLI_rcti_init(), engine_tile_highlight_set(), height, tile, width, x, and y.

◆ RE_engine_update_memory_stats()

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

Definition at line 538 of file engine.c.

References Render::i, RenderStats::mem_peak, RenderStats::mem_used, and RenderEngine::re.

◆ RE_engine_update_progress()

void RE_engine_update_progress ( RenderEngine *  engine,
float  progress 
)

Definition at line 528 of file engine.c.

References CLAMP, Render::prh, Render::progress, and RenderEngine::re.

Referenced by EEVEE_render_draw().

◆ RE_engine_update_render_passes()

void RE_engine_update_render_passes ( struct RenderEngine *  engine,
struct Scene *  scene,
struct ViewLayer *  view_layer,
update_render_passes_cb_t  callback,
void *  callback_data 
)

◆ RE_engine_update_result()

void RE_engine_update_result ( RenderEngine *  engine,
RenderResult *  result 
)

◆ RE_engine_update_stats()

void RE_engine_update_stats ( RenderEngine *  engine,
const char *  stats,
const char *  info 
)

◆ RE_engine_use_persistent_data()

bool RE_engine_use_persistent_data ( RenderEngine *  engine)

◆ RE_engines_exit()

void RE_engines_exit ( void  )

◆ RE_engines_find()

RenderEngineType* RE_engines_find ( const char *  idname)

◆ RE_engines_init()

void RE_engines_init ( void  )

Definition at line 59 of file engine.c.

References DRW_engines_register().

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

◆ RE_engines_init_experimental()

void RE_engines_init_experimental ( void  )

Definition at line 64 of file engine.c.

References DRW_engines_register_experimental().

Referenced by main().

◆ RE_engines_register()

void RE_engines_register ( RenderEngineType *  render_type)

◆ re_ensure_passes_allocated_thread_safe()

static void re_ensure_passes_allocated_thread_safe ( Render *  re)
static

◆ render_result_from_bake()

static RenderResult* render_result_from_bake ( RenderEngine *  engine,
int  x,
int  y,
int  w,
int  h,
const char *  layername 
)
static

◆ render_result_to_bake()

static void render_result_to_bake ( RenderEngine *  engine,
RenderResult *  rr 
)
static

Variable Documentation

◆ R_engines

ListBase R_engines = {NULL, NULL}