Refactor: Make prepare_viewlayer a base render method

Should be no functional changes.
This commit is contained in:
Sergey Sharybin
2023-08-11 12:21:58 +02:00
committed by Sergey Sharybin
parent c664618e10
commit dd5ef3f91a
3 changed files with 30 additions and 11 deletions

View File

@@ -849,13 +849,11 @@ static void engine_render_view_layer(Render *re,
/* Create depsgraph with scene evaluated at render resolution. */
ViewLayer *view_layer = static_cast<ViewLayer *>(
BLI_findstring(&re->scene->view_layers, view_layer_iter->name, offsetof(ViewLayer, name)));
if (re->prepare_viewlayer_cb) {
if (!re->prepare_viewlayer_cb(re->prepare_vl_handle, view_layer, engine->depsgraph)) {
if (re->draw_lock_cb) {
re->draw_lock_cb(re->dlh, false);
}
return;
if (!re->prepare_viewlayer(view_layer, engine->depsgraph)) {
if (re->draw_lock_cb) {
re->draw_lock_cb(re->dlh, false);
}
return;
}
engine_depsgraph_init(engine, view_layer);

View File

@@ -40,3 +40,12 @@ Render::~Render()
render_result_free(pushedresult);
}
bool Render::prepare_viewlayer(struct ViewLayer *view_layer, struct Depsgraph *depsgraph)
{
if (!prepare_viewlayer_cb) {
return true;
}
return prepare_viewlayer_cb(prepare_vl_handle, view_layer, depsgraph);
}

View File

@@ -49,6 +49,14 @@ struct BaseRender {
const char *view_name) = 0;
virtual void compositor_free() = 0;
/**
* Executed right before the initialization of the depsgraph, in order to modify some stuff in
* the viewlayer. The modified ids must be tagged in the depsgraph.
*
* If false is returned then rendering is aborted,
*/
virtual bool prepare_viewlayer(struct ViewLayer *view_layer, struct Depsgraph *depsgraph) = 0;
/* Result of rendering */
RenderResult *result = nullptr;
@@ -78,6 +86,12 @@ struct ViewRender : public BaseRender {
{
}
void compositor_free() override {}
bool prepare_viewlayer(struct ViewLayer * /*view_layer*/,
struct Depsgraph * /*depsgraph*/) override
{
return true;
}
};
/* Controls state of render, everything that's read-only during render stage */
@@ -99,6 +113,8 @@ struct Render : public BaseRender {
const char *view_name) override;
void compositor_free() override;
bool prepare_viewlayer(struct ViewLayer *view_layer, struct Depsgraph *depsgraph) override;
char name[RE_MAXNAME] = "";
int slot = 0;
@@ -150,7 +166,7 @@ struct Render : public BaseRender {
blender::render::RealtimeCompositor *gpu_compositor = nullptr;
std::mutex gpu_compositor_mutex;
/* callbacks */
/* Callbacks for the corresponding base class method implementation. */
void (*display_init_cb)(void *handle, RenderResult *rr) = nullptr;
void *dih = nullptr;
void (*display_clear_cb)(void *handle, RenderResult *rr) = nullptr;
@@ -170,10 +186,6 @@ struct Render : public BaseRender {
bool (*test_break_cb)(void *handle) = nullptr;
void *tbh = nullptr;
/**
* Executed right before the initialization of the depsgraph, in order to modify some stuff in
* the viewlayer. The modified ids must be tagged in the depsgraph.
*/
bool (*prepare_viewlayer_cb)(void *handle, struct ViewLayer *vl, struct Depsgraph *depsgraph);
void *prepare_vl_handle;