Refactor: Make draw_lock a base render method
Also semantically separate draw_lock and draw_unlock, as it is more clear than a single method with a boolean argument. Should be no functional changes.
This commit is contained in:
parent
bddc790166
commit
6df46fd2fc
|
@ -842,17 +842,13 @@ static void engine_render_view_layer(Render *re,
|
||||||
const bool use_grease_pencil)
|
const bool use_grease_pencil)
|
||||||
{
|
{
|
||||||
/* Lock UI so scene can't be edited while we read from it in this render thread. */
|
/* Lock UI so scene can't be edited while we read from it in this render thread. */
|
||||||
if (re->draw_lock_cb) {
|
re->draw_lock();
|
||||||
re->draw_lock_cb(re->dlh, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Create depsgraph with scene evaluated at render resolution. */
|
/* Create depsgraph with scene evaluated at render resolution. */
|
||||||
ViewLayer *view_layer = static_cast<ViewLayer *>(
|
ViewLayer *view_layer = static_cast<ViewLayer *>(
|
||||||
BLI_findstring(&re->scene->view_layers, view_layer_iter->name, offsetof(ViewLayer, name)));
|
BLI_findstring(&re->scene->view_layers, view_layer_iter->name, offsetof(ViewLayer, name)));
|
||||||
if (!re->prepare_viewlayer(view_layer, engine->depsgraph)) {
|
if (!re->prepare_viewlayer(view_layer, engine->depsgraph)) {
|
||||||
if (re->draw_lock_cb) {
|
re->draw_unlock();
|
||||||
re->draw_lock_cb(re->dlh, false);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
engine_depsgraph_init(engine, view_layer);
|
engine_depsgraph_init(engine, view_layer);
|
||||||
|
@ -871,9 +867,7 @@ static void engine_render_view_layer(Render *re,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (re->draw_lock_cb) {
|
re->draw_unlock();
|
||||||
re->draw_lock_cb(re->dlh, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Perform render with engine. */
|
/* Perform render with engine. */
|
||||||
if (use_engine) {
|
if (use_engine) {
|
||||||
|
@ -966,15 +960,11 @@ bool RE_engine_render(Render *re, bool do_all)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Lock drawing in UI during data phase. */
|
/* Lock drawing in UI during data phase. */
|
||||||
if (re->draw_lock_cb) {
|
re->draw_lock();
|
||||||
re->draw_lock_cb(re->dlh, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((type->flag & RE_USE_GPU_CONTEXT) && !GPU_backend_supported()) {
|
if ((type->flag & RE_USE_GPU_CONTEXT) && !GPU_backend_supported()) {
|
||||||
/* Clear UI drawing locks. */
|
/* Clear UI drawing locks. */
|
||||||
if (re->draw_lock_cb) {
|
re->draw_unlock();
|
||||||
re->draw_lock_cb(re->dlh, false);
|
|
||||||
}
|
|
||||||
BKE_report(re->reports, RPT_ERROR, "Can not initialize the GPU");
|
BKE_report(re->reports, RPT_ERROR, "Can not initialize the GPU");
|
||||||
G.is_break = true;
|
G.is_break = true;
|
||||||
return true;
|
return true;
|
||||||
|
@ -1006,9 +996,7 @@ bool RE_engine_render(Render *re, bool do_all)
|
||||||
|
|
||||||
if (re->result == nullptr) {
|
if (re->result == nullptr) {
|
||||||
/* Clear UI drawing locks. */
|
/* Clear UI drawing locks. */
|
||||||
if (re->draw_lock_cb) {
|
re->draw_unlock();
|
||||||
re->draw_lock_cb(re->dlh, false);
|
|
||||||
}
|
|
||||||
/* Free engine. */
|
/* Free engine. */
|
||||||
RE_engine_free(engine);
|
RE_engine_free(engine);
|
||||||
re->engine = nullptr;
|
re->engine = nullptr;
|
||||||
|
@ -1041,9 +1029,7 @@ bool RE_engine_render(Render *re, bool do_all)
|
||||||
engine->resolution_y = re->winy;
|
engine->resolution_y = re->winy;
|
||||||
|
|
||||||
/* Clear UI drawing locks. */
|
/* Clear UI drawing locks. */
|
||||||
if (re->draw_lock_cb) {
|
re->draw_unlock();
|
||||||
re->draw_lock_cb(re->dlh, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Render view layers. */
|
/* Render view layers. */
|
||||||
bool delay_grease_pencil = false;
|
bool delay_grease_pencil = false;
|
||||||
|
|
|
@ -41,6 +41,19 @@ Render::~Render()
|
||||||
render_result_free(pushedresult);
|
render_result_free(pushedresult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Render::draw_lock()
|
||||||
|
{
|
||||||
|
if (draw_lock_cb) {
|
||||||
|
draw_lock_cb(dlh, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void Render::draw_unlock()
|
||||||
|
{
|
||||||
|
if (draw_lock_cb) {
|
||||||
|
draw_lock_cb(dlh, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool Render::test_break()
|
bool Render::test_break()
|
||||||
{
|
{
|
||||||
if (!test_break_cb) {
|
if (!test_break_cb) {
|
||||||
|
|
|
@ -49,6 +49,9 @@ struct BaseRender {
|
||||||
const char *view_name) = 0;
|
const char *view_name) = 0;
|
||||||
virtual void compositor_free() = 0;
|
virtual void compositor_free() = 0;
|
||||||
|
|
||||||
|
virtual void draw_lock() = 0;
|
||||||
|
virtual void draw_unlock() = 0;
|
||||||
|
|
||||||
/* Test whether render is to be stopped: if the function returns true rendering will be stopped
|
/* Test whether render is to be stopped: if the function returns true rendering will be stopped
|
||||||
* as soon as the render pipeline allows it. */
|
* as soon as the render pipeline allows it. */
|
||||||
virtual bool test_break() = 0;
|
virtual bool test_break() = 0;
|
||||||
|
@ -91,6 +94,9 @@ struct ViewRender : public BaseRender {
|
||||||
}
|
}
|
||||||
void compositor_free() override {}
|
void compositor_free() override {}
|
||||||
|
|
||||||
|
void draw_lock() override {}
|
||||||
|
void draw_unlock() override {}
|
||||||
|
|
||||||
bool test_break() override
|
bool test_break() override
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -122,6 +128,9 @@ struct Render : public BaseRender {
|
||||||
const char *view_name) override;
|
const char *view_name) override;
|
||||||
void compositor_free() override;
|
void compositor_free() override;
|
||||||
|
|
||||||
|
void draw_lock() override;
|
||||||
|
void draw_unlock() override;
|
||||||
|
|
||||||
bool test_break() override;
|
bool test_break() override;
|
||||||
|
|
||||||
bool prepare_viewlayer(struct ViewLayer *view_layer, struct Depsgraph *depsgraph) override;
|
bool prepare_viewlayer(struct ViewLayer *view_layer, struct Depsgraph *depsgraph) override;
|
||||||
|
|
Loading…
Reference in New Issue