diff options
author | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2017-12-27 01:31:51 +0100 |
---|---|---|
committer | K. S. Ernest (iFire) Lee <ernest.lee@chibifire.com> | 2018-02-15 07:34:11 -0800 |
commit | 6784d743f72f66e0e07343bdb326fa42c9f0f43c (patch) | |
tree | e7043786faac04dee67931003fdc319c16b179c2 | |
parent | 72ef766dfa5fcf35283079ccb98d74f4dbb2d934 (diff) |
server platform now compiles and run on linux.
Seems to also be able to do exports of some demos I tried.
-rw-r--r-- | platform/server/SCsub | 2 | ||||
-rw-r--r-- | platform/server/detect.py | 4 | ||||
-rw-r--r-- | platform/server/os_server.cpp | 167 | ||||
-rw-r--r-- | platform/server/os_server.h | 21 |
4 files changed, 147 insertions, 47 deletions
diff --git a/platform/server/SCsub b/platform/server/SCsub index 30d8cc8064..0788ad75ae 100644 --- a/platform/server/SCsub +++ b/platform/server/SCsub @@ -5,6 +5,8 @@ Import('env') common_server = [\ "os_server.cpp",\ + "#platform/x11/crash_handler_x11.cpp", + "#platform/x11/power_x11.cpp", ] prog = env.add_program('#bin/godot_server', ['godot_server.cpp'] + common_server) diff --git a/platform/server/detect.py b/platform/server/detect.py index bc615d3d04..c56625e83b 100644 --- a/platform/server/detect.py +++ b/platform/server/detect.py @@ -12,9 +12,6 @@ def get_name(): def can_build(): - # Doesn't build against Godot 3.0 for now, disable to avoid confusing users - return False - if (os.name != "posix" or sys.platform == "darwin"): return False @@ -133,3 +130,4 @@ def configure(env): env.Append(CPPPATH=['#platform/server']) env.Append(CPPFLAGS=['-DSERVER_ENABLED', '-DUNIX_ENABLED']) env.Append(LIBS=['pthread']) + env.Append(LIBS=['dl']) diff --git a/platform/server/os_server.cpp b/platform/server/os_server.cpp index 370a347399..49ecc4389a 100644 --- a/platform/server/os_server.cpp +++ b/platform/server/os_server.cpp @@ -27,11 +27,10 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ - -//#include "servers/visual/visual_server_raster.h" -//#include "servers/visual/rasterizer_dummy.h" #include "os_server.h" +#include "drivers/dummy/rasterizer_dummy.h" #include "print_string.h" +#include "servers/visual/visual_server_raster.h" #include <stdio.h> #include <stdlib.h> @@ -48,65 +47,54 @@ const char *OS_Server::get_video_driver_name(int p_driver) const { return "Dummy"; } -Error OS_Server::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { +int OS_Server::get_audio_driver_count() const { + return 0; +} - args = OS::get_singleton()->get_cmdline_args(); - current_videomode = p_desired; - main_loop = NULL; +const char *OS_Server::get_audio_driver_name(int p_driver) const { - //rasterizer = memnew( RasterizerDummy ); + return ""; +} - //visual_server = memnew( VisualServerRaster(rasterizer) ); +void OS_Server::initialize_core() { - AudioDriverManager::initialize(p_audio_driver); + crash_handler.initialize(); - sample_manager = memnew(SampleManagerMallocSW); - audio_server = memnew(AudioServerSW(sample_manager)); - audio_server->init(); - spatial_sound_server = memnew(SpatialSoundServerSW); - spatial_sound_server->init(); - spatial_sound_2d_server = memnew(SpatialSound2DServerSW); - spatial_sound_2d_server->init(); + OS_Unix::initialize_core(); +} - ERR_FAIL_COND_V(!visual_server, ERR_UNAVAILABLE); +void OS_Server::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { + args = OS::get_singleton()->get_cmdline_args(); + current_videomode = p_desired; + main_loop = NULL; + + RasterizerDummy::make_current(); + + visual_server = memnew(VisualServerRaster); visual_server->init(); + AudioDriverManager::initialize(p_audio_driver); + input = memnew(InputDefault); - _ensure_user_data_dir(); + power_manager = memnew(PowerX11); - return OK; + _ensure_user_data_dir(); } - void OS_Server::finalize() { if (main_loop) memdelete(main_loop); main_loop = NULL; - spatial_sound_server->finish(); - memdelete(spatial_sound_server); - spatial_sound_2d_server->finish(); - memdelete(spatial_sound_2d_server); - - /* - if (debugger_connection_console) { - memdelete(debugger_connection_console); - } - */ - - memdelete(sample_manager); - - audio_server->finish(); - memdelete(audio_server); - visual_server->finish(); memdelete(visual_server); - //memdelete(rasterizer); memdelete(input); + memdelete(power_manager); + args.clear(); } @@ -183,9 +171,6 @@ void OS_Server::move_window_to_foreground() { void OS_Server::set_cursor_shape(CursorShape p_shape) { } -void OS_Server::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot) { -} - OS::PowerState OS_Server::get_power_state() { return power_manager->get_power_state(); } @@ -198,6 +183,10 @@ int OS_Server::get_power_percent_left() { return power_manager->get_power_percent_left(); } +bool OS_Server::_check_internal_feature_support(const String &p_feature) { + return p_feature == "pc"; +} + void OS_Server::run() { force_quit = false; @@ -216,6 +205,102 @@ void OS_Server::run() { main_loop->finish(); } +String OS_Server::get_config_path() const { + + if (has_environment("XDG_CONFIG_HOME")) { + return get_environment("XDG_CONFIG_HOME"); + } else if (has_environment("HOME")) { + return get_environment("HOME").plus_file(".config"); + } else { + return "."; + } +} + +String OS_Server::get_data_path() const { + + if (has_environment("XDG_DATA_HOME")) { + return get_environment("XDG_DATA_HOME"); + } else if (has_environment("HOME")) { + return get_environment("HOME").plus_file(".local/share"); + } else { + return get_config_path(); + } +} + +String OS_Server::get_cache_path() const { + + if (has_environment("XDG_CACHE_HOME")) { + return get_environment("XDG_CACHE_HOME"); + } else if (has_environment("HOME")) { + return get_environment("HOME").plus_file(".cache"); + } else { + return get_config_path(); + } +} + +String OS_Server::get_system_dir(SystemDir p_dir) const { + + String xdgparam; + + switch (p_dir) { + case SYSTEM_DIR_DESKTOP: { + + xdgparam = "DESKTOP"; + } break; + case SYSTEM_DIR_DCIM: { + + xdgparam = "PICTURES"; + + } break; + case SYSTEM_DIR_DOCUMENTS: { + + xdgparam = "DOCUMENTS"; + + } break; + case SYSTEM_DIR_DOWNLOADS: { + + xdgparam = "DOWNLOAD"; + + } break; + case SYSTEM_DIR_MOVIES: { + + xdgparam = "VIDEOS"; + + } break; + case SYSTEM_DIR_MUSIC: { + + xdgparam = "MUSIC"; + + } break; + case SYSTEM_DIR_PICTURES: { + + xdgparam = "PICTURES"; + + } break; + case SYSTEM_DIR_RINGTONES: { + + xdgparam = "MUSIC"; + + } break; + } + + String pipe; + List<String> arg; + arg.push_back(xdgparam); + Error err = const_cast<OS_Server *>(this)->execute("xdg-user-dir", arg, true, NULL, &pipe); + if (err != OK) + return "."; + return pipe.strip_edges(); +} + +void OS_Server::disable_crash_handler() { + crash_handler.disable(); +} + +bool OS_Server::is_disable_crash_handler() const { + return crash_handler.is_disabled(); +} + OS_Server::OS_Server() { //adriver here diff --git a/platform/server/os_server.h b/platform/server/os_server.h index 7abb4565d5..8ab9e028ba 100644 --- a/platform/server/os_server.h +++ b/platform/server/os_server.h @@ -27,10 +27,10 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ - #ifndef OS_SERVER_H #define OS_SERVER_H +#include "../x11/crash_handler_x11.h" #include "../x11/power_x11.h" #include "drivers/rtaudio/audio_driver_rtaudio.h" #include "drivers/unix/os_unix.h" @@ -63,11 +63,17 @@ class OS_Server : public OS_Unix { PowerX11 *power_manager; + CrashHandler crash_handler; + protected: virtual int get_video_driver_count() const; virtual const char *get_video_driver_name(int p_driver) const; - virtual Error initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver); + virtual int get_audio_driver_count() const; + virtual const char *get_audio_driver_name(int p_driver) const; + + virtual void initialize_core(); + virtual void initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver); virtual void finalize(); virtual void set_main_loop(MainLoop *p_main_loop); @@ -76,7 +82,6 @@ public: virtual String get_name(); virtual void set_cursor_shape(CursorShape p_shape); - virtual void set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot); virtual void set_mouse_show(bool p_show); virtual void set_mouse_grab(bool p_grab); @@ -102,6 +107,16 @@ public: virtual OS::PowerState get_power_state(); virtual int get_power_seconds_left(); virtual int get_power_percent_left(); + virtual bool _check_internal_feature_support(const String &p_feature); + + virtual String get_config_path() const; + virtual String get_data_path() const; + virtual String get_cache_path() const; + + virtual String get_system_dir(SystemDir p_dir) const; + + void disable_crash_handler(); + bool is_disable_crash_handler() const; OS_Server(); }; |