From 00dc7477022acdd969e4d709a235c0be819efa6c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 15 Jul 2022 22:14:04 +1000 Subject: Fix T99706: Crash rendering with headless builds When rendering with headless builds, show an error instead of crashing. Previously GPU_backend_init was called indirectly from DRW_opengl_context_create, a new function is now called from the window manager (GPU_backend_init_once), so it's possible to check if the GPU has a back-end. This also disables the `bgl` Python module when building WITH_HEADLESS. Reviewed By: fclem Ref D15463 --- source/blender/render/intern/engine.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/engine.c b/source/blender/render/intern/engine.c index 8a4b4c2a70d..113af393706 100644 --- a/source/blender/render/intern/engine.c +++ b/source/blender/render/intern/engine.c @@ -46,6 +46,8 @@ #include "DRW_engine.h" +#include "GPU_context.h" + #include "pipeline.h" #include "render_result.h" #include "render_types.h" @@ -950,6 +952,16 @@ bool RE_engine_render(Render *re, bool do_all) re->draw_lock(re->dlh, true); } + if ((type->flag & RE_USE_GPU_CONTEXT) && (GPU_backend_get_type() == GPU_BACKEND_NONE)) { + /* Clear UI drawing locks. */ + if (re->draw_lock) { + re->draw_lock(re->dlh, false); + } + BKE_report(re->reports, RPT_ERROR, "Can not initialize the GPU"); + G.is_break = true; + return true; + } + /* update animation here so any render layer animation is applied before * creating the render result */ if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_BUTS_PREVIEW)) == 0) { -- cgit v1.2.3