47 Tempest::ApiFlags flg = g.
isValidationMode() ? Tempest::ApiFlags::Validation : Tempest::ApiFlags::NoFlags;
51 return std::make_unique<Tempest::DirectX12Api>(flg);
56#if !defined(__APPLE__)
57 return std::make_unique<Tempest::VulkanApi>(flg);
64 return std::make_unique<Tempest::MetalApi>(flg);
66 return std::make_unique<Tempest::VulkanApi>(flg);
70int main(
int argc,
const char** argv) {
73 auto appdir = InstallDetect::applicationSupportDirectory();
74 std::filesystem::current_path(appdir);
79 static Tempest::WFile logFile(
"log.txt");
80 Tempest::Log::setOutputCallback([](Tempest::Log::Mode mode,
const char* text) {
81 logFile.write(text,std::strlen(text));
82 logFile.write(
"\n",1);
83 if(mode==Tempest::Log::Error)
88 Tempest::Log::e(
"unable to setup logfile - fallback to console log");
92 zenkit::Logger::set(zenkit::LogLevel::INFO, [] (zenkit::LogLevel lvl,
const char* cat,
const char* message) {
95 case zenkit::LogLevel::ERROR:
96 Tempest::Log::e(
"[zenkit] ", message);
98 case zenkit::LogLevel::WARNING:
99 Tempest::Log::e(
"[zenkit] ", message);
101 case zenkit::LogLevel::INFO:
102 Tempest::Log::i(
"[zenkit] ", message);
104 case zenkit::LogLevel::DEBUG:
105 case zenkit::LogLevel::TRACE:
106 Tempest::Log::d(
"[zenkit] ", message);
110 Dm_setLogger(DmLogLevel_INFO, [](
void* ctx, DmLogLevel lvl,
char const* msg) {
112 case DmLogLevel_FATAL:
113 case DmLogLevel_ERROR:
114 case DmLogLevel_WARN:
115 Tempest::Log::e(
"[dmusic] ", msg);
117 case DmLogLevel_INFO:
118 Tempest::Log::i(
"[dmusic] ", msg);
120 case DmLogLevel_DEBUG:
121 case DmLogLevel_TRACE:
122 Tempest::Log::d(
"[dmusic] ", msg);
131 auto api =
mkApi(cmd);
135 Tempest::Device device{*api,
gpuName};
144 Tempest::Application app;
Main application window handling game rendering and input.
int main(int argc, const char **argv)
std::unique_ptr< Tempest::AbstractGraphicsApi > mkApi(const CommandLine &g)
std::string_view selectDevice(const Tempest::AbstractGraphicsApi &api)
Main application window for OpenGothic.