feat: updated engine version to 4.4

This commit is contained in:
Sara 2025-03-17 10:43:25 +01:00
parent d08586768d
commit ba58baf432
140 changed files with 108317 additions and 14666 deletions

View file

@ -1316,8 +1316,87 @@ void DisplayServer::_input_set_custom_mouse_cursor_func(const Ref<Resource> &p_i
singleton->cursor_set_custom_image(p_image, (CursorShape)p_shape, p_hotspot);
}
bool DisplayServer::is_rendering_device_supported() {
#if defined(RD_ENABLED)
RenderingDevice *device = RenderingDevice::get_singleton();
if (device) {
return true;
}
if (supported_rendering_device == RenderingDeviceCreationStatus::SUCCESS) {
return true;
} else if (supported_rendering_device == RenderingDeviceCreationStatus::FAILURE) {
return false;
}
Error err;
#ifdef WINDOWS_ENABLED
// On some NVIDIA drivers combining OpenGL and RenderingDevice can result in crash, offload the check to the subprocess.
List<String> arguments;
arguments.push_back("--test-rd-support");
String pipe;
int exitcode = 0;
err = OS::get_singleton()->execute(OS::get_singleton()->get_executable_path(), arguments, &pipe, &exitcode);
if (err == OK && exitcode == 0) {
supported_rendering_device = RenderingDeviceCreationStatus::SUCCESS;
return true;
} else {
supported_rendering_device = RenderingDeviceCreationStatus::FAILURE;
}
#else // WINDOWS_ENABLED
RenderingContextDriver *rcd = nullptr;
#if defined(VULKAN_ENABLED)
rcd = memnew(RenderingContextDriverVulkan);
#endif
#ifdef D3D12_ENABLED
if (rcd == nullptr) {
rcd = memnew(RenderingContextDriverD3D12);
}
#endif
#ifdef METAL_ENABLED
if (rcd == nullptr) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availability"
// Eliminate "RenderingContextDriverMetal is only available on iOS 14.0 or newer".
rcd = memnew(RenderingContextDriverMetal);
#pragma clang diagnostic pop
}
#endif
if (rcd != nullptr) {
err = rcd->initialize();
if (err == OK) {
RenderingDevice *rd = memnew(RenderingDevice);
err = rd->initialize(rcd);
memdelete(rd);
rd = nullptr;
if (err == OK) {
// Creating a RenderingDevice is quite slow.
// Cache the result for future usage, so that it's much faster on subsequent calls.
supported_rendering_device = RenderingDeviceCreationStatus::SUCCESS;
memdelete(rcd);
rcd = nullptr;
return true;
} else {
supported_rendering_device = RenderingDeviceCreationStatus::FAILURE;
}
}
memdelete(rcd);
rcd = nullptr;
}
#endif // WINDOWS_ENABLED
#endif // RD_ENABLED
return false;
}
bool DisplayServer::can_create_rendering_device() {
if (get_singleton()->get_name() == "headless") {
if (get_singleton() && get_singleton()->get_name() == "headless") {
return false;
}
@ -1334,6 +1413,23 @@ bool DisplayServer::can_create_rendering_device() {
}
Error err;
#ifdef WINDOWS_ENABLED
// On some NVIDIA drivers combining OpenGL and RenderingDevice can result in crash, offload the check to the subprocess.
List<String> arguments;
arguments.push_back("--test-rd-creation");
String pipe;
int exitcode = 0;
err = OS::get_singleton()->execute(OS::get_singleton()->get_executable_path(), arguments, &pipe, &exitcode);
if (err == OK && exitcode == 0) {
created_rendering_device = RenderingDeviceCreationStatus::SUCCESS;
return true;
} else {
created_rendering_device = RenderingDeviceCreationStatus::FAILURE;
}
#else // WINDOWS_ENABLED
RenderingContextDriver *rcd = nullptr;
#if defined(VULKAN_ENABLED)
@ -1377,6 +1473,7 @@ bool DisplayServer::can_create_rendering_device() {
rcd = nullptr;
}
#endif // WINDOWS_ENABLED
#endif // RD_ENABLED
return false;
}

View file

@ -652,9 +652,11 @@ public:
// Used to cache the result of `can_create_rendering_device()` when RenderingDevice isn't currently being used.
// This is done as creating a RenderingDevice is quite slow.
static inline RenderingDeviceCreationStatus created_rendering_device = RenderingDeviceCreationStatus::UNKNOWN;
static bool can_create_rendering_device();
static inline RenderingDeviceCreationStatus supported_rendering_device = RenderingDeviceCreationStatus::UNKNOWN;
static bool is_rendering_device_supported();
DisplayServer();
~DisplayServer();
};

View file

@ -799,7 +799,7 @@ void MaterialStorage::MaterialData::update_uniform_buffer(const HashMap<StringNa
} else if (E.value.default_value.size()) {
//default value
_fill_std140_ubo_value(E.value.type, E.value.default_value, data, p_use_linear_color);
_fill_std140_ubo_value(E.value.type, E.value.default_value, data, E.value.hint == ShaderLanguage::ShaderNode::Uniform::HINT_SOURCE_COLOR && p_use_linear_color);
//value=E.value.default_value;
} else {
//zero because it was not provided

View file

@ -1292,7 +1292,12 @@ RID TextureStorage::texture_create_from_native_handle(RS::TextureType p_type, Im
// Assumed to be a color attachment - see note above.
uint64_t usage_flags = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
return RD::get_singleton()->texture_create_from_extension(type, format, RD::TEXTURE_SAMPLES_1, usage_flags, p_native_handle, p_width, p_height, p_depth, p_layers);
RID rd_texture = RD::get_singleton()->texture_create_from_extension(type, format, RD::TEXTURE_SAMPLES_1, usage_flags, p_native_handle, p_width, p_height, p_depth, p_layers);
RID texture = texture_allocate();
texture_rd_initialize(texture, rd_texture, p_layered_type);
return texture;
}
void TextureStorage::_texture_2d_update(RID p_texture, const Ref<Image> &p_image, int p_layer, bool p_immediate) {