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)
 
RenderEngineTypeRE_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)
 
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)
 
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)
 
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)
 
rctiRE_engine_get_current_tiles (Render *re, int *r_total_tiles, bool *r_needs_free)
 
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)
 
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 RenderEngineRE_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}