Blender V5.0
COM_compositor.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "BLI_mutex.hh"
6
7#include "BLT_translation.hh"
8
9#include "BKE_node.hh"
10#include "BKE_node_runtime.hh"
11
12#include "COM_compositor.hh"
13
14#include "RE_compositor.hh"
15
16static constexpr float COM_PREVIEW_SIZE = 140.0f;
17
19
20/* Make sure node tree has previews.
21 * Don't create previews in advance, this is done when adding preview operations.
22 * Reserved preview size is determined by render output for now. */
23static void compositor_init_node_previews(const RenderData *render_data, bNodeTree *node_tree)
24{
25 /* We fit the aspect into COM_PREVIEW_SIZE x COM_PREVIEW_SIZE image to avoid
26 * insane preview resolution, which might even overflow preview dimensions. */
27 const float aspect = render_data->xsch > 0 ?
28 float(render_data->ysch) / float(render_data->xsch) :
29 1.0f;
30 int preview_width, preview_height;
31 if (aspect < 1.0f) {
32 preview_width = COM_PREVIEW_SIZE;
33 preview_height = int(COM_PREVIEW_SIZE * aspect);
34 }
35 else {
36 preview_width = int(COM_PREVIEW_SIZE / aspect);
37 preview_height = COM_PREVIEW_SIZE;
38 }
39 blender::bke::node_preview_init_tree(node_tree, preview_width, preview_height);
40}
41
43{
44 node_tree->runtime->progress(node_tree->runtime->prh, 0.0);
45 node_tree->runtime->stats_draw(node_tree->runtime->sdh, IFACE_("Compositing"));
46}
47
48void COM_execute(Render *render,
49 RenderData *render_data,
50 Scene *scene,
51 bNodeTree *node_tree,
52 const char *view_name,
56{
57 std::scoped_lock lock(g_compositor_mutex);
58
59 if (node_tree->runtime->test_break(node_tree->runtime->tbh)) {
60 /* During editing multiple compositor executions can be triggered.
61 * Make sure this is the most recent one. */
62 return;
63 }
64
65 compositor_init_node_previews(render_data, node_tree);
67
69 *scene,
70 *render_data,
71 *node_tree,
72 view_name,
73 render_context,
74 profiler,
75 needed_outputs);
76}
77
#define IFACE_(msgid)
static void compositor_reset_node_tree_status(bNodeTree *node_tree)
void COM_execute(Render *render, RenderData *render_data, Scene *scene, bNodeTree *node_tree, const char *view_name, blender::compositor::RenderContext *render_context, blender::compositor::Profiler *profiler, blender::compositor::OutputTypes needed_outputs)
The main method that is used to execute the compositor tree. It can be executed during editing (blenk...
static blender::Mutex g_compositor_mutex
static constexpr float COM_PREVIEW_SIZE
static void compositor_init_node_previews(const RenderData *render_data, bNodeTree *node_tree)
void COM_deinitialize()
Deinitialize the compositor caches and allocated memory. Use COM_clear_caches to only free the caches...
volatile int lock
nullptr float
void node_preview_init_tree(bNodeTree *ntree, int xsize, int ysize)
Definition node.cc:4205
std::mutex Mutex
Definition BLI_mutex.hh:47
void RE_compositor_execute(Render &render, const Scene &scene, const RenderData &render_data, const bNodeTree &node_tree, const char *view_name, blender::compositor::RenderContext *render_context, blender::compositor::Profiler *profiler, blender::compositor::OutputTypes needed_outputs)
bNodeTreeRuntimeHandle * runtime