summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTravis Lange <travislange12@gmail.com>2024-10-22 16:17:09 -0400
committerTravis Lange <travislange12@gmail.com>2024-10-22 16:17:09 -0400
commit2e1fc241f9942ac4f39add73ae7a103ab3222b6d (patch)
treeee0b7f1b412c0a7b601b9904f30457362817f1e7
parent92e51fca7247c932f95a1662aefc28aca96e8de6 (diff)
downloadredot-engine-2e1fc241f9942ac4f39add73ae7a103ab3222b6d.tar.gz
fix headless import attempting to load graphics driver
-rw-r--r--modules/betsy/image_compress_betsy.cpp10
-rw-r--r--servers/display_server.cpp4
-rw-r--r--servers/rendering/rendering_device_binds.cpp5
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");