MXVK Vulkan Framework 0.24.0
C++20 Vulkan rendering framework for practical 2D and 3D application development with SDL3.
Loading...
Searching...
No Matches
argz.hpp File Reference

Lightweight, header-only, template command-line argument parser. More...

#include "mxvk_runtime_options.hpp"
#include <algorithm>
#include <cctype>
#include <charconv>
#include <cmath>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <filesystem>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <ranges>
#include <string>
#include <string_view>
#include <system_error>
#include <type_traits>
#include <unordered_map>
#include <utility>
#include <vector>
#include <unistd.h>

Go to the source code of this file.

Classes

class  ArgException< String >
 Exception thrown by Argz::proc() on unrecognised or malformed options. More...
struct  Argument< String >
 Describes a single parsed argument entry returned by Argz::proc(). More...
struct  ArgumentData< String >
 Holds the raw argv strings converted to the target String type. More...
struct  Arguments
 Plain data structure returned by proc_args() with all common libmx2 CLI options. More...
class  Argz< String >
 Template command-line argument parser. More...
struct  FramebufferDimensions
 Parsed software framebuffer dimensions. More...

Concepts

concept  StringType
 Models a string-like class with indexing, concatenation, length, and value_type.

Enumerations

enum class  ArgType {
  ARG_SINGLE , ARG_SINGLE_VALUE , ARG_DOUBLE , ARG_DOUBLE_VALUE ,
  ARG_NONE
}
 Discriminator for option kind used inside Argument. More...

Functions

std::string executable_directory (const char *executable)
double parse_arg_double (const std::string &text, const std::string &option_name)
int parse_arg_int (const std::string &text, const std::string &option_name)
std::string parse_executable_name (const char *argv0)
Arguments proc_args (int &argc, char **argv)
 Parse standard libmx2 command-line options from main()'s argv.

Detailed Description

Lightweight, header-only, template command-line argument parser.

Supports both short options (-x) and long options (--name), with or without values, for any string type that satisfies the StringType concept (typically std::string or std::wstring).

Typical usage:

Argz<std::string> parser(argc, argv);
parser.addOptionSingle('h', "Show help")
.addOptionSingleValue('o', "Output file");
int code;
while ((code = parser.proc(arg)) != -1) { ... }
Template command-line argument parser.
Definition argz.hpp:197
Describes a single parsed argument entry returned by Argz::proc().
Definition argz.hpp:120

A convenience wrapper proc_args() provides a pre-built parser that handles the options common to all libmx2 applications (-p path, -r resolution, -f fullscreen, …).

Definition in file argz.hpp.

Enumeration Type Documentation

◆ ArgType

enum class ArgType
strong

Discriminator for option kind used inside Argument.

Enumerator
ARG_SINGLE 
ARG_SINGLE_VALUE 
ARG_DOUBLE 
ARG_DOUBLE_VALUE 
ARG_NONE 

Definition at line 102 of file argz.hpp.

102 {
108};
@ ARG_DOUBLE_VALUE
Definition argz.hpp:106
@ ARG_SINGLE
Definition argz.hpp:103
@ ARG_SINGLE_VALUE
Definition argz.hpp:104
@ ARG_DOUBLE
Definition argz.hpp:105
@ ARG_NONE
Definition argz.hpp:107

Function Documentation

◆ executable_directory()

std::string executable_directory ( const char * executable)
inlinenodiscard

Definition at line 78 of file argz.hpp.

78 {
79#if defined(_WIN32)
80 std::vector<char> buffer(32768);
81 const DWORD length = GetModuleFileNameA(nullptr, buffer.data(), static_cast<DWORD>(buffer.size()));
82 if (length > 0 && length < buffer.size()) {
83 return std::filesystem::path(std::string(buffer.data(), length)).parent_path().lexically_normal().string();
84 }
85#elif defined(__linux__)
86 std::vector<char> buffer(4096);
87 const ssize_t length = readlink("/proc/self/exe", buffer.data(), buffer.size());
88 if (length > 0 && static_cast<std::size_t>(length) < buffer.size()) {
89 return std::filesystem::path(std::string(buffer.data(), static_cast<std::size_t>(length))).parent_path().lexically_normal().string();
90 }
91#endif
92
93 std::error_code error;
94 const std::filesystem::path absolute_path = std::filesystem::absolute(executable == nullptr ? "." : executable, error);
95 if (!error && absolute_path.has_parent_path()) {
96 return absolute_path.parent_path().lexically_normal().string();
97 }
98 return ".";
99}

◆ parse_arg_double()

double parse_arg_double ( const std::string & text,
const std::string & option_name )
inlinenodiscard

Definition at line 785 of file argz.hpp.

785 {
786 double value = 0.0;
787 const char *begin = text.data();
788 const char *end = begin + text.size();
789 const std::from_chars_result result = std::from_chars(begin, end, value);
790 if (result.ec != std::errc{} || result.ptr != end || !std::isfinite(value)) {
791 throw ArgException<std::string>("Invalid numeric value for " + option_name + ": " + text);
792 }
793 return value;
794}
Exception thrown by Argz::proc() on unrecognised or malformed options.
Definition argz.hpp:178

◆ parse_arg_int()

int parse_arg_int ( const std::string & text,
const std::string & option_name )
inlinenodiscard

Definition at line 774 of file argz.hpp.

774 {
775 int value = 0;
776 const char *begin = text.data();
777 const char *end = begin + text.size();
778 const std::from_chars_result result = std::from_chars(begin, end, value);
779 if (result.ec != std::errc{} || result.ptr != end) {
780 throw ArgException<std::string>("Invalid numeric value for " + option_name + ": " + text);
781 }
782 return value;
783}

◆ parse_executable_name()

std::string parse_executable_name ( const char * argv0)
inlinenodiscard

Definition at line 796 of file argz.hpp.

796 {
797 if (argv0 == nullptr || argv0[0] == '\0') {
798 return "mxvk";
799 }
800
801 std::string name = argv0;
802 const std::string::size_type separator = name.find_last_of("/\\");
803 if (separator != std::string::npos) {
804 name.erase(0, separator + 1);
805 }
806
807 constexpr std::string_view exe_extension = ".exe";
808 if (name.size() >= exe_extension.size()) {
809 const std::string::size_type extension_pos = name.size() - exe_extension.size();
810 const bool has_exe_extension = std::ranges::equal(name.begin() + static_cast<std::ptrdiff_t>(extension_pos),
811 name.end(),
812 exe_extension.begin(),
813 exe_extension.end(),
814 [](char left, char right) {
815 return std::tolower(static_cast<unsigned char>(left)) == std::tolower(static_cast<unsigned char>(right));
816 });
817 if (has_exe_extension) {
818 name.erase(extension_pos);
819 }
820 }
821
822 return name.empty() ? "mxvk" : name;
823}

◆ proc_args()

Arguments proc_args ( int & argc,
char ** argv )
inline

Parse standard libmx2 command-line options from main()'s argv.

Registers and processes the following options:

Flag Long form Description
-h Print help and exit
-p –path Asset directory path
-r –resolution Resolution as WxH (e.g. 1920x1080)
-f –fullscreen Enable fullscreen
–fast Enable fast mode
–filename Input filename
–model Model filename
-o –output Output filename
-c –crf Constant Rate Factor
–encode-preset Encoder preset
–encode-tune Encoder tune
–encode-codec Encoder codec policy or name
–encode-realtime Enable realtime/low-latency encoding
–mxwrite-block Block MXWrite when its queue is full
–repeat Enable playback or texture repetition
–binary Use binary glyphs only
–enable-crt Enable CRT post-processing at startup
–enable-vsync Enable FIFO present mode / v-sync
–enable-screenshot Enable F10 screenshot capture
–disable-sound Disable application background music
–benchmark Enable application benchmark mode
–wireframe Render supported 3D models as wireframes
–nowarpfix Disable perspective-correct texture mapping
–disable-mipmap Disable mipmap generation and selection
–mip-bias Mipmap level-of-detail bias
–framebuffer Software framebuffer size as WxH
–fps Override capture FPS
-z –font-size Matrix rain font size
-j –font-path Matrix rain font file path
-C –color Matrix rain RGB tint (#RRGGBB or R,G,B)
–texture Texture file
–textures Texture file alias
-S –shader-path SPV shader folder (must contain index.txt)
–fragment Fragment shader SPV path
-i –index Acidcam filter mode index
–shader-index Initial shader entry index
Parameters
argcReference to argc from main().
argvargv from main().
Returns
Populated Arguments struct; on parse error, returns a default-valued struct.

Definition at line 872 of file argz.hpp.

872 {
873 Arguments args;
874 const std::string executable_name = parse_executable_name(argc > 0 ? argv[0] : nullptr);
875 Argz<std::string> parser(argc, argv);
876 parser.addOptionSingle('h', "Display help message")
877 .addOptionSingle('v', "Print version")
878 .addOptionSingleValue('p', "assets path")
879 .addOptionDoubleValue('P', "path", "assets path")
880 .addOptionSingleValue('r', "Resolution WidthxHeight")
881 .addOptionDoubleValue('R', "resolution", "Resolution WidthxHeight")
882 .addOptionSingle('f', "fullscreen")
883 .addOptionDouble('F', "fullscreen", "fullscreen")
884 .addOptionDouble(301, "fast", "fast")
885 .addOptionDoubleValue(256, "filename", "input filename")
886 .addOptionDoubleValue(324, "model", "model filename (.obj, .mxmod, or .mxmod.z)")
887 .addOptionSingleValue('o', "output filename")
888 .addOptionDoubleValue(304, "output", "output filename")
889 .addOptionSingleValue('c', "crf value")
890 .addOptionDoubleValue(305, "crf", "crf value")
891 .addOptionDoubleValue(306, "encode-preset", "encoder preset")
892 .addOptionDoubleValue(307, "encode-tune", "encoder tune")
893 .addOptionDoubleValue(308, "encode-codec", "encoder codec policy or name")
894 .addOptionDouble(309, "encode-realtime", "encoder realtime mode")
895 .addOptionDouble(314, "mxwrite-block", "block MXWrite when its queue is full")
896 .addOptionDouble(310, "repeat", "repeat playback or wrapped textures")
897 .addOptionDouble(315, "binary", "use binary glyphs only")
898 .addOptionDouble(319, "enable-crt", "enable CRT post-processing at startup")
899 .addOptionDouble(320, "enable-vsync", "enable FIFO present mode / v-sync")
900 .addOptionDouble(322, "enable-screenshot", "enable F10 screenshot capture")
901 .addOptionDouble(325, "disable-sound", "disable background music")
902 .addOptionDouble(330, "benchmark", "enable application benchmark mode")
903 .addOptionDouble(331, "wireframe", "render supported 3D models as wireframes")
904 .addOptionDouble(326, "nowarpfix", "3dmath - disable perspective-correct texture mapping")
905 .addOptionDoubleValue(327, "framebuffer", "3dmath - software framebuffer size WidthxHeight")
906 .addOptionDouble(328, "disable-mipmap", "3dmath - disable mipmap generation and selection")
907 .addOptionDoubleValue(329, "mip-bias", "3dmath - mipmap level-of-detail bias (-16 to 16)")
908 .addOptionDoubleValue(321, "fps", "capture FPS override")
909 .addOptionSingleValue('z', "matrix rain font size")
910 .addOptionDoubleValue(316, "font-size", "matrix rain font size")
911 .addOptionSingleValue('j', "matrix rain font file path")
912 .addOptionDoubleValue(317, "font-path", "matrix rain font file path")
913 .addOptionSingleValue('C', "matrix rain RGB tint (#RRGGBB or R,G,B)")
914 .addOptionDoubleValue(318, "color", "matrix rain RGB tint (#RRGGBB or R,G,B)")
915 .addOptionDoubleValue(302, "resource", "resource file")
916 .addOptionDoubleValue(303, "resource_path", "resource data path")
917 .addOptionDoubleValue(257, "texture", "texture file (.png or .tex)")
918 .addOptionDoubleValue(323, "textures", "texture file (.png or .tex)")
919 .addOptionSingleValue('S', "shader SPV folder path (contains index.txt)")
920 .addOptionDoubleValue(258, "shader-path", "shader SPV folder path (contains index.txt)")
921 .addOptionDoubleValue(313, "fragment", "fragment shader SPV path")
922 .addOptionSingleValue('i', "acidcam filter mode index")
923 .addOptionDoubleValue(311, "index", "acidcam filter mode index")
924 .addOptionDoubleValue(312, "shader-index", "initial shader entry index")
925 .addOptionDoubleValue(300, "camera", "camera index");
926
928 std::string path;
929 int value = 0;
930 int tw = 1280, th = 720;
931 bool fullscreen = false;
932 bool fast = false;
933 bool resolutionSpecified = false;
934 std::string filename;
935 std::string model;
936 std::string output;
937 std::string crf;
938 std::string encodePreset;
939 std::string encodeTune;
940 std::string encodeCodec;
941 bool encodeRealtime = false;
942 bool mxwriteBlockWhenFull = false;
943 bool repeat = false;
944 bool binary = false;
945 bool enable_crt = false;
946 bool enable_vsync = false;
947 bool enable_screenshot = false;
948 bool disable_sound = false;
949 bool benchmark = false;
950 bool wireframe = false;
951 bool nowarpfix = false;
952 bool disable_mipmap = false;
953 float mip_bias = 0.0f;
954 FramebufferDimensions framebuffer;
955 bool framebufferSpecified = false;
956 double fps = 0.0;
957 int font_size = 22;
958 std::string font_path;
959 std::string color;
960 std::string texture;
961 std::string shaderPath;
962 std::string fragmentPath;
963 int camera_index = 0;
964 int index = 0;
965 int shader_index = 0;
966 std::string resource;
967 std::string resource_path;
968 while ((value = parser.proc(arg)) != -1) {
969 switch (value) {
970 case 303:
971 resource_path = arg.arg_value;
972 break;
973 case 302:
974 resource = arg.arg_value;
975 break;
976 case 256:
977 filename = arg.arg_value;
978 break;
979 case 324:
980 model = arg.arg_value;
981 break;
982 case 'o':
983 case 304:
984 output = arg.arg_value;
985 break;
986 case 'c':
987 case 305:
988 crf = arg.arg_value;
989 break;
990 case 306:
991 encodePreset = arg.arg_value;
992 break;
993 case 307:
994 encodeTune = arg.arg_value;
995 break;
996 case 308:
997 encodeCodec = arg.arg_value;
998 break;
999 case 309:
1000 encodeRealtime = true;
1001 break;
1002 case 314:
1003 mxwriteBlockWhenFull = true;
1004 break;
1005 case 310:
1006 repeat = true;
1007 break;
1008 case 315:
1009 binary = true;
1010 break;
1011 case 319:
1012 enable_crt = true;
1013 break;
1014 case 320:
1015 enable_vsync = true;
1016 break;
1017 case 322:
1018 enable_screenshot = true;
1019 break;
1020 case 325:
1021 disable_sound = true;
1022 break;
1023 case 330:
1024 benchmark = true;
1025 break;
1026 case 331:
1027 wireframe = true;
1028 break;
1029 case 326:
1030 nowarpfix = true;
1031 break;
1032 case 327: {
1033 const std::string::size_type separator = arg.arg_value.find('x');
1034 if (separator == std::string::npos) {
1035 throw ArgException<std::string>("Invalid framebuffer size, expected WidthxHeight: " + arg.arg_value);
1036 }
1037 framebuffer.width = parse_arg_int(arg.arg_value.substr(0, separator), "--framebuffer width");
1038 framebuffer.height = parse_arg_int(arg.arg_value.substr(separator + 1), "--framebuffer height");
1039 if (framebuffer.width <= 0 || framebuffer.height <= 0) {
1040 throw ArgException<std::string>("Invalid framebuffer size: " + arg.arg_value);
1041 }
1042 framebufferSpecified = true;
1043 } break;
1044 case 328:
1045 disable_mipmap = true;
1046 break;
1047 case 329: {
1048 const double parsed_mip_bias = parse_arg_double(arg.arg_value, "--mip-bias");
1049 if (parsed_mip_bias < -16.0 || parsed_mip_bias > 16.0) {
1050 throw ArgException<std::string>("Mip bias must be between -16 and 16: " + arg.arg_value);
1051 }
1052 mip_bias = static_cast<float>(parsed_mip_bias);
1053 } break;
1054 case 321:
1055 fps = parse_arg_double(arg.arg_value, "--fps");
1056 if (fps <= 0.0) {
1057 throw ArgException<std::string>("Invalid numeric value for --fps: " + arg.arg_value);
1058 }
1059 break;
1060 case 'z':
1061 case 316:
1062 font_size = parse_arg_int(arg.arg_value, "--font-size");
1063 if (font_size <= 0) {
1064 throw ArgException<std::string>("Invalid numeric value for --font-size: " + arg.arg_value);
1065 }
1066 break;
1067 case 'j':
1068 case 317:
1069 font_path = arg.arg_value;
1070 break;
1071 case 'C':
1072 case 318:
1073 color = arg.arg_value;
1074 break;
1075 case 257:
1076 case 323:
1077 texture = arg.arg_value;
1078 break;
1079 case 'S':
1080 case 258:
1081 shaderPath = arg.arg_value;
1082 break;
1083 case 313:
1084 fragmentPath = arg.arg_value;
1085 break;
1086 case 'h':
1087 case 'v':
1088 parser.help(std::cout);
1089 exit(EXIT_SUCCESS);
1090 break;
1091 case 'p':
1092 case 'P':
1093 path = arg.arg_value;
1094 break;
1095 case 'r':
1096 case 'R': {
1097 auto pos = arg.arg_value.find("x");
1098 if (pos == std::string::npos) {
1099 throw ArgException<std::string>("Invalid resolution for --resolution, expected WidthxHeight: " + arg.arg_value);
1100 }
1101 std::string left, right;
1102 left = arg.arg_value.substr(0, pos);
1103 right = arg.arg_value.substr(pos + 1);
1104 tw = parse_arg_int(left, "--resolution width");
1105 th = parse_arg_int(right, "--resolution height");
1106 if (tw <= 0 || th <= 0) {
1107 throw ArgException<std::string>("Invalid numeric value for --resolution: " + arg.arg_value);
1108 }
1109 resolutionSpecified = true;
1110 } break;
1111 case 'f':
1112 case 'F':
1113 fullscreen = true;
1114 break;
1115 case 301:
1116 fast = true;
1117 break;
1118 case 300:
1119 camera_index = parse_arg_int(arg.arg_value, "--camera");
1120 break;
1121 case 'i':
1122 case 311:
1123 index = parse_arg_int(arg.arg_value, "--index");
1124 break;
1125 case 312:
1126 shader_index = parse_arg_int(arg.arg_value, "--shader-index");
1127 break;
1128 }
1129 }
1130 if (path.empty()) {
1131 path = executable_directory(argc > 0 ? argv[0] : nullptr);
1132 std::cerr << "mx: No path provided; using executable directory: " << path << '\n';
1133 } else {
1134 std::error_code error;
1135 const std::filesystem::path absolute_path = std::filesystem::absolute(path, error);
1136 if (!error) {
1137 path = absolute_path.lexically_normal().string();
1138 }
1139 }
1140 args.executable_name = executable_name;
1141 mxvk::setDefaultExecutableName(executable_name);
1142 args.width = tw;
1143 args.height = th;
1144 args.resolutionSpecified = resolutionSpecified;
1145 args.path = path;
1146 args.fullscreen = fullscreen;
1147 args.fast = fast;
1148 args.filename = filename;
1149 args.model = model;
1150 args.output = output;
1151 args.crf = crf;
1152 args.encodePreset = encodePreset;
1153 args.encodeTune = encodeTune;
1154 args.encodeCodec = encodeCodec;
1155 args.encodeRealtime = encodeRealtime;
1156 args.mxwriteBlockWhenFull = mxwriteBlockWhenFull;
1157 args.repeat = repeat;
1158 args.binary = binary;
1159 args.enable_crt = enable_crt;
1160 args.enable_vsync = enable_vsync;
1161 args.enable_screenshot = enable_screenshot;
1162 args.disable_sound = disable_sound;
1163 args.benchmark = benchmark;
1164 args.wireframe = wireframe;
1165 args.nowarpfix = nowarpfix;
1166 args.disable_mipmap = disable_mipmap;
1167 args.mip_bias = mip_bias;
1168 args.framebuffer = framebuffer;
1169 args.framebufferSpecified = framebufferSpecified;
1170 mxvk::setDefaultEnableScreenshot(enable_screenshot);
1171 args.fps = fps;
1172 args.font_size = font_size;
1173 args.font_path = font_path;
1174 args.color = color;
1175 args.texture = texture;
1176 args.shaderPath = shaderPath;
1177 args.fragmentPath = fragmentPath;
1178 args.camera_index = camera_index;
1179 args.index = index;
1180 args.shader_index = shader_index;
1181 args.resource = resource;
1182 args.resource_path = resource_path;
1183 return args;
1184}
std::string executable_directory(const char *executable)
Definition argz.hpp:78
double parse_arg_double(const std::string &text, const std::string &option_name)
Definition argz.hpp:785
int parse_arg_int(const std::string &text, const std::string &option_name)
Definition argz.hpp:774
std::string parse_executable_name(const char *argv0)
Definition argz.hpp:796
void setDefaultEnableScreenshot(bool enabled)
void setDefaultExecutableName(const std::string &name)
String arg_value
Value string supplied after the option, if any.
Definition argz.hpp:123
Plain data structure returned by proc_args() with all common libmx2 CLI options.
Definition argz.hpp:730
FramebufferDimensions framebuffer
Software framebuffer size requested by --framebuffer.
Definition argz.hpp:758
std::string shaderPath
Optional SPV shader folder path (-S / --shader-path).
Definition argz.hpp:765
bool framebufferSpecified
Whether --framebuffer was provided.
Definition argz.hpp:759
std::string output
Optional output filename (--output).
Definition argz.hpp:740
std::string font_path
Optional font file path (--font-path).
Definition argz.hpp:762
bool mxwriteBlockWhenFull
Make MXWrite block instead of dropping frames (--mxwrite-block).
Definition argz.hpp:746
bool fast
Whether fast mode was requested (--fast).
Definition argz.hpp:737
int camera_index
Optional camera index.
Definition argz.hpp:767
bool enable_screenshot
Enable F10 screenshot capture (--enable-screenshot).
Definition argz.hpp:751
std::string encodeTune
Optional encoder tune (--encode-tune).
Definition argz.hpp:743
bool fullscreen
Whether fullscreen mode was requested.
Definition argz.hpp:736
int index
Optional acidcam filter mode index.
Definition argz.hpp:768
bool encodeRealtime
Enable low-latency encoder settings (--encode-realtime).
Definition argz.hpp:745
bool resolutionSpecified
Whether -r/–resolution was provided.
Definition argz.hpp:734
float mip_bias
Mipmap level-of-detail bias requested by --mip-bias.
Definition argz.hpp:757
std::string model
Optional model filename (--model).
Definition argz.hpp:739
bool enable_vsync
Enable FIFO present mode / v-sync (--enable-vsync).
Definition argz.hpp:750
std::string crf
Optional CRF value (--crf).
Definition argz.hpp:741
bool nowarpfix
Disable perspective-correct texture mapping (--nowarpfix).
Definition argz.hpp:755
std::string texture
Optional texture file path (--texture).
Definition argz.hpp:764
int height
Viewport height in pixels (default: 720).
Definition argz.hpp:733
double fps
Optional FPS override (--fps); non-positive means unspecified.
Definition argz.hpp:760
std::string encodeCodec
Optional encoder codec policy/name (--encode-codec).
Definition argz.hpp:744
std::string color
Optional rain RGB tint (--color).
Definition argz.hpp:763
std::string resource_path
Resource path.
Definition argz.hpp:771
bool repeat
Enable repeat behavior such as playback looping or wrapped textures.
Definition argz.hpp:747
std::string filename
Optional input filename (--filename).
Definition argz.hpp:738
std::string encodePreset
Optional encoder preset (--encode-preset).
Definition argz.hpp:742
std::string path
Asset root; proc_args() defaults it to the executable directory.
Definition argz.hpp:735
std::string fragmentPath
Optional fragment shader SPV path (--fragment).
Definition argz.hpp:766
std::string executable_name
Executable basename derived from argv[0].
Definition argz.hpp:731
bool benchmark
Enable application benchmark mode (--benchmark).
Definition argz.hpp:753
bool wireframe
Render supported 3D models as wireframes (--wireframe).
Definition argz.hpp:754
int width
Viewport width in pixels (default: 1280).
Definition argz.hpp:732
std::string resource
Resource file.
Definition argz.hpp:770
bool enable_crt
Enable CRT post-processing at startup (--enable-crt).
Definition argz.hpp:749
int shader_index
Optional initial shader entry index.
Definition argz.hpp:769
bool disable_mipmap
Disable mipmap generation and selection (--disable-mipmap).
Definition argz.hpp:756
int font_size
Matrix rain font size in pixels (--font-size).
Definition argz.hpp:761
bool binary
Use binary glyphs only (--binary).
Definition argz.hpp:748
bool disable_sound
Disable application background music (--disable-sound).
Definition argz.hpp:752
Parsed software framebuffer dimensions.
Definition argz.hpp:721
int width
Software framebuffer width in pixels.
Definition argz.hpp:722
int height
Software framebuffer height in pixels.
Definition argz.hpp:723