Refactor: Make prepare_viewlayer a base render method
Should be no functional changes.
This commit is contained in:
committed by
Sergey Sharybin
parent
c664618e10
commit
dd5ef3f91a
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user