diff options
-rw-r--r-- | doc/minetest.6 | 3 | ||||
-rw-r--r-- | src/main.cpp | 59 |
2 files changed, 60 insertions, 2 deletions
diff --git a/doc/minetest.6 b/doc/minetest.6 index b3fdd94d9..64dfdd149 100644 --- a/doc/minetest.6 +++ b/doc/minetest.6 @@ -61,6 +61,9 @@ Run dedicated server \-\-speedtests Run speed tests .TP +\-\-videomodes +List available video modes +.TP \-\-info Print more information to console .TP diff --git a/src/main.cpp b/src/main.cpp index f2ff88c0c..b87a3e6d0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -936,6 +936,8 @@ int main(int argc, char *argv[]) allowed_options.insert(std::make_pair("gameid", ValueSpec(VALUETYPE_STRING, _("Set gameid (\"--gameid list\" prints available ones)")))); #ifndef SERVER + allowed_options.insert(std::make_pair("videomodes", ValueSpec(VALUETYPE_FLAG, + _("Show available video modes")))); allowed_options.insert(std::make_pair("speedtests", ValueSpec(VALUETYPE_FLAG, _("Run speed tests")))); allowed_options.insert(std::make_pair("address", ValueSpec(VALUETYPE_STRING, @@ -1035,7 +1037,7 @@ int main(int argc, char *argv[]) print_worldspecs(worldspecs, dstream); return 0; } - + // Print startup message infostream<<PROJECT_NAME<< " "<<_("with")<<" SER_FMT_VER_HIGHEST="<<(int)SER_FMT_VER_HIGHEST @@ -1415,11 +1417,64 @@ int main(int argc, char *argv[]) } /* - Create device and exit if creation failed + List video modes if requested */ MyEventReceiver receiver; + if(cmd_args.getFlag("videomodes")){ + IrrlichtDevice *nulldevice; + + SIrrlichtCreationParameters params = SIrrlichtCreationParameters(); + params.DriverType = video::EDT_NULL; + params.WindowSize = core::dimension2d<u32>(640, 480); + params.Bits = 24; + params.AntiAlias = fsaa; + params.Fullscreen = false; + params.Stencilbuffer = false; + params.Vsync = vsync; + params.EventReceiver = &receiver; + + nulldevice = createDeviceEx(params); + + if(nulldevice == 0) + return 1; + + dstream<<_("Available video modes (WxHxD):")<<std::endl; + + video::IVideoModeList *videomode_list = + nulldevice->getVideoModeList(); + + if(videomode_list == 0){ + nulldevice->drop(); + return 1; + } + + s32 videomode_count = videomode_list->getVideoModeCount(); + core::dimension2d<u32> videomode_res; + s32 videomode_depth; + for (s32 i = 0; i < videomode_count; ++i){ + videomode_res = videomode_list->getVideoModeResolution(i); + videomode_depth = videomode_list->getVideoModeDepth(i); + dstream<<videomode_res.Width<<"x"<<videomode_res.Height + <<"x"<<videomode_depth<<std::endl; + } + + dstream<<_("Active video mode (WxHxD):")<<std::endl; + videomode_res = videomode_list->getDesktopResolution(); + videomode_depth = videomode_list->getDesktopDepth(); + dstream<<videomode_res.Width<<"x"<<videomode_res.Height + <<"x"<<videomode_depth<<std::endl; + + nulldevice->drop(); + + return 0; + } + + /* + Create device and exit if creation failed + */ + IrrlichtDevice *device; SIrrlichtCreationParameters params = SIrrlichtCreationParameters(); |