diff options
Diffstat (limited to 'main/main.cpp')
| -rw-r--r-- | main/main.cpp | 76 | 
1 files changed, 48 insertions, 28 deletions
diff --git a/main/main.cpp b/main/main.cpp index 2bb67f17f1..a9037806bf 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -148,7 +148,7 @@ static bool cmdline_tool = false;  static String locale;  static bool show_help = false;  static bool auto_quit = false; -static OS::ProcessID allow_focus_steal_pid = 0; +static OS::ProcessID editor_pid = 0;  #ifdef TOOLS_ENABLED  static bool auto_build_solutions = false;  static String debug_server_uri; @@ -181,7 +181,6 @@ static bool debug_navigation = false;  static int frame_delay = 0;  static bool disable_render_loop = false;  static int fixed_fps = -1; -static String write_movie_path;  static MovieWriter *movie_writer = nullptr;  static bool disable_vsync = false;  static bool print_fps = false; @@ -344,6 +343,7 @@ void Main::print_help(const char *p_binary) {  	OS::get_singleton()->print("  --resolution <W>x<H>                         Request window resolution.\n");  	OS::get_singleton()->print("  --position <X>,<Y>                           Request window position.\n");  	OS::get_singleton()->print("  --single-window                              Use a single window (no separate subwindows).\n"); +	OS::get_singleton()->print("  --xr-mode <mode>                             Select XR mode (default/off/on).\n");  	OS::get_singleton()->print("\n");  	OS::get_singleton()->print("Debug options:\n"); @@ -410,6 +410,8 @@ Error Main::test_setup() {  			String("Please include this when reporting the bug on https://github.com/godotengine/godot/issues"));  	GLOBAL_DEF_RST("rendering/occlusion_culling/bvh_build_quality", 2); +	register_core_settings(); //here globals are present +  	translation_server = memnew(TranslationServer);  	tsman = memnew(TextServerManager); @@ -685,7 +687,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph  	I = args.front();  	while (I) { -#ifdef OSX_ENABLED +#ifdef MACOS_ENABLED  		// Ignore the process serial number argument passed by macOS Gatekeeper.  		// Otherwise, Godot would try to open a non-existent project on the first start and abort.  		if (I->get().begins_with("-psn_")) { @@ -1044,10 +1046,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph  			if (I->next()) {  				String p = I->next()->get(); -				if (OS::get_singleton()->set_cwd(p) == OK) { -					//nothing -				} else { -					project_path = I->next()->get(); //use project_path instead +				if (OS::get_singleton()->set_cwd(p) != OK) { +					OS::get_singleton()->print("Invalid project path specified: \"%s\", aborting.\n", p.utf8().get_data()); +					goto error;  				}  				N = I->next()->next();  			} else { @@ -1141,9 +1142,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph  				OS::get_singleton()->print("Missing remote debug host address, aborting.\n");  				goto error;  			} -		} else if (I->get() == "--allow_focus_steal_pid") { // not exposed to user +		} else if (I->get() == "--editor-pid") { // not exposed to user  			if (I->next()) { -				allow_focus_steal_pid = I->next()->get().to_int(); +				editor_pid = I->next()->get().to_int();  				N = I->next()->next();  			} else {  				OS::get_singleton()->print("Missing editor PID argument, aborting.\n"); @@ -1161,7 +1162,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph  			}  		} else if (I->get() == "--write-movie") {  			if (I->next()) { -				write_movie_path = I->next()->get(); +				Engine::get_singleton()->set_write_movie_path(I->next()->get());  				N = I->next()->next();  				if (fixed_fps == -1) {  					fixed_fps = 60; @@ -1181,6 +1182,25 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph  			OS::get_singleton()->disable_crash_handler();  		} else if (I->get() == "--skip-breakpoints") {  			skip_breakpoints = true; +		} else if (I->get() == "--xr-mode") { +			if (I->next()) { +				String xr_mode = I->next()->get().to_lower(); +				N = I->next()->next(); +				if (xr_mode == "default") { +					XRServer::set_xr_mode(XRServer::XRMODE_DEFAULT); +				} else if (xr_mode == "off") { +					XRServer::set_xr_mode(XRServer::XRMODE_OFF); +				} else if (xr_mode == "on") { +					XRServer::set_xr_mode(XRServer::XRMODE_ON); +				} else { +					OS::get_singleton()->print("Unknown --xr-mode argument \"%s\", aborting.\n", xr_mode.ascii().get_data()); +					goto error; +				} +			} else { +				OS::get_singleton()->print("Missing --xr-mode argument, aborting.\n"); +				goto error; +			} +  		} else {  			main_args.push_back(I->get());  		} @@ -1273,7 +1293,11 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph  					PROPERTY_HINT_RANGE,  					"0, 200, 1, or_greater")); -	EngineDebugger::initialize(debug_uri, skip_breakpoints, breakpoints); +	EngineDebugger::initialize(debug_uri, skip_breakpoints, breakpoints, []() { +		if (editor_pid) { +			DisplayServer::get_singleton()->enable_for_stealing_focus(editor_pid); +		} +	});  #ifdef TOOLS_ENABLED  	if (editor) { @@ -1431,7 +1455,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph  		}  	} -	GLOBAL_DEF("internationalization/rendering/force_right_to_left_layout_direction", false); +	GLOBAL_DEF_RST("internationalization/rendering/force_right_to_left_layout_direction", false);  	GLOBAL_DEF("internationalization/locale/include_text_server_data", false);  	OS::get_singleton()->_allow_hidpi = GLOBAL_DEF("display/window/dpi/allow_hidpi", true); @@ -1507,7 +1531,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph  		audio_driver_idx = 0;  	} -	if (write_movie_path != String()) { +	if (Engine::get_singleton()->get_write_movie_path() != String()) {  		// Always use dummy driver for audio driver (which is last), also in no threaded mode.  		audio_driver_idx = AudioDriverManager::get_driver_count() - 1;  		AudioDriverDummy::get_dummy_singleton()->set_use_threads(false); @@ -1604,7 +1628,7 @@ error:  	display_driver = "";  	audio_driver = "";  	tablet_driver = ""; -	write_movie_path = ""; +	Engine::get_singleton()->set_write_movie_path(String());  	project_path = "";  	args.clear(); @@ -1779,11 +1803,11 @@ Error Main::setup2(Thread::ID p_main_tid_override) {  		rendering_server->set_print_gpu_profile(true);  	} -	if (write_movie_path != String()) { -		movie_writer = MovieWriter::find_writer_for_file(write_movie_path); +	if (Engine::get_singleton()->get_write_movie_path() != String()) { +		movie_writer = MovieWriter::find_writer_for_file(Engine::get_singleton()->get_write_movie_path());  		if (movie_writer == nullptr) { -			ERR_PRINT("Can't find movie writer for file type, aborting: " + write_movie_path); -			write_movie_path = String(); +			ERR_PRINT("Can't find movie writer for file type, aborting: " + Engine::get_singleton()->get_write_movie_path()); +			Engine::get_singleton()->set_write_movie_path(String());  		}  	} @@ -1838,10 +1862,6 @@ Error Main::setup2(Thread::ID p_main_tid_override) {  		DisplayServer::get_singleton()->window_set_flag(DisplayServer::WINDOW_FLAG_ALWAYS_ON_TOP, true);  	} -	if (allow_focus_steal_pid) { -		DisplayServer::get_singleton()->enable_for_stealing_focus(allow_focus_steal_pid); -	} -  	MAIN_PRINT("Main: Load Boot Image");  	Color clear = GLOBAL_DEF_BASIC("rendering/environment/defaults/default_clear_color", Color(0.3, 0.3, 0.3)); @@ -1965,7 +1985,7 @@ Error Main::setup2(Thread::ID p_main_tid_override) {  	MAIN_PRINT("Main: Load TextServer");  	/* Enum text drivers */ -	GLOBAL_DEF("internationalization/rendering/text_driver", ""); +	GLOBAL_DEF_RST("internationalization/rendering/text_driver", "");  	String text_driver_options;  	for (int i = 0; i < TextServerManager::get_singleton()->get_interface_count(); i++) {  		if (i > 0) { @@ -2078,7 +2098,7 @@ Error Main::setup2(Thread::ID p_main_tid_override) {  		// able to load resources, load the global shader variables.  		// If running on editor, don't load the textures because the editor  		// may want to import them first. Editor will reload those later. -		rendering_server->global_variables_load_settings(!editor); +		rendering_server->global_shader_uniforms_load_settings(!editor);  	}  	_start_success = true; @@ -2575,7 +2595,7 @@ bool Main::start() {  					PropertyInfo(Variant::FLOAT,  							"display/window/stretch/scale",  							PROPERTY_HINT_RANGE, -							"1.0,8.0,0.1")); +							"0.5,8.0,0.01"));  			sml->set_auto_accept_quit(GLOBAL_DEF("application/config/auto_accept_quit", true));  			sml->set_quit_on_go_back(GLOBAL_DEF("application/config/quit_on_go_back", true));  			GLOBAL_DEF_BASIC("gui/common/snap_controls_to_pixels", true); @@ -2669,7 +2689,7 @@ bool Main::start() {  				ERR_FAIL_COND_V_MSG(!scene, false, "Failed loading scene: " + local_game_path);  				sml->add_current_scene(scene); -#ifdef OSX_ENABLED +#ifdef MACOS_ENABLED  				String mac_iconpath = GLOBAL_DEF("application/config/macos_native_icon", "Variant()");  				if (!mac_iconpath.is_empty()) {  					DisplayServer::get_singleton()->set_native_icon(mac_iconpath); @@ -2723,7 +2743,7 @@ bool Main::start() {  	OS::get_singleton()->set_main_loop(main_loop);  	if (movie_writer) { -		movie_writer->begin(DisplayServer::get_singleton()->window_get_size(), fixed_fps, write_movie_path); +		movie_writer->begin(DisplayServer::get_singleton()->window_get_size(), fixed_fps, Engine::get_singleton()->get_write_movie_path());  	}  	if (minimum_time_msec) { @@ -2991,7 +3011,7 @@ void Main::cleanup(bool p_force) {  	RenderingServer::get_singleton()->sync();  	//clear global shader variables before scene and other graphics stuff are deinitialized. -	rendering_server->global_variables_clear(); +	rendering_server->global_shader_uniforms_clear();  	if (xr_server) {  		// Now that we're unregistering properly in plugins we need to keep access to xr_server for a little longer  |