134 if (use_gpu_context) {
149 if (use_gpu_context) {
179 RenderEngine *engine,
int x,
int y,
int w,
int h,
const char *layername)
214 rr, rl, 4,
"BakeDifferential",
"",
"RGBA",
true);
223 for (
int ty = 0; ty < h; ty++) {
224 size_t offset = ty *
w;
229 size_t bake_offset = (
y + ty) * image->
width +
x;
230 const BakePixel *bake_pixel = pixels + bake_offset;
232 for (
int tx = 0; tx <
w; tx++) {
239 primitive[0] = bake_pixel->
uv[0];
240 primitive[1] = bake_pixel->
uv[1];
249 if (seed_pass !=
nullptr) {
285 const size_t channels_size = channels_num *
sizeof(
float);
295 for (
int ty = 0; ty < h; ty++) {
296 const size_t offset = ty *
w;
297 const size_t bake_offset = (
y + ty) * image->
width +
x;
300 const BakePixel *bake_pixel = pixels + bake_offset;
301 float *bake_result =
result + bake_offset * channels_num;
303 for (
int tx = 0; tx <
w; tx++) {
305 memcpy(bake_result, pass_rect, channels_size);
307 pass_rect += channels_num;
308 bake_result += channels_num;
317 RenderEngine *engine,
int x,
int y,
int w,
int h,
const char *layername,
const char *viewname)
346 disprect.
ymax =
y + h;
401 const char *layername)
422 if (!cancel || merge_results) {
433 if (tile_highlight) {
443 if (!cancel || merge_results) {
450 if (!re->
display->test_break()) {
474 return re->
display->test_break();
496 engine->
text[0] =
'\0';
498 if (stats && stats[0] && info && info[0]) {
501 else if (info && info[0]) {
504 else if (stats && stats[0]) {
514 CLAMP(progress, 0.0f, 1.0f);
515 re->
display->progress(progress);
547 if (rr->
error !=
nullptr) {
568 if (layer !=
nullptr) {
594 if (use_spherical_stereo || re ==
nullptr) {
603 bool use_spherical_stereo,
604 float r_modelmat[16])
609 if (use_spherical_stereo || re ==
nullptr) {
626 if (!tiles_highlight) {
633 *r_total_tiles = highlighted_tiles.
size();
634 return highlighted_tiles.
data();
663 bool reuse_depsgraph =
false;
680 reuse_depsgraph =
true;
700 if (use_gpu_context) {
706 if (use_gpu_context) {
743 double cfra = double(frame) + double(subframe);
764 return (type->
bake !=
nullptr);
774 const int pass_filter,
828 memset(&engine->
bake, 0,
sizeof(engine->
bake));
862 const bool use_engine,
863 const bool use_grease_pencil)
880 if (use_gpu_context) {
910 if (use_gpu_context) {
920 if (use_gpu_context) {
934 if (use_gpu_context) {
1034 if (create_new_result) {
1043 if (re->
result ==
nullptr) {
1081 bool delay_grease_pencil =
false;
1108 if (delay_grease_pencil) {
1111 if (!use_grease_pencil) {
1146#ifdef WITH_FREESTYLE
1149 RE_RenderFreestyleExternal(re);
1160 void *callback_data)
1212 return view_render->
engine;
1251 RenderEngine *engine,
int x,
int y,
int width,
int height,
bool highlight)
1265 if (!tile_highlight) {
1292 if (!tile_highlight) {
1297 tile_highlight->
clear();
Camera data-block and utility functions.
float BKE_camera_multiview_shift_x(const struct RenderData *rd, const struct Object *camera, const char *viewname)
void BKE_camera_multiview_model_matrix(const struct RenderData *rd, const struct Object *camera, const char *viewname, float r_modelmat[4][4])
bool BKE_camera_multiview_spherical_stereo(const struct RenderData *rd, const struct Object *camera)
bool BKE_reports_contain(ReportList *reports, eReportType level)
void BKE_report(ReportList *reports, eReportType type, const char *message)
void BKE_scene_graph_update_for_newframe_ex(Depsgraph *depsgraph, bool clear_recalc)
void BKE_scene_frame_set(Scene *scene, float frame)
bool BKE_scene_camera_switch_update(Scene *scene)
float BKE_scene_frame_get(const Scene *scene)
void BKE_scene_ppm_get(const RenderData *rd, double r_ppm[2])
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findstring(const ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE float int_as_float(int i)
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
#define SNPRINTF(dst, format,...)
char * STRNCPY(char(&dst)[N], const char *src)
void BLI_mutex_end(ThreadMutex *mutex)
void BLI_mutex_init(ThreadMutex *mutex)
#define THREAD_LOCK_WRITE
void BLI_rw_mutex_lock(ThreadRWMutex *mutex, int mode)
int BLI_thread_is_main(void)
void BLI_mutex_lock(ThreadMutex *mutex)
void BLI_mutex_unlock(ThreadMutex *mutex)
void BLI_rw_mutex_unlock(ThreadRWMutex *mutex)
void BPY_DECREF_RNA_INVALIDATE(void *pyob_ptr)
#define CLOG_INFO(clg_ref,...)
void DEG_ids_clear_recalc(Depsgraph *depsgraph, bool backup)
Depsgraph * DEG_graph_new(Main *bmain, Scene *scene, ViewLayer *view_layer, eEvaluationMode mode)
void DEG_graph_replace_owners(Depsgraph *depsgraph, Main *bmain, Scene *scene, ViewLayer *view_layer)
void DEG_graph_free(Depsgraph *graph)
void DEG_evaluate_on_framechange(Depsgraph *graph, float frame, DepsgraphEvaluateSyncWriteback sync_writeback=DEG_EVALUATE_SYNC_WRITEBACK_NO)
void DEG_graph_tag_relations_update(Depsgraph *graph)
void DEG_graph_relations_update(Depsgraph *graph)
void DEG_debug_name_set(Depsgraph *depsgraph, const char *name)
ViewLayer * DEG_get_input_view_layer(const Depsgraph *graph)
Main * DEG_get_bmain(const Depsgraph *graph)
Scene * DEG_get_input_scene(const Depsgraph *graph)
Object is a sort of wrapper for general info.
#define RE_PASSNAME_COMBINED
@ SCE_COMPOSITOR_DEVICE_GPU
bool DRW_render_check_grease_pencil(Depsgraph *depsgraph)
void DRW_gpu_context_disable()
void DRW_gpu_context_enable()
void DRW_gpu_context_activate(bool drw_state)
void DRW_render_context_disable(Render *render)
bool DRW_gpu_context_try_enable()
void DRW_render_gpencil(RenderEngine *engine, Depsgraph *depsgraph)
bool DRW_gpu_context_release()
void DRW_engines_register()
void DRW_render_context_enable(Render *render)
GPUContext * GPU_context_create(void *ghost_window, void *ghost_context)
bool GPU_backend_supported()
GPUContext * GPU_context_active_get()
void GPU_context_discard(GPUContext *)
void GPU_context_active_set(GPUContext *)
Read Guarded memory(de)allocation.
void(*)(void *userdata, struct Scene *scene, struct ViewLayer *view_layer, const char *name, int channels, const char *chanid, eNodeSocketDatatype type) update_render_passes_cb_t
@ RE_ENGINE_HIGHLIGHT_TILES
BPy_StructRNA * depsgraph
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
static unsigned long seed
constexpr const T * data() const
constexpr int64_t size() const
void highlight_tile_for_result(const RenderResult *result)
void unhighlight_tile(int x, int y, int width, int height)
void unhighlight_tile_for_result(const RenderResult *result)
Span< rcti > get_all_highlighted_tiles() const
void highlight_tile(int x, int y, int width, int height)
static void re_ensure_passes_allocated_thread_safe(Render *re)
void RE_engine_draw_release(Render *re)
bool RE_engine_is_external(const Render *re)
const char * RE_engine_active_view_get(RenderEngine *engine)
RenderEngine * RE_view_engine_get(const ViewRender *view_render)
static RenderResult * render_result_from_bake(RenderEngine *engine, int x, int y, int w, int h, const char *layername)
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[])
void RE_engine_frame_set(RenderEngine *engine, int frame, float subframe)
RenderResult * RE_engine_begin_result(RenderEngine *engine, int x, int y, int w, int h, const char *layername, const char *viewname)
RenderResult * RE_engine_get_result(RenderEngine *engine)
static void engine_depsgraph_exit(RenderEngine *engine)
void RE_engine_add_pass(RenderEngine *engine, const char *name, int channels, const char *chan_id, const char *layername)
static void engine_depsgraph_init(RenderEngine *engine, ViewLayer *view_layer)
void RE_engine_report(RenderEngine *engine, int type, const char *msg)
bool RE_bake_has_engine(const Render *re)
void RE_engine_active_view_set(RenderEngine *engine, const char *viewname)
bool RE_engine_use_persistent_data(RenderEngine *engine)
float RE_engine_get_camera_shift_x(RenderEngine *engine, Object *camera, bool use_spherical_stereo)
void RE_engine_update_result(RenderEngine *engine, RenderResult *result)
static void engine_render_view_layer(Render *re, RenderEngine *engine, ViewLayer *view_layer_iter, const bool use_engine, const bool use_grease_pencil)
const rcti * RE_engine_get_current_tiles(Render *re, int *r_total_tiles)
void RE_engine_update_memory_stats(RenderEngine *engine, float mem_used, float mem_peak)
void RE_engine_update_render_passes(RenderEngine *engine, Scene *scene, ViewLayer *view_layer, update_render_passes_cb_t callback, void *callback_data)
RenderEngine * RE_engine_get(const Render *re)
RenderPass * RE_engine_pass_by_index_get(RenderEngine *engine, const char *layer_name, int index)
RenderEngineType * RE_engines_find(const char *idname)
void RE_engine_tile_highlight_set(RenderEngine *engine, int x, int y, int width, int height, bool highlight)
bool RE_engine_draw_acquire(Render *re)
bool RE_engine_get_spherical_stereo(RenderEngine *engine, Object *camera)
RenderEngine * RE_engine_create(RenderEngineType *type)
bool RE_engine_render(Render *re, bool do_all)
bool RE_engine_test_break(RenderEngine *engine)
void RE_engine_update_stats(RenderEngine *engine, const char *stats, const char *info)
void RE_bake_engine_set_engine_parameters(Render *re, Main *bmain, Scene *scene)
void RE_engine_gpu_context_lock(RenderEngine *engine)
void RE_engine_gpu_context_unlock(RenderEngine *engine)
static void engine_depsgraph_free(RenderEngine *engine)
static RenderResult * engine_render_create_result(Render *re)
void RE_engines_register(RenderEngineType *render_type)
static void engine_render_add_result_pass_cb(void *user_data, Scene *, ViewLayer *view_layer, const char *name, int channels, const char *chanid, eNodeSocketDatatype)
void RE_engine_free(RenderEngine *engine)
RenderData * RE_engine_get_render_data(Render *re)
void RE_engine_free_blender_memory(RenderEngine *engine)
static bool possibly_using_gpu_compositor(const Render *re)
void RE_engine_set_error_message(RenderEngine *engine, const char *msg)
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_end_result(RenderEngine *engine, RenderResult *result, bool cancel, bool highlight, bool merge_results)
void RE_engine_tile_highlight_clear_all(RenderEngine *engine)
static bool engine_keep_depsgraph(RenderEngine *engine)
void RE_engine_gpu_context_destroy(RenderEngine *engine)
static void render_result_to_bake(RenderEngine *engine, RenderResult *rr)
bool RE_engine_gpu_context_enable(RenderEngine *engine)
bool RE_engine_gpu_context_create(RenderEngine *engine)
void RE_engine_get_camera_model_matrix(RenderEngine *engine, Object *camera, bool use_spherical_stereo, float r_modelmat[16])
void RE_engine_update_progress(RenderEngine *engine, float progress)
void RE_engine_gpu_context_disable(RenderEngine *engine)
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void render_result_exr_file_cache_write(Render *re)
void render_result_merge(RenderResult *rr, RenderResult *rrpart)
RenderPass * render_layer_add_pass(RenderResult *rr, RenderLayer *rl, int channels, const char *name, const char *viewname, const char *chan_id, const bool allocate)
void render_result_passes_allocated_ensure(RenderResult *rr)
void render_result_free(RenderResult *rr)
void render_result_clone_passes(Render *re, RenderResult *rr, const char *viewname)
void render_result_free_list(ListBase *lb, RenderResult *rr)
RenderResult * render_result_new(Render *re, const rcti *partrct, const char *layername, 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)
#define FOREACH_VIEW_LAYER_TO_RENDER_END
#define FOREACH_VIEW_LAYER_TO_RENDER_BEGIN(re_, iter_)
void * RE_system_gpu_context_get(Render *re)
RenderPass * RE_pass_find_by_name(RenderLayer *rl, const char *name, const char *viewname)
void render_copy_renderdata(RenderData *to, RenderData *from)
void RE_FreePersistentData(const Scene *scene)
RenderResult * RE_AcquireResultRead(Render *re)
RenderLayer * RE_GetRenderLayer(RenderResult *rr, const char *name)
void RE_ReleaseResult(Render *re)
const char * RE_GetActiveRenderView(Render *re)
void RE_SetActiveRenderView(Render *re, const char *viewname)
char render_layer_name[RE_MAXNAME]
ThreadMutex engine_draw_mutex
struct RenderEngine * engine
ThreadRWMutex resultmutex
std::shared_ptr< RenderDisplay > display
ImBufFloatBuffer float_buffer
void(* render)(struct RenderEngine *engine, struct Depsgraph *depsgraph)
void(* update)(struct RenderEngine *engine, struct Main *bmain, struct Depsgraph *depsgraph)
struct RenderEngineType * next
void(* draw)(struct RenderEngine *engine, const struct bContext *context, struct Depsgraph *depsgraph)
void(* render_frame_finish)(struct RenderEngine *engine)
void(* update_render_passes)(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer)
void(* bake)(struct RenderEngine *engine, struct Depsgraph *depsgraph, struct Object *object, int pass_type, int pass_filter, int width, int height)
struct RenderEngine::@041244022306172004244365003343277124227106040205 bake
struct ReportList * reports
struct Depsgraph * depsgraph
const struct BakePixel * pixels
ThreadMutex blender_gpu_context_mutex
bool use_drw_render_context
struct GPUContext * blender_gpu_context
void * update_render_passes_data
void * system_gpu_context
update_render_passes_cb_t update_render_passes_cb
ThreadMutex update_render_passes_mutex
const struct BakeTargets * targets
struct Object * camera_override
char scene_name[MAX_ID_NAME - 2]
Scene * pipeline_scene_eval
bool prepare_viewlayer(struct ViewLayer *view_layer, struct Depsgraph *depsgraph) override
blender::render::TilesHighlight * get_tile_highlight() override
struct ReportList * reports
struct Object * camera_override
struct bNodeTree * compositing_node_group
void * WM_system_gpu_context_create()
void WM_system_gpu_context_dispose(void *context)
void WM_system_gpu_context_activate(void *context)
void WM_system_gpu_context_release(void *context)