[glfw] Use args in GLFW example

This commit is contained in:
Bruno de Oliveira Abinader
2017-12-18 16:20:45 +02:00
parent 6a838eeffb
commit e91cab516c
2 changed files with 42 additions and 57 deletions

View File

@@ -25,6 +25,7 @@ target_add_mason_package(mbgl-glfw PRIVATE geojson)
target_add_mason_package(mbgl-glfw PRIVATE geometry)
target_add_mason_package(mbgl-glfw PRIVATE glfw)
target_add_mason_package(mbgl-glfw PRIVATE variant)
target_add_mason_package(mbgl-glfw PRIVATE args)
mbgl_platform_glfw()

View File

@@ -10,10 +10,11 @@
#include <mbgl/style/style.hpp>
#include <mbgl/renderer/renderer.hpp>
#include <args/args.hxx>
#include <csignal>
#include <getopt.h>
#include <fstream>
#include <sstream>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <array>
@@ -34,64 +35,47 @@ void quit_handler(int) {
}
int main(int argc, char *argv[]) {
args::ArgumentParser argumentParser("Mapbox GL GLFW example");
args::HelpFlag helpFlag(argumentParser, "help", "Display this help menu", {'h', "help"});
args::Flag fullscreenFlag(argumentParser, "fullscreen", "Toggle fullscreen", {'f', "fullscreen"});
args::Flag benchmarkFlag(argumentParser, "benchmark", "Toggle benchmark", {'b', "benchmark"});
args::Flag offlineFlag(argumentParser, "offline", "Toggle offline", {'o', "offline"});
args::ValueFlag<std::string> styleValue(argumentParser, "URL", "Map stylesheet", {'s', "style"});
args::ValueFlag<double> lonValue(argumentParser, "degrees", "Longitude", {'x', "lon"});
args::ValueFlag<double> latValue(argumentParser, "degrees", "Latitude", {'y', "lat"});
args::ValueFlag<double> zoomValue(argumentParser, "number", "Zoom level", {'z', "zoom"});
args::ValueFlag<double> bearingValue(argumentParser, "degrees", "Bearing", {'b', "bearing"});
args::ValueFlag<double> pitchValue(argumentParser, "degrees", "Pitch", {'p', "pitch"});
try {
argumentParser.ParseCLI(argc, argv);
} catch (args::Help) {
std::cout << argumentParser;
exit(0);
} catch (args::ParseError e) {
std::cerr << e.what() << std::endl;
std::cerr << argumentParser;
exit(1);
} catch (args::ValidationError e) {
std::cerr << e.what() << std::endl;
std::cerr << argumentParser;
exit(2);
}
// Load settings
mbgl::Settings_JSON settings;
settings.online = !offlineFlag;
if (lonValue) settings.longitude = args::get(lonValue);
if (latValue) settings.latitude = args::get(latValue);
if (zoomValue) settings.zoom = args::get(zoomValue);
if (bearingValue) settings.bearing = args::get(bearingValue);
if (pitchValue) settings.pitch = args::get(pitchValue);
bool fullscreen = false;
bool benchmark = false;
std::string style;
const struct option long_options[] = {
{"fullscreen", no_argument, nullptr, 'f'},
{"benchmark", no_argument, nullptr, 'b'},
{"offline", no_argument, nullptr, 'o'},
{"style", required_argument, nullptr, 's'},
{"lon", required_argument, nullptr, 'x'},
{"lat", required_argument, nullptr, 'y'},
{"zoom", required_argument, nullptr, 'z'},
{"bearing", required_argument, nullptr, 'r'},
{"pitch", required_argument, nullptr, 'p'},
{nullptr, 0, nullptr, 0}
};
while (true) {
int option_index = 0;
int opt = getopt_long(argc, argv, "fbs:", long_options, &option_index);
if (opt == -1) break;
switch (opt)
{
case 'f':
fullscreen = true;
break;
case 'b':
benchmark = true;
break;
case 'o':
settings.online = false;
break;
case 's':
style = std::string(optarg);
break;
case 'x':
settings.longitude = atof(optarg);
break;
case 'y':
settings.latitude = atof(optarg);
break;
case 'z':
settings.zoom = atof(optarg);
break;
case 'r':
settings.bearing = atof(optarg);
break;
case 'p':
settings.pitch = atof(optarg);
break;
default:
break;
}
}
const bool fullscreen = fullscreenFlag ? args::get(fullscreenFlag) : false;
const bool benchmark = benchmarkFlag ? args::get(benchmarkFlag) : false;
std::string style = styleValue ? args::get(styleValue) : "";
// sigint handling
struct sigaction sigIntHandler;