diff options
author | Travis Lange <travislange12@gmail.com> | 2024-10-22 16:17:09 -0400 |
---|---|---|
committer | Travis Lange <travislange12@gmail.com> | 2024-10-22 16:17:09 -0400 |
commit | 2e1fc241f9942ac4f39add73ae7a103ab3222b6d (patch) | |
tree | ee0b7f1b412c0a7b601b9904f30457362817f1e7 | |
parent | 92e51fca7247c932f95a1662aefc28aca96e8de6 (diff) | |
download | redot-engine-2e1fc241f9942ac4f39add73ae7a103ab3222b6d.tar.gz |
fix headless import attempting to load graphics driver
-rw-r--r-- | modules/betsy/image_compress_betsy.cpp | 10 | ||||
-rw-r--r-- | servers/display_server.cpp | 4 | ||||
-rw-r--r-- | servers/rendering/rendering_device_binds.cpp | 5 |
3 files changed, 18 insertions, 1 deletions
diff --git a/modules/betsy/image_compress_betsy.cpp b/modules/betsy/image_compress_betsy.cpp index 7b4d8b3dfb..f5831a0b0e 100644 --- a/modules/betsy/image_compress_betsy.cpp +++ b/modules/betsy/image_compress_betsy.cpp @@ -36,11 +36,16 @@ #include "bc1.glsl.gen.h" #include "bc6h.glsl.gen.h" +#include "servers/display_server.h" static Mutex betsy_mutex; static BetsyCompressor *betsy = nullptr; void BetsyCompressor::_init() { + if (!DisplayServer::can_create_rendering_device()) { + return; + } + // Create local RD. RenderingContextDriver *rcd = nullptr; RenderingDevice *rd = RenderingServer::get_singleton()->create_local_rendering_device(); @@ -177,6 +182,11 @@ static String get_shader_name(BetsyFormat p_format) { Error BetsyCompressor::_compress(BetsyFormat p_format, Image *r_img) { uint64_t start_time = OS::get_singleton()->get_ticks_msec(); + // Return an error so that the compression can fall back to cpu compression + if (compress_rd == nullptr) { + return ERR_CANT_CREATE; + } + if (r_img->is_compressed()) { return ERR_INVALID_DATA; } diff --git a/servers/display_server.cpp b/servers/display_server.cpp index ce0d6cb996..dd976c4b26 100644 --- a/servers/display_server.cpp +++ b/servers/display_server.cpp @@ -1229,6 +1229,10 @@ void DisplayServer::_input_set_custom_mouse_cursor_func(const Ref<Resource> &p_i } bool DisplayServer::can_create_rendering_device() { + if (get_singleton()->get_name() == "headless") { + return false; + } + #if defined(RD_ENABLED) RenderingDevice *device = RenderingDevice::get_singleton(); if (device) { diff --git a/servers/rendering/rendering_device_binds.cpp b/servers/rendering/rendering_device_binds.cpp index d9ca286b15..e41a56b0a3 100644 --- a/servers/rendering/rendering_device_binds.cpp +++ b/servers/rendering/rendering_device_binds.cpp @@ -31,7 +31,10 @@ #include "rendering_device_binds.h" Error RDShaderFile::parse_versions_from_text(const String &p_text, const String p_defines, OpenIncludeFunction p_include_func, void *p_include_func_userdata) { - ERR_FAIL_NULL_V(RenderingDevice::get_singleton(), ERR_UNAVAILABLE); + ERR_FAIL_NULL_V_MSG( + RenderingDevice::get_singleton(), + ERR_UNAVAILABLE, + "Cannot import custom .glsl shaders when running without a RenderingDevice. This can happen if you are using the headless more or the Compatibility backend."); Vector<String> lines = p_text.split("\n"); |