20 bool enable_validation =
true;
23 bool enable_debug_markers =
false;
27 bool compute_shaders =
true;
28 bool geometry_shaders =
false;
29 bool tessellation_shaders =
false;
30 bool multi_viewport =
false;
31 bool sampler_anisotropy =
true;
32 bool fill_mode_non_solid =
false;
56 } device_preference = DevicePreference::AUTO;
59 int32_t device_index = -1;
68 bool require_presentation =
true;
71 bool strict_device_selection =
false;
78 } memory_strategy = MemoryStrategy::BALANCED;
85 } command_pooling = CommandPooling::PER_THREAD;
88 uint32_t max_frames_in_flight = 2;
91 bool enable_compute_queue =
true;
94 bool enable_transfer_queue =
false;
101 } shader_compilation = ShaderCompilation::CACHED;
104 std::filesystem::path shader_cache_dir =
"cache/shaders";
112 return std::make_tuple(
113 Reflect::member(
"enable_validation", &GraphicsBackendInfo::enable_validation),
114 Reflect::member(
"enable_debug_markers", &GraphicsBackendInfo::enable_debug_markers),
115 Reflect::member(
"device_preference", &GraphicsBackendInfo::device_preference),
116 Reflect::member(
"device_index", &GraphicsBackendInfo::device_index),
117 Reflect::member(
"device_uuid", &GraphicsBackendInfo::device_uuid),
118 Reflect::member(
"device_name", &GraphicsBackendInfo::device_name),
119 Reflect::member(
"require_presentation", &GraphicsBackendInfo::require_presentation),
120 Reflect::member(
"strict_device_selection", &GraphicsBackendInfo::strict_device_selection),
122 Reflect::member(
"memory_strategy", &GraphicsBackendInfo::memory_strategy),
123 Reflect::member(
"command_pooling", &GraphicsBackendInfo::command_pooling),
124 Reflect::member(
"max_frames_in_flight", &GraphicsBackendInfo::max_frames_in_flight),
125 Reflect::member(
"enable_compute_queue", &GraphicsBackendInfo::enable_compute_queue),
126 Reflect::member(
"enable_transfer_queue", &GraphicsBackendInfo::enable_transfer_queue),
127 Reflect::member(
"shader_compilation", &GraphicsBackendInfo::shader_compilation),
128 Reflect::member(
"shader_cache_dir", &GraphicsBackendInfo::shader_cache_dir),
129 Reflect::member(
"required_extensions", &GraphicsBackendInfo::required_extensions),
130 Reflect::member(
"optional_extensions", &GraphicsBackendInfo::optional_extensions));
142 uint32_t max_windows = 16;
145 uint32_t max_staging_buffer_mb = 256;
148 uint32_t max_compute_buffer_mb = 1024;
151 uint32_t max_texture_cache_mb = 2048;
154 uint32_t max_descriptor_sets = 1024;
157 uint32_t max_pipelines = 256;
161 return std::make_tuple(
162 Reflect::member(
"max_windows", &GraphicsResourceLimits::max_windows),
163 Reflect::member(
"max_staging_buffer_mb", &GraphicsResourceLimits::max_staging_buffer_mb),
164 Reflect::member(
"max_compute_buffer_mb", &GraphicsResourceLimits::max_compute_buffer_mb),
165 Reflect::member(
"max_texture_cache_mb", &GraphicsResourceLimits::max_texture_cache_mb),
166 Reflect::member(
"max_descriptor_sets", &GraphicsResourceLimits::max_descriptor_sets),
167 Reflect::member(
"max_pipelines", &GraphicsResourceLimits::max_pipelines));
231 uint32_t image_count = 3;
234 bool enable_regions =
true;
237 uint32_t max_regions_per_window = 256;
243 bool measure_frame_time {};
250 return std::make_tuple(
251 Reflect::member(
"format", &GraphicsSurfaceInfo::format),
252 Reflect::member(
"color_space", &GraphicsSurfaceInfo::color_space),
253 Reflect::member(
"present_mode", &GraphicsSurfaceInfo::present_mode),
254 Reflect::member(
"image_count", &GraphicsSurfaceInfo::image_count),
255 Reflect::member(
"enable_regions", &GraphicsSurfaceInfo::enable_regions),
256 Reflect::member(
"max_regions_per_window", &GraphicsSurfaceInfo::max_regions_per_window),
257 Reflect::member(
"enable_hdr", &GraphicsSurfaceInfo::enable_hdr),
258 Reflect::member(
"measure_frame_time", &GraphicsSurfaceInfo::measure_frame_time));
262#ifdef MAYAFLUX_PLATFORM_MACOS
271struct GlfwPreInitConfig {
272 bool cocoa_chdir_resources =
true;
273 bool cocoa_menubar =
true;
278 static constexpr auto describe()
280 return std::make_tuple(
281 Reflect::member(
"cocoa_chdir_resources", &GlfwPreInitConfig::cocoa_chdir_resources),
282 Reflect::member(
"cocoa_menubar", &GlfwPreInitConfig::cocoa_menubar),
283 Reflect::member(
"headless", &GlfwPreInitConfig::headless));
307 return std::make_tuple(
342 return std::make_tuple(
351#ifdef MAYAFLUX_PLATFORM_MACOS
353 GlfwPreInitConfig glfw_preinit_config;
391 uint32_t target_frame_rate = 60;
393#if defined(MAYAFLUX_PLATFORM_WINDOWS)
395#error "Windows builds require WIN32_BACKEND"
399#elif defined(WAYLAND_BACKEND)
412#if defined(MAYAFLUX_PLATFORM_LINUX)
413 "sans-serif",
"", 24, 512
414#elif defined(MAYAFLUX_PLATFORM_MACOS)
415 "Helvetica Neue",
"", 24, 512
416#elif defined(MAYAFLUX_PLATFORM_WINDOWS)
417 "Segoe UI",
"", 24, 512
419 "sans-serif",
"", 24, 512
423#ifdef MAYAFLUX_PLATFORM_MACOS
424 static constexpr auto describe()
426 return std::make_tuple(
427 Reflect::member(
"glfw_preinit_config", &GlobalGraphicsConfig::glfw_preinit_config),
428 Reflect::member(
"key_repeat_config", &GlobalGraphicsConfig::key_repeat_config),
429 Reflect::member(
"surface_info", &GlobalGraphicsConfig::surface_info),
430 Reflect::member(
"backend_info", &GlobalGraphicsConfig::backend_info),
431 Reflect::member(
"resource_limits", &GlobalGraphicsConfig::resource_limits),
432 Reflect::member(
"target_frame_rate", &GlobalGraphicsConfig::target_frame_rate),
433 Reflect::member(
"windowing_backend", &GlobalGraphicsConfig::windowing_backend),
434 Reflect::member(
"requested_api", &GlobalGraphicsConfig::requested_api),
435 Reflect::member(
"text_config", &GlobalGraphicsConfig::text_config));
440 return std::make_tuple(
441 Reflect::member(
"key_repeat_config", &GlobalGraphicsConfig::key_repeat_config),
442 Reflect::member(
"surface_info", &GlobalGraphicsConfig::surface_info),
443 Reflect::member(
"backend_info", &GlobalGraphicsConfig::backend_info),
444 Reflect::member(
"resource_limits", &GlobalGraphicsConfig::resource_limits),
445 Reflect::member(
"target_frame_rate", &GlobalGraphicsConfig::target_frame_rate),
446 Reflect::member(
"windowing_backend", &GlobalGraphicsConfig::windowing_backend),
447 Reflect::member(
"requested_api", &GlobalGraphicsConfig::requested_api),
448 Reflect::member(
"text_config", &GlobalGraphicsConfig::text_config));
468 std::string title {
"MayaFlux Window" };
475 int32_t monitor_id { -1 };
481 bool resizable {
true };
484 bool decorated {
true };
493 bool register_for_processing {
true };
503 uint32_t color_channels { 4 };
508 std::array<float, 4> clear_color { { 0.0F, 0.0F, 0.0F, 1.0F } };
678 bool is_primary =
false;
CursorMode
Cursor visibility and behavior.
@ DISABLED
Invisible and locked (FPS camera)
@ NORMAL
Visible and movable.
@ CAPTURED
Invisible, locked, raw motion.
@ HIDDEN
Invisible but movable.
WindowEventType
Types of window and input events.
std::function< void(const WindowEvent &)> WindowEventCallback
constexpr auto member(std::string_view key, T Class::*ptr)
GraphicsSurfaceInfo surface_info
System-wide configuration for visual stream processing.
WindowingBackend
Windowing library selection.
static constexpr auto describe()
GraphicsResourceLimits resource_limits
Resource limits.
GraphicsBackendInfo backend_info
Graphics backend configuration.
KeyRepeatConfig key_repeat_config
Key repeat timing for native Wayland and Win32 backends.
std::vector< std::string > required_extensions
Backend-specific extensions to request.
MemoryStrategy
Memory allocation strategy.
DevicePreference
Preferred physical device class when no explicit selector matches.
std::vector< std::string > optional_extensions
std::string device_name
Case-insensitive substring of the device name; empty disables.
CommandPooling
Command buffer pooling strategy.
static constexpr auto describe()
ShaderCompilation
Shader compilation strategy.
std::string device_uuid
Device UUID as 32 lowercase hex chars, no separators; empty disables.
Configuration for graphics API backend (Vulkan/OpenGL/etc.)
static constexpr auto describe()
Resource limits and budgets for graphics subsystem.
ColorSpace
Default color space for window surfaces.
SurfaceFormat
Default pixel format for window surfaces (Vulkan-compatible)
static constexpr auto describe()
PresentMode
Frame presentation strategy.
std::unordered_map< std::string, std::any > backend_options
Backend-specific configuration parameters.
System-wide configuration for visual stream processing.
uint32_t interval_ms
Interval between repeat events in milliseconds.
uint32_t initial_delay_ms
Delay before repeat starts in milliseconds.
static constexpr auto describe()
bool allow_compositor_override
If true, compositor-reported repeat_info overrides these values.
Key repeat timing for native window backends.
Information about a physical display.
std::string style
Optional style hint (e.g.
static constexpr auto describe()
uint32_t atlas_size
Atlas texture dimension (power of two).
uint32_t pixel_size
Glyph rasterization height in pixels.
std::string family
Font family name forwarded to Platform::find_font().
Default font configuration for Portal::Text.
bool operator==(const VideoMode &other) const
std::optional< GraphicsSurfaceInfo::PresentMode > present_mode
Override global present mode (nullopt = use global default)
std::optional< GraphicsSurfaceInfo::SurfaceFormat > surface_format
Override global surface format (nullopt = use global default)
Configuration for creating a single window instance.
std::variant< std::monostate, ResizeData, KeyData, MousePosData, MouseButtonData, ScrollData, std::any > EventData
WindowEvent(const WindowEvent &)=default
WindowEvent(WindowEvent &&) noexcept=default
Event data for window and input events.
double average_frame_time
Runtime state of a window (mutable by system, read by user)