#include #include #include #include #include #include #include #include #include #include #include namespace { using namespace aethera; using namespace aethera::render_2d; template Object* build_object(Arguments&&... arguments) { typename Object::Builder builder(std::forward(arguments)...); auto result = builder.build(); if (!result) std::_Exit(2); return std::move(result).value().release(); } bool contains_color(Image_View view) { for (int y = 0; y < view.height; ++y) { const auto* row = reinterpret_cast( view.data + static_cast(y) * view.stride); for (int x = 0; x < view.width; ++x) if (row[x] != 0) return true; } return false; } } int main() { using Frequency = Impl; using Power = Impl; using Time = Impl; using Spectrum_Object = Impl; using Constellation_Object = Impl; using Waterfall_Object = Impl; using Scene_Object = Impl; initialize_runtime({.workers = 4}); auto* frequency = build_object(); auto* power = build_object(); auto* spectrum = build_object(frequency, power, 4u); auto* time = build_object