Check if RD is supported in the ProjectManager and disable creating RD projects if not supported.
This commit is contained in:
parent
3978628c6c
commit
04d0e7f7a4
4 changed files with 75 additions and 3 deletions
|
@ -428,6 +428,8 @@ void ProjectDialog::_renderer_selected() {
|
||||||
|
|
||||||
String renderer_type = renderer_button_group->get_pressed_button()->get_meta(SNAME("rendering_method"));
|
String renderer_type = renderer_button_group->get_pressed_button()->get_meta(SNAME("rendering_method"));
|
||||||
|
|
||||||
|
bool rd_error = false;
|
||||||
|
|
||||||
if (renderer_type == "forward_plus") {
|
if (renderer_type == "forward_plus") {
|
||||||
renderer_info->set_text(
|
renderer_info->set_text(
|
||||||
String::utf8("• ") + TTR("Supports desktop platforms only.") +
|
String::utf8("• ") + TTR("Supports desktop platforms only.") +
|
||||||
|
@ -435,6 +437,7 @@ void ProjectDialog::_renderer_selected() {
|
||||||
String::utf8("\n• ") + TTR("Can scale to large complex scenes.") +
|
String::utf8("\n• ") + TTR("Can scale to large complex scenes.") +
|
||||||
String::utf8("\n• ") + TTR("Uses RenderingDevice backend.") +
|
String::utf8("\n• ") + TTR("Uses RenderingDevice backend.") +
|
||||||
String::utf8("\n• ") + TTR("Slower rendering of simple scenes."));
|
String::utf8("\n• ") + TTR("Slower rendering of simple scenes."));
|
||||||
|
rd_error = !rendering_device_supported;
|
||||||
} else if (renderer_type == "mobile") {
|
} else if (renderer_type == "mobile") {
|
||||||
renderer_info->set_text(
|
renderer_info->set_text(
|
||||||
String::utf8("• ") + TTR("Supports desktop + mobile platforms.") +
|
String::utf8("• ") + TTR("Supports desktop + mobile platforms.") +
|
||||||
|
@ -442,16 +445,24 @@ void ProjectDialog::_renderer_selected() {
|
||||||
String::utf8("\n• ") + TTR("Less scalable for complex scenes.") +
|
String::utf8("\n• ") + TTR("Less scalable for complex scenes.") +
|
||||||
String::utf8("\n• ") + TTR("Uses RenderingDevice backend.") +
|
String::utf8("\n• ") + TTR("Uses RenderingDevice backend.") +
|
||||||
String::utf8("\n• ") + TTR("Fast rendering of simple scenes."));
|
String::utf8("\n• ") + TTR("Fast rendering of simple scenes."));
|
||||||
|
rd_error = !rendering_device_supported;
|
||||||
} else if (renderer_type == "gl_compatibility") {
|
} else if (renderer_type == "gl_compatibility") {
|
||||||
renderer_info->set_text(
|
renderer_info->set_text(
|
||||||
String::utf8("• ") + TTR("Supports desktop, mobile + web platforms.") +
|
String::utf8("• ") + TTR("Supports desktop, mobile + web platforms.") +
|
||||||
String::utf8("\n• ") + TTR("Least advanced 3D graphics (currently work-in-progress).") +
|
String::utf8("\n• ") + TTR("Least advanced 3D graphics.") +
|
||||||
String::utf8("\n• ") + TTR("Intended for low-end/older devices.") +
|
String::utf8("\n• ") + TTR("Intended for low-end/older devices.") +
|
||||||
String::utf8("\n• ") + TTR("Uses OpenGL 3 backend (OpenGL 3.3/ES 3.0/WebGL2).") +
|
String::utf8("\n• ") + TTR("Uses OpenGL 3 backend (OpenGL 3.3/ES 3.0/WebGL2).") +
|
||||||
String::utf8("\n• ") + TTR("Fastest rendering of simple scenes."));
|
String::utf8("\n• ") + TTR("Fastest rendering of simple scenes."));
|
||||||
} else {
|
} else {
|
||||||
WARN_PRINT("Unknown renderer type. Please report this as a bug on GitHub.");
|
WARN_PRINT("Unknown renderer type. Please report this as a bug on GitHub.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rd_not_supported->set_visible(rd_error);
|
||||||
|
get_ok_button()->set_disabled(rd_error);
|
||||||
|
if (rd_error) {
|
||||||
|
// Needs to be set here since theme colors aren't available at startup.
|
||||||
|
rd_not_supported->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProjectDialog::_nonempty_confirmation_ok_pressed() {
|
void ProjectDialog::_nonempty_confirmation_ok_pressed() {
|
||||||
|
@ -903,10 +914,16 @@ ProjectDialog::ProjectDialog() {
|
||||||
default_renderer_type = EditorSettings::get_singleton()->get_setting("project_manager/default_renderer");
|
default_renderer_type = EditorSettings::get_singleton()->get_setting("project_manager/default_renderer");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rendering_device_supported = DisplayServer::can_create_rendering_device();
|
||||||
|
|
||||||
|
if (!rendering_device_supported) {
|
||||||
|
default_renderer_type = "gl_compatibility";
|
||||||
|
}
|
||||||
|
|
||||||
Button *rs_button = memnew(CheckBox);
|
Button *rs_button = memnew(CheckBox);
|
||||||
rs_button->set_button_group(renderer_button_group);
|
rs_button->set_button_group(renderer_button_group);
|
||||||
rs_button->set_text(TTR("Forward+"));
|
rs_button->set_text(TTR("Forward+"));
|
||||||
#if defined(WEB_ENABLED)
|
#ifndef RD_ENABLED
|
||||||
rs_button->set_disabled(true);
|
rs_button->set_disabled(true);
|
||||||
#endif
|
#endif
|
||||||
rs_button->set_meta(SNAME("rendering_method"), "forward_plus");
|
rs_button->set_meta(SNAME("rendering_method"), "forward_plus");
|
||||||
|
@ -918,7 +935,7 @@ ProjectDialog::ProjectDialog() {
|
||||||
rs_button = memnew(CheckBox);
|
rs_button = memnew(CheckBox);
|
||||||
rs_button->set_button_group(renderer_button_group);
|
rs_button->set_button_group(renderer_button_group);
|
||||||
rs_button->set_text(TTR("Mobile"));
|
rs_button->set_text(TTR("Mobile"));
|
||||||
#if defined(WEB_ENABLED)
|
#ifndef RD_ENABLED
|
||||||
rs_button->set_disabled(true);
|
rs_button->set_disabled(true);
|
||||||
#endif
|
#endif
|
||||||
rs_button->set_meta(SNAME("rendering_method"), "mobile");
|
rs_button->set_meta(SNAME("rendering_method"), "mobile");
|
||||||
|
@ -950,6 +967,15 @@ ProjectDialog::ProjectDialog() {
|
||||||
renderer_info = memnew(Label);
|
renderer_info = memnew(Label);
|
||||||
renderer_info->set_modulate(Color(1, 1, 1, 0.7));
|
renderer_info->set_modulate(Color(1, 1, 1, 0.7));
|
||||||
rvb->add_child(renderer_info);
|
rvb->add_child(renderer_info);
|
||||||
|
|
||||||
|
rd_not_supported = memnew(Label);
|
||||||
|
rd_not_supported->set_text(TTR("Rendering Device backend not available. Please use the Compatibility renderer."));
|
||||||
|
rd_not_supported->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
|
||||||
|
rd_not_supported->set_custom_minimum_size(Size2(200, 0) * EDSCALE);
|
||||||
|
rd_not_supported->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
|
||||||
|
rd_not_supported->set_visible(false);
|
||||||
|
renderer_container->add_child(rd_not_supported);
|
||||||
|
|
||||||
_renderer_selected();
|
_renderer_selected();
|
||||||
|
|
||||||
l = memnew(Label);
|
l = memnew(Label);
|
||||||
|
|
|
@ -77,6 +77,8 @@ private:
|
||||||
Label *renderer_info = nullptr;
|
Label *renderer_info = nullptr;
|
||||||
HBoxContainer *default_files_container = nullptr;
|
HBoxContainer *default_files_container = nullptr;
|
||||||
Ref<ButtonGroup> renderer_button_group;
|
Ref<ButtonGroup> renderer_button_group;
|
||||||
|
bool rendering_device_supported = false;
|
||||||
|
Label *rd_not_supported = nullptr;
|
||||||
|
|
||||||
Label *msg = nullptr;
|
Label *msg = nullptr;
|
||||||
LineEdit *project_name = nullptr;
|
LineEdit *project_name = nullptr;
|
||||||
|
|
|
@ -34,6 +34,14 @@
|
||||||
#include "scene/resources/texture.h"
|
#include "scene/resources/texture.h"
|
||||||
#include "servers/display_server_headless.h"
|
#include "servers/display_server_headless.h"
|
||||||
|
|
||||||
|
#if defined(VULKAN_ENABLED)
|
||||||
|
#include "drivers/vulkan/rendering_context_driver_vulkan.h"
|
||||||
|
#undef CursorShape
|
||||||
|
#endif
|
||||||
|
#if defined(D3D12_ENABLED)
|
||||||
|
#include "drivers/d3d12/rendering_context_driver_d3d12.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
DisplayServer *DisplayServer::singleton = nullptr;
|
DisplayServer *DisplayServer::singleton = nullptr;
|
||||||
|
|
||||||
bool DisplayServer::hidpi_allowed = false;
|
bool DisplayServer::hidpi_allowed = false;
|
||||||
|
@ -1211,6 +1219,40 @@ void DisplayServer::_input_set_custom_mouse_cursor_func(const Ref<Resource> &p_i
|
||||||
singleton->cursor_set_custom_image(p_image, (CursorShape)p_shape, p_hostspot);
|
singleton->cursor_set_custom_image(p_image, (CursorShape)p_shape, p_hostspot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DisplayServer::can_create_rendering_device() {
|
||||||
|
#if defined(RD_ENABLED)
|
||||||
|
Error err;
|
||||||
|
RenderingContextDriver *rcd = nullptr;
|
||||||
|
|
||||||
|
#if defined(VULKAN_ENABLED)
|
||||||
|
rcd = memnew(RenderingContextDriverVulkan);
|
||||||
|
#endif
|
||||||
|
#ifdef D3D12_ENABLED
|
||||||
|
if (rcd == nullptr) {
|
||||||
|
rcd = memnew(RenderingContextDriverD3D12);
|
||||||
|
}
|
||||||
|
#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) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
memdelete(rcd);
|
||||||
|
rcd = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // RD_ENABLED
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
DisplayServer::DisplayServer() {
|
DisplayServer::DisplayServer() {
|
||||||
singleton = this;
|
singleton = this;
|
||||||
Input::set_mouse_mode_func = _input_set_mouse_mode;
|
Input::set_mouse_mode_func = _input_set_mouse_mode;
|
||||||
|
|
|
@ -594,6 +594,8 @@ public:
|
||||||
static Vector<String> get_create_function_rendering_drivers(int p_index);
|
static Vector<String> get_create_function_rendering_drivers(int p_index);
|
||||||
static DisplayServer *create(int p_index, const String &p_rendering_driver, WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Vector2i *p_position, const Vector2i &p_resolution, int p_screen, Context p_context, Error &r_error);
|
static DisplayServer *create(int p_index, const String &p_rendering_driver, WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Vector2i *p_position, const Vector2i &p_resolution, int p_screen, Context p_context, Error &r_error);
|
||||||
|
|
||||||
|
static bool can_create_rendering_device();
|
||||||
|
|
||||||
DisplayServer();
|
DisplayServer();
|
||||||
~DisplayServer();
|
~DisplayServer();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue